드라이버 버전 업그레이드
이 페이지의 내용
개요
이 섹션에서는 드라이버를 새 버전으로 업그레이드하기 위해 애플리케이션에 적용해야 할 변경 사항을 확인할 수 있습니다.
업그레이드하기 전에 다음 작업을 수행하세요:
새 버전이 애플리케이션 이 연결되는 MongoDB Server 버전 및 애플리케이션 이 실행되는 Java 런타임 환경(JRE)과 호환되는지 확인하세요. 이 정보는 Java 호환성 페이지를 참조하세요.
애플리케이션에서 사용 중인 드라이버의 현재 버전과 업그레이드 예정 버전 간의 호환성이 손상되는 변경은 호환성이 손상되는 변경 섹션에서 확인하세요. MongoDB Server 릴리스 호환성 변경 사항에 대해 자세히 알아보려면 MongoDB Server 릴리스 호환성 변경 사항 섹션을 참조하세요.
팁
향후 드라이버 버전을 업그레이드할 때 애플리케이션에 필요한 변경 사항을 최소화하려면 Stable API를 사용하세요.
호환성이 손상되는 변경
호환성이 손상되는 변경은 업그레이드하기 전에 해결하지 않으면 애플리케이션이 제대로 작동하지 않을 수 있는 특정 버전의 드라이버 규칙이나 동작의 수정입니다.
이 섹션의 호환성이 손상되는 변경은 이를 도입한 드라이버 버전별로 분류됩니다. 드라이버 버전을 업그레이드할 때 현재 버전과 업그레이드 버전 간의 호환성이 손상되는 변경을 모두 해소합니다. 예를 들어 드라이버를 v4.0에서 v4.5로 업그레이드하는 경우, v4.5에 나열된 변경 사항을 포함하여 v4.0 이후 버전의 모든 호환성이 손상되는 변경을 해소해야 합니다.
버전 5.2 호환성이 손상되는 변경
운전자 는 더 이상 MongoDB Server 버전 v 와 호환되지3.6 않습니다. 이 변경 사항에 학습 보려면 드라이버 5.2 버전 서버 지원 변경 섹션을 참조하세요.
버전 5.0 주요 변경 사항
이 드라이버 버전에는 다음과 같은 호환성이 손상되는 변경이 도입되었습니다.
ConnectionId
클래스에 다음과 같은 변경 사항을 도입합니다.ConnectionId
생성자는 이제 두 번째 매개 변수로int
유형 대신long
유형의 값을 허용합니다. 마찬가지로, 생성자는 이제 세 번째 매개 변수로Integer
유형 대신Long
유형의 값을 허용합니다. 이 변경으로 인해 바이너리 호환성이 중단되므로ConnectionId
생성자를 호출하는 모든 기존 코드를 다시 컴파일합니다.withServerValue()
메서드는 이제int
유형이 아닌long
유형의 매개변수를 허용합니다. 이 변경으로 인해 바이너리 호환성이 중단되므로withServerValue()
메서드를 호출하는 모든 코드를 다시 컴파일해야 합니다.getServerValue()
메서드는 이제Integer
유형 대신Long
유형의 값을 반환합니다. 마찬가지로getLocalValue()
메서드는int
유형 대신long
유형의 값을 반환합니다. 이 변경으로 인해 바이너리 및 소스 호환성이 모두 중단되므로 이러한 메서드를 사용하는 모든 소스 코드를 업데이트하고 바이너리를 다시 빌드하세요.
org.bson.codecs.record.annotations
패키지의 다음 레코드 주석을org.bson.codecs.pojo.annotations
패키지의 동일한 이름의 주석으로 대체합니다.BsonId
BsonProperty
BsonRepresentation
SocketSettings.Builder.connectTimeout()
및SocketSettings.Builder.readTimeout()
메서드에서 시간 초과 기간 매개변수의 데이터 유형을 변경합니다. 이 매개변수의 데이터 유형은 이제long
int
입니다.이전 버전에서 이 매개변수는 두 메서드 모두에서
int
유형입니다. 이 변경으로 인해 바이너리 호환성이 중단되어 다시 컴파일해야 하지만 코드를 변경할 필요는 없습니다.SocketSettings
메서드를 호출하는 방법을 보여주는 예제를 보려면 MongoClient 설정 지정 가이드의 SocketSettings 예제 를 참조하세요.벡터 검색을 수행할 때 동일성 필터를 구성할 수 있도록 하는
Beta
독점으로 릴리스된Filters.eqFull()
메서드를 제거합니다. 다음 코드와 같이VectorSearchOptions
유형을 인스턴스화할 때Filters.eq()
메서드를 사용할 수 있습니다.VectorSearchOptions opts = vectorSearchOptions().filter(eq("x", 8));
org.mongodb.scala.ObservableImplicits.ToSingleObservableVoid
암시적 클래스를 제거합니다. 이는org.reactivestreams.Publisher[Void]
유형이 더 이상org.mongodb.scala.SingleObservable[Void]
로 자동으로 변환되지 않음을 의미합니다. 또한 API는org.mongodb.scala.Observable[Void]
org.mongodb.scala.Observable[Unit]
을(를) 노출합니다.자세한 내용은 스칼라 API 문서에서 관찰 가능 특성을 참조하세요.
ClusterSettings
가ClusterConnectionMode
을 계산하는 방식을 변경하여, 구성 방식에 관계없이 지정된 복제본 세트 이름을 사용하여 더 일관성을 유지합니다. 이전에는 복제본 세트 이름이 연결 문자열로 설정된 경우에만 고려되었습니다.예를 들어 다음 두 코드 샘플은 모두
ClusterConnectionMode.MULTIPLE
값을 반환하지만, 이전에는 두 번째 샘플은ClusterConnectionMode.SINGLE
을 반환했습니다.ClusterSettings.builder() .applyConnectionString(new ConnectionString("mongodb://127.0.0.1:27017/?replicaSet=replset")) .build() .getMode() ClusterSettings.builder() .hosts(Collections.singletonList( new ServerAddress("127.0.0.1", 27017) )) .requiredReplicaSetName("replset") .build() .getMode() Decimal128
값과 동일한 방식으로 응답하여BsonDecimal128
값이 메서드 호출에 응답하는 방식을 변경합니다. 특히BsonDecimal128.isNumber()
는 이제true
을 반환하고BsonDecimal128.asNumber()
는 이에 상응하는BsonNumber
를 반환합니다.ServerAddress 메서드
getSocketAddress()
및getSocketAddresses()
(을)를 제거합니다.getSocketAddress()
대신java.net.InetAddress
의getByName()
인스턴스 메서드를 사용합니다.getSocketAddresses()
대신java.net.InetAddress
의getAllByName()
인스턴스 메서드를 사용합니다.UnixServerAddress 메서드
getSocketAddress()
및getUnixSocketAddress()
를 제거합니다.getUnixSocketAddress()
대신jnr.unixsocket.UnixSocketAddress
의 인스턴스를 구성합니다. 생성자에 UNIX 소켓 파일의 전체 경로를 전달합니다. 기본적으로 MongoDB는"/tmp/mongodb-27017.sock"
에 UNIX 소켓 파일을 생성합니다.UnixSocketAddress
에 대한 자세한 내용은 UnixSocketAddress API 문서에서 확인하세요.Parameterizable
인터페이스를 제거합니다. 사용자 지정Codec
유형에서 이 인터페이스를 구현하는 대신 코덱이 매개변수화된 유형에 대해 의도된 경우 코덱의CodecProvider
에서CodecProvider.get()
메서드를 재정의합니다.ReadPreference
및TaggableReadPreference
클래스에서isSlaveOk()
메서드를 제거합니다. 읽기 설정 (read preference)이 복제본 세트의 세컨더리 멤버에서 읽기를 허용하는지 확인하려면 이러한 클래스의isSecondaryOk()
메서드를 대신 사용합니다.collStats
명령에 대한DBCollection.getStats()
및DBCollection.isCapped()
헬퍼 메서드를 제거합니다. 이러한 메서드 대신$collStats
집계 파이프라인 단계를 사용할 수 있습니다. 이 파이프라인 단계를 사용하는 방법에 대한 예는 4 내 새로운 기능을 참조하십시오.Java 드라이버용 11.MapCodec
및IterableCodec
클래스를 제거합니다.MapCodec
대신MapCodecProvider
을 사용합니다.IterableCodec
대신Collection
Iterable
유형의 경우CollectionCodecProvider
또는IterableCodecProvider
를 사용합니다.MapReducePublisher
및MapReduceIterable
클래스에서sharded()
및nonAtomic()
메서드를 제거합니다.geoHaystack
인덱스와 함께 사용할 수 있도록 다음 메서드를 제거합니다.Indexes.geoHaystack()
IndexOptions.getBucketSize()
IndexOptions.bucketSize()
대신 2d 인덱스에서
$geoNear
집계 파이프라인 단계 또는 지리 공간적 쿼리 연산자를 사용할 수 있습니다. 자세한 내용은 MongoDB Server 매뉴얼의 지리 공간적 쿼리 페이지를 참조하세요.찾기 작업에서
oplogReplay
옵션을 제거합니다. 여기에는 다음 메서드가 포함됩니다:DBCursor.oplogReplay()
DBCollectionFindOptions.isOplogReplay()
DBCollectionFindOptions.oplogReplay()
FindPublisher.oplogReplay()
FindIterable.oplogReplay()
다음
Exception
생성자를 제거합니다.MongoBulkWriteException(BulkWriteResult, List<BulkWriteError>, WriteConcernError, ServerAddress)
MongoCursorNotFoundException(long, ServerAddress)
MongoQueryException(ServerAddress, int, String)
MongoQueryException(ServerAddress, int, String, String)
MongoQueryException(MongoCommandException)
BulkWriteResult.acknowledged()
메서드에 대한 다음 오버로드를 제거합니다:acknowledged(Type, int, List<BulkWriteUpsert>)
acknowledged(Type, int, Integer, List<BulkWriteUpsert>)
acknowledged(int, int, int, Integer, List<BulkWriteUpsert>)
다음
ChangeStreamDocument
생성자를 제거합니다.ChangeStreamDocument(String, BsonDocument, BsonDocument, BsonDocument, TDocument, TDocument, BsonDocument, ...)
ChangeStreamDocument(String, BsonDocument, BsonDocument, BsonDocument, TDocument, BsonDocument, BsonTimestamp, ...)
ChangeStreamDocument(OperationType, BsonDocument, BsonDocument, BsonDocument, TDocument, BsonDocument, BsonTimestamp, ...)
이벤트에 대한 다음 생성자를 제거합니다:
CommandEvent(RequestContext, int, ConnectionDescription, String)
CommandEvent(int, ConnectionDescription, String)
CommandEvent(RequestContext, long, int, ConnectionDescription, String)
CommandFailedEvent(RequestContext, int, ConnectionDescription, String, long, Throwable)
CommandFailedEvent(int, ConnectionDescription, String, long, Throwable)
CommandStartedEvent(RequestContext, int, ConnectionDescription, String, String, BsonDocument)
CommandStartedEvent(int, ConnectionDescription, String, String, BsonDocument)
CommandSucceededEvent(RequestContext, int, ConnectionDescription, String, BsonDocument, long)
CommandSucceededEvent(int, ConnectionDescription, String, BsonDocument, long)
ConnectionCheckedInEvent(ConnectionId)
ConnectionCheckedOutEvent(ConnectionId, long)
ConnectionCheckedOutEvent(ConnectionId)
ConnectionCheckOutFailedEvent(ServerId, long, Reason)
ConnectionCheckOutFailedEvent(ServerId, Reason)
ConnectionCheckOutStartedEvent(ServerId)
ConnectionReadyEvent(ConnectionId)
ServerHeartbeatFailedEvent(ConnectionId, long, Throwable)
ServerHeartbeatSucceededEvent(ConnectionId, BsonDocument, long)
WriteConcernError
클래스에서errorLabels
옵션을 제거합니다. 여기에는addLabel()
및getErrorLabels()
메서드와errorLabels
매개 변수를 포함하는 생성자가 포함됩니다. 대신WriteConcernError
이 포함된MongoException
객체에 포함된 오류 레이블을 사용할 수 있습니다.com.mongodb.event
패키지에서 다음 클래스를 제거합니다.ConnectionAddedEvent
ConnectionPoolOpenedEvent
ConnectionRemovedEvent
ClusterListenerAdapter
ConnectionPoolListenerAdapter
ServerListenerAdapter
ServerMonitorListenerAdapter
이러한 제거로 인해 다음 메서드도
ConnectionPoolListener
인터페이스에서 제거되었습니다.connectionAdded
connectionPoolOpened
connectionRemoved
이벤트 패키지에 대한 자세한 내용은 com.mongodb.event 패키지 문서를 참조하세요.
listCollections
명령의 새로운authorizedCollection
옵션에 대한 지원을 추가합니다. 이로 인해MongoDatabase.listCollectionNames()
메서드에 호환성이 손상되는 바이너리 변경이 도입되며, 이는 이러한 메서드를 사용하는 모든 코드를 다시 컴파일해야 함을 의미합니다. 이 변경으로 인해 소스 코드를 변경할 필요는 없습니다.스트림 인터페이스와 관련된 다음 메서드 및 유형을 제거합니다.
streamFactoryFactory()
MongoClientSettings.Builder
의 메서드. 대신MongoClientSettings.Builder.transportSettings()
메서드를 사용합니다.getStreamFactoryFactory()
MongoClientSettings
의 메서드. 대신MongoClientSettings.getTransportSettings()
메서드를 사용합니다.NettyStreamFactoryFactory
클래스입니다.TransportSettings.nettyBuilder()
로 생성 가능하고MongoClientSettings.Builder.transportSettings()
를 통해 적용되는NettyTransportSettings
을 사용합니다.NettyStreamFactory
클래스AsynchronousSocketChannelStreamFactory
클래스AsynchronousSocketChannelStreamFactoryFactory
클래스BufferProvider
인터페이스SocketStreamFactory
클래스Stream
인터페이스StreamFactory
인터페이스StreamFactoryFactory
인터페이스TlsChannelStreamFactoryFactory
클래스
버전 4.8 호환성이 손상되는 변경
운전자 는 MongoDB Server 버전 v3.4 및 이전 버전에 대한 연결 지원 을 종료합니다. 이 변경 사항에 학습 보려면 드라이버 버전 4.8 서버 지원 변경 섹션을 참조하세요.
애플리케이션이 OSGi 컨테이너에 드라이버를 배포하고 Java 레코드의 인코딩 및 디코딩을 위해 드라이버를 사용하는 경우
org.bson.codecs.record
모듈에 대한 명시적 종속성을 추가해야 합니다.v4.6에서 구현된
RecordCodec
은 레코드의List
또는Map
필드의 유형 매개 변수로 지정된 POJO 및 레코드 클래스를 해당 클래스 대신Document
값으로 역직렬화했습니다. 이 버전에서는 이제 적절한 레코드 및 POJO 유형으로 역직렬화합니다.예를 들어, 다음 레코드 클래스 정의는
Chapter
유형 매개 변수를 받는List
가 포함된Book
레코드를 보여줍니다.public record Book(String title, List<Chapter> chapters) {} public record Chapter(Integer number, String text) {} 이 버전부터 코덱은
List
의 데이터를Document
값 대신Chapter
레코드 클래스로 역직렬화합니다.
버전 4.7 호환성이 손상되는 변경
setWindowFields
빌더 API는 더 이상 베타 버전이 아닙니다. 새 빌더는 바이너리 및 소스 호환성을 손상시킵니다. Aggregates API 문서에서 새로운setWindowFields()
메서드 시그니처 정보를 확인하세요.애플리케이션이 v4.7 이전 버전에서 이 빌더를 사용하는 경우 새 메서드 서명을 사용하도록 소스 코드를 업데이트하고 바이너리를 다시 빌드하세요.
버전 4.2 호환성이 손상되는 변경
다양한 버전의 드라이버에서 직렬화 호환성 문제를 최소화하는 새 형식을 사용하도록
ObjectId
클래스와 해당serialVersionUID
필드가 업데이트됐습니다.이 버전 이상의 드라이버를 사용하는 애플리케이션에서
ObjectId
가 포함되어 있고 이전 버전의 드라이버에서 직렬화된 객체에 대해 Java 객체 직렬화를 수행하려고 하면 Java에서InvalidClassException
을 발생시킵니다.Java 객체 직렬화에 대해 자세히 알아보려면 직렬화 가능한 객체에 대한 Java 문서를 참조하세요.
버전 4.0 호환성이 손상되는 변경
3.12 릴리스에서 더 이상 사용되지 않는 것으로 표시된 여러 클래스와 메서드가 이 버전에서 제거됐습니다.
삽입 헬퍼 메서드는
void
대신 삽입 결과 객체를 반환합니다.BsonDocument
,Document
및DbObject
의toJson()
메소드는 엄격한(strict) JSON 형식 대신 완화된(relaxed) JSON 형식을 반환합니다. 이렇게 하면 JSON 문서의 가독성이 높아지지만 32비트와 64비트 정수의 차이와 같이 BSON 유형 정보를 식별하기가 더 어려워질 수 있습니다. 애플리케이션이 엄격한 JSON 형식을 사용하는 경우 데이터를 읽거나 쓸 때 엄격(strict) 모드를 사용하세요. 문서 데이터 형식: 확장 JSON 가이드를 참조해 현재 API에서 JSON 형식을 지정하는 방법을 알아보세요.java.util.UUID
값의 기본 BSON 표현이JAVA_LEGACY
에서UNSPECIFIED
로 변경되었습니다. UUID 값을 저장하거나 검색하는 애플리케이션은 사용할 표현을 명시적으로 지정해야 합니다.MongoClientSettings
의uuidRepresentation
속성에서 표현을 지정할 수 있습니다.지정하는 UUID 표현은 드라이버가 UUID를 디코딩하는 방법을 엄격하게 제어합니다. 이전 버전의 드라이버에서는
JAVA_LEGACY
표현을 지정한 경우 드라이버가 하위 유형 3 및 4의 바이너리 객체를 UUID로 디코딩했습니다. 버전 4.0에서JAVA_LEGACY
표현은 하위 유형 3에서만 작동합니다.UuidRepresentation
열거형 노드 목록은 v4.0 API 문서를 참조하세요.연결 풀은 더 이상 MongoDB에 연결해야 하는 대기 큐 스레드 또는 비동기 작업의 수를 제한하지 않습니다. 애플리케이션은 드라이버에 의존하여
MongoWaitQueueFullException
을 발생시키는 대신 필요에 따라 요청을 제한해야 합니다.드라이버는 더 이상
java.util.logging
(JUL) 패키지를 사용하여 로깅하지 않으며 SLF4J 로깅 프레임워크만 지원합니다.내장된 드라이버와 Android 드라이버가 제거되었습니다. 애플리케이션에서 이러한 드라이버를 사용하는 경우 3.x Java 드라이버 버전을 계속 사용해야 합니다.
Uber JAR인
mongo-java-driver
및mongodb-driver
는 더 이상 출시되지 않습니다. 애플리케이션이 이들 중 하나를 사용하는 경우 애플리케이션에서 사용하는 API에 따라mongodb-driver-sync
또는mongodb-driver-legacy
중 하나로 전환해야 합니다. 종속 항목에서 uber JAR을 제거해야 합니다.여러 클래스를 업데이트하면서 삽입 헬퍼 메서드에 대한 메서드 시그니처 변경과 같은 이진 호환성 문제가 발생했습니다. 이 버전 이상에 대해 드라이버에 연결되는 모든 클래스를 다시 컴파일하여 계속 작동하는지 확인하세요.
서버 릴리스 호환성 변경 사항
서버 릴리스 호환성 변경은 일련의 MongoDB Server 버전에 대한 지원을 중단하는 MongoDB Java 드라이버의 수정 사항입니다.
드라이버는 MongoDB 서버 버전이 수명 종료(EOL) 시점에 도달하면 해당 버전에 대한 지원을 중단합니다.
EOL 제품에 대한 MongoDB 지원에 대해 자세히 알아보려면 레거시 지원 정책을 참조하세요.
드라이버 버전 5.2 서버 지원 변경 사항
v5.2 운전자 는 MongoDB Server v 에 대한 지원 을3.6 중단합니다. v5.2 운전자 를 사용하려면 MongoDB Server 가 v4.0 이상이어야 합니다. MongoDB Server 배포서버 서버를 업그레이드 하는 방법을 학습 보려면 MongoDB Server 매뉴얼의 릴리스 노트 를 참조하세요.
서버 버전 8.1 지원 변경 사항
3.x 버전의 Java 운전자 를 사용하여 MongoDB Server v8.1 을 실행 하는 배포서버 에 연결할 수 없습니다. MongoDB Server v8.1 부터 buildinfo
명령에 인증 이 필요하여 v3.x와 호환되지 않습니다. 운전자.
드라이버 버전 4.8 서버 지원 변경 사항
v4.8 드라이버는 MongoDB Server v3.4 및 이전 버전에 대한 지원을 중단합니다. v4.8 드라이버를 사용하려면 MongoDB Server는 v3.6 및 이후 버전이어야 합니다. MongoDB Server 배포를 업그레이드하는 방법을 알아보려면 MongoDB Server 매뉴얼의 릴리스 노트를 참조합니다.