MongoDB 5.0의 호환성 변경 사항
이 페이지의 내용
- 특정 명령은 인식된 매개변수만 허용합니다.
- 제거된 명령
- 제거된 매개변수
- 제거된 인덱스 유형
- 제거된 지표
- 라즈베리 파이 지원 제거
NaN
으로 설정된 경우 TTLexpireAfterSeconds
동작- 셸 변경
- 복제본 세트
- 제한 컬렉션에 대한
snapshot
읽기 우려 사항 local
는 기본 읽기 우려- 새
cursor.map()
반환 유형 - 운영자 변경 사항 업데이트
$setWindowFields
트랜잭션 및 스냅샷 읽기 문제가 있는 스테이지- 집계 파이프라인 연산자 매개변수 제한
listDatabases
출력 변경 사항- 보안
- 맵 축소
- Auditing
- 샤딩된 트랜잭션에서 부실 청크의 위험 감소
- 일반 변경 사항
- 5.0 기능 호환성
다음 5.0의 변경 사항은 이전 버전의 MongoDB와의 호환성에 영향을 미칠 수 있습니다.
특정 명령은 인식된 매개변수만 허용합니다.
MongoDB 5.0부터 명령에서 명시적으로 허용하지 않는 매개 변수를 전달하면 특정 데이터베이스 명령에서 오류가 발생합니다. MongoDB 4.4 이하에서는 인식할 수 없는 매개변수는 자동으로 무시됩니다.
영향을 받는 명령:
제거된 명령
MongoDB 5.0부터는 다음 데이터베이스 명령과 mongo
셸 헬퍼 메서드가 제거되었습니다.
제거된 명령 | 대안 |
---|---|
db.collection.copyTo() | |
db.collection.save() | |
사용 불가 | |
지리공간 쿼리 연산자중 하나 | |
Mongo.getSecondaryOk() | |
Mongo.isCausalConsistency | 사용 불가 |
Mongo.setSecondaryOk() | |
rs.secondaryOk() | |
사용 불가 | |
사용 불가 |
제거된 매개변수
MongoDB 5.0은 다음 서버 매개변수를 제거합니다.
제거된 매개변수 | 설명 |
---|---|
cachePressureThreshold | MongoDB 5.0은 cachePressureThreshold 서버 매개변수를 제거합니다. WiredTiger가 스냅샷 창 크기를 계산하는 방법이 변경되었기 때문에 이 매개변수는 더 이상 관련이 없습니다. |
shouldMultiDocTxnCreateCollectionAndIndexes | MongoDB 5.0은 shouldMultiDocTxnCreateCollectionAndIndexes 서버 매개변수를 제거합니다. 5.0 이상에서는 트랜잭션 내에서 수집 및 인덱스 생성이 항상 활성화됩니다. 더 이상 서버 매개변수를 사용하여 이 동작을 비활성화할 수 없습니다. |
connPoolMaxShardedConnsPerHost | MongoDB 5.0은 connPoolMaxShardedConnsPerHost 서버 매개변수를 제거합니다. |
connPoolMaxShardedInUseConnsPerHost | MongoDB 5.0은 connPoolMaxShardedInUseConnsPerHost 서버 매개변수를 제거합니다. |
shardedConnPoolIdleTimeoutMinutes | MongoDB 5.0은 shardedConnPoolIdleTimeoutMinutes 서버 매개변수를 제거합니다. |
제거된 인덱스 유형
MongoDB 5.0은 더 이상 사용되지 않는 geoHaystack
인덱스를 제거합니다. 대신 2D 인덱스를 사용하세요.
MongoDB 인스턴스를 5.0으로 업그레이드하고 featureCompatibilityVersion을 5.0
로 설정하면 기존의 모든 geoHaystack 인덱스가 삭제됩니다.
제거된 지표
MongoDB 5.0부터 명령은 serverStatus
opReadConcernCounters
쿼리 조작에 의해 지정된 읽기 우려 레벨 이 포함된 출력하지 않습니다. 대신 새 readConcernCounters
이 opReadConcernCounters
을 대체하고 추가 정보를 포함합니다.
MongoDB 5.0부터 serverStatus
명령은 cache pressure percentage threshold
과 current cache pressure percentage
를 wiredTiger.snapshot-window-settings
아래에 출력하지 않습니다.
currentOp
출력 변경
MongoDB 5.0부터 $currentOp.remainingOperationTimeEstimated
메트릭은 리샤딩 작업이 진행 중일 때만 수신자 샤드에 존재합니다.
라즈베리 파이 지원 제거
MongoDB 5.0은 Raspberry Pi에 대한 지원을 제거합니다. Raspberry Pi에서 MongoDB를 실행하려면 버전 4.4를 설치하세요.
TTL expireAfterSeconds
가 NaN
으로 설정된 경우 동작
MongoDB 5.0부터 expireAfterSeconds
가 NaN
으로 설정된 TTL 인덱스는 이전 버전에 비해 동작이 변경됩니다.
행동 변화가 영향을 미칩니다.
직접 업그레이드
이전 버전에서 초기 동기화
mongorestore
이전 버전에서
이러한 작업을 수행하면 NaN
의 expireAfterSeconds
값이 0
의 expireAfterSeconds
로 취급됩니다. 따라서 문서가 즉시 만료될 수 있습니다.
MongoDB 5.0.14 (및 6.0.2) 부터 서버는 expireAfterSeconds
가 NaN
로 설정된 TTL 인덱스를 사용하지 않습니다.
셸 변경
mongo
shell은 MongoDB v5.0에서 더 이상 사용되지 않습니다. 대체 셸은 mongosh
입니다.
MongoDB v5.0에서도 shell 패키징이 변경되었습니다. 자세한 내용은 설치 지침에서 확인하세요.
복제본 세트
enableMajorityReadConcern
구성할 수 없음
MongoDB 5.0부터는 스토리지 엔진 개선으로 인해 enableMajorityReadConcern
및 --enableMajorityReadConcern
는 변경할 수 없으며 항상 true
으로 설정됩니다.
이전 버전의 MongoDB에서는 enableMajorityReadConcern
및 --enableMajorityReadConcern
를 구성할 수 있으며 false
으로 설정하여 스토리지 캐시 압력으로 인해 3멤버 PSA(Primary-Secondary-Arbiter) 아키텍처를 사용하는 배포가 고정되지 않도록 방지할 수 있습니다.
프라이머리-세컨더리-중재자(PSA) 아키텍처를 사용 중이라면 다음을 고려하세요.
쓰기 고려
"majority"
는 세컨더리를 사용할 수 없거나 지연되었을 때 성능 문제를 일으킬 수 있습니다. 이러한 문제를 완화하는 방법에 대한 조언은 자체 관리 PSA 복제본 세트를 통한 성능 문제 완화를참조하세요.글로벌 기본값
"majority"
를 사용하고 있고, 쓰기 고려가 과반수 크기보다 작으면 쿼리가 오래된 (완전히 복제되지 않은) 부실 데이터를 반환할 수 있습니다.
secondaryDelaySecs
구성 설정
MongoDB 5.0부터 secondaryDelaySecs
slaveDelay
대체합니다. 이 변경 사항은 이전 버전과 호환되지 않습니다.
분할 Horizon DNS에 필요한 호스트 이름
분할 수평 DNS를 위한 클러스터 노드를 구성하려면 IP 주소 대신 호스트 이름을 사용합니다.
MongoDB v5.0부터 replSetInitiate
및 replSetReconfig
는 호스트 이름 대신 IP 주소를 사용하는 구성을 거부합니다.
호스트 이름을 사용하도록 업데이트할 수 없는 노드를 수정하려면 disableSplitHorizonIPCheck
를 사용합니다. 이 매개변수는 구성 명령에만 적용됩니다.
mongod
및 mongos
는 시작 시 유효성 검사를 하는 데disableSplitHorizonIPCheck
에 의존하지 않습니다. 호스트 이름 대신 IP 주소를 사용하는 레거시 mongod
및 mongos
인스턴스는 업그레이드 후 시작할 수 있습니다.
IP 주소로 구성된 인스턴스는 IP 주소 대신 호스트 이름을 사용하라는 경고를 기록합니다.
비트랜잭션 읽기 config.transactions
MongoDB 5.0부터는 config.transactions
컬렉션에서 다음과 같은 읽기 우려 사항 및 옵션이 있는 경우 트랜잭션이 아닌 읽기가 허용되지 않습니다.
"majority"
이고 afterClusterTime 옵션이 설정되어 있습니다.인과적으로 일관된 세션 내에서 MongoDB 드라이버 및
"majority"
를 사용할 때
수동 Oplog 쓰기
MongoDB 5.0부터는 더 이상 복제본 세트로 실행 중인 클러스터에서 oplog에 수동으로 쓰기 작업을 수행할 수 없습니다. 독립형 인스턴스로 실행할 때 oplog에 쓰기 작업을 수행하는 작업은 MongoDB 지원팀의 지침을 통해서만 수행해야 합니다.
새 투표 복제본 세트 구성원에 대한 자동 재구성
MongoDB 5.0부터 새로 추가된 중고등학교는 투표 회원으로 간주되지 않으며 SECONDARY
주에 도달할 때까지 선출될 수 없습니다.
새 투표 노드가 복제본 세트에 추가되면 replSetReconfig
는 내부적으로 노드의 구성에 newlyAdded
필드를 추가합니다. 4} 필드가 있는 노드는 현재 투표 노드 수에 포함되지 않습니다.newlyAdded
초기 동기화가 완료되고 노드가 SECONDARY
상태에 도달하면 newlyAdded
필드가 자동으로 제거됩니다.
참고
0}이라는 이름의 필드를 추가하려고 하는 구성은
newlyAdded
로{ force: true }
실행해도 오류가 발생합니다.기존 노드에
newlyAdded
필드가 있는 경우rs.reconfig()
를 사용하여 구성을 변경해도newlyAdded
필드는 제거되지 않습니다.newlyAdded
5} 필드가 사용자가 제공한 구성에 추가됩니다.replSetGetConfig
는 출력에서newlyAdded
필드를 모두 제거합니다.newlyAdded
필드를 보려면local.system.replset
컬렉션을 직접 쿼리할 수 있습니다.
getLastErrorDefaults에 대한 사용자 정의 가능한 값이 제거되었습니다.
MongoDB 5.0부터는 기본값인 { w: 1, wtimeout: 0 }
이 아닌 settings.getLastErrorDefaults
로 기본 쓰기 우려를 지정할 수 없습니다. 대신 setDefaultRWConcern
명령을 사용하여 복제본 세트 또는 샤딩된 클러스터에 대한 기본 읽기 또는 쓰기 우려 구성을 설정합니다.
복제본 세트 쓰기 승인
MongoDB 5.0부터 STARTUP2
상태의 복제본 집합 멤버는 쓰기 과반수에 참여하지 않습니다.
자세한 내용은 암시적 기본 쓰기 고려를 참조하세요.
MongoDB 5.0부터 암시적 기본 쓰기 우려는 w: majority
입니다. 그러나 중재자가 포함된 배포의 경우 특별히 고려해야 할 사항이 있습니다.
복제 세트의 투표 과반수는 1에 투표 회원 수의 절반을 반올림한 값입니다. 데이터를 포함하는 투표 구성원의 수가 투표 과반수보다 많지 않은 경우 기본 쓰기 문제는
{ w: 1 }
입니다.다른 모든 시나리오에서 기본 쓰기 우려는
{ w: "majority" }
입니다.
특히 MongoDB는 다음 공식을 사용하여 기본 쓰기 문제를 결정합니다.
if [ (#arbiters > 0) AND (#non-arbiters <= majority(#voting-nodes)) ] defaultWriteConcern = { w: 1 } else defaultWriteConcern = { w: "majority" }
예를 들어 다음 배포와 해당 기본 쓰기 문제를 고려해보세요.
Non-Arbiters | 중재자 | 투표 노드 | 과반수 투표 노드 | 자세한 내용은 암시적 기본 쓰기 고려를 참조하세요. |
---|---|---|---|---|
2 | 1 | 3 | 2 | { w: 1 } |
4 | 1 | 5 | 3 | { w: "majority" } |
첫 번째 예시에서는
총 3개의 투표 노드에는 2명의 비중재자와 1명의 중재자가 있습니다.
투표 노드의 대다수(1 + 3의 절반, 반내림)는 2입니다.
비중재자 수(2)는 대다수의 투표 노드(2)와 동일하므로
{ w: 1 }
의 암시적 쓰기 문제가 발생합니다.
두 번째 예시에서는
총 5개의 투표 노드에는 4명의 비중재자와 1명의 중재자가 있습니다.
투표 노드의 대다수(1 + 5의 절반, 반내림)는 3입니다.
비 중재자 (4) 의 수가 투표 노드 (3) 의 과반수보다 많아서 암묵적인 쓰기 문제가
{ w: "majority" }
발생합니다.
{ w: "majority" }
2} 기본 쓰기 우려는 선거가 발생하거나 복제본 세트 구성원을 사용할 수 없게 되는 경우 더 강력한 지속성을 보장합니다.
고정 사이즈 컬렉션에 대한 snapshot
읽기 고려
MongoDB 5.0부터는 제한 컬렉션에서 읽을 때 읽기 "snapshot"
우려를 사용할 수 없습니다.
local
는 기본 읽기 우려
MongoDB 5.0부터 "local"
는 기본 및 보조에 대한 읽기 작업에 대한 기본 읽기 우려 수준입니다.
이로 인해 필터를 사용하는 카운트 쿼리 및 적용 대상 쿼리의지연 시간이 크게 증가할 수 있습니다.
클러스터 전체 읽기 우려를 setDefaultRWConcern
로 설정하여 이 동작을 선택 해제할 수 있습니다.
새 cursor.map()
반환 유형
cursor.map()
이 mongo
레거시 shell에서 Array
를 반환했습니다. 반환 유형은 mongosh
의 Cursor
입니다. .toArray()
를 사용하여 결과를 변환할 수 있습니다.
운영자 변경 사항 업데이트
MongoDB 5.0부터 빈 피연산자 표현식( { }
)과 함께 다음 업데이트 연산자를 사용할 때 mongod
에서 더 이상 오류가 발생하지 않습니다.
빈 업데이트는 변경 사항이 없으며 Oplog 항목이 생성되지 않습니다(즉, 작업이 작동하지 않음을 의미합니다).
운영자 처리 순서 업데이트
MongoDB 5.0부터 업데이트 연산자는 문자열 기반 이름이 있는 문서 필드를 사전순으로 처리합니다. 숫자 이름이 있는 필드는 숫자 순서대로 처리됩니다. 자세한 내용은 업데이트 운영자 동작을 참조하십시오.
$setWindowFields
트랜잭션 및 스냅샷 읽기 문제가 있는 스테이지
5.3 이전 버전에서는 $setWindowFields
집계 파이프라인 단계를 트랜잭션 또는 "snapshot"
읽기 문제와 함께 사용할 수 없습니다.
집계 파이프라인 연산자 매개변수 제한
다음 집계 파이프라인 연산자에는 이제 64비트 정수 값 최대 제한이 있습니다.
이 제한을 초과하는 값을 전달하면 파이프라인이 잘못된 인수 오류를 반환합니다.
listDatabases
출력 변경 사항
MongoDB 5.0부터는 에 대해 실행되는 listDatabases
명령의 출력이 에 대해 실행되는 mongod
의 출력과 더 일관성이 listDatabases
mongos
있습니다.
다음 표는 MongoDB 5.0과 이전 버전 간의 listDatabases
출력 필드에 대한 데이터 유형의 차이점을 보여 줍니다. 5.0과 이전 버전 간에 다른 필드만 나열됩니다.
필드 | MongoDB 5.0 입력 | MongoDB 4.4 이하( mongod )를 입력합니다. | MongoDB 4.4 이하( mongos )를 입력합니다. |
---|---|---|---|
sizeOnDisk | integer | double | integer |
totalSize | integer | double | integer |
totalSizeMb | integer | 없음(아래 참조) | integer |
2}의 출력은 이제 또는 에 대해 실행할 때 listDatabases
totalSizeMb
mongos
mongod
필드를 포함합니다. MongoDB 4.4 이하에서는 totalSizeMb
이 mongos
에 대해 실행될 때만 나타납니다. totalSizeMb
는 sizeOnDisk
필드의 합계로, 메가바이트로 표시됩니다.
2}에 대해 mongos
shards
listDatabases
실행하면 출력의 필드에 특정 샤드의 각 컬렉션에 대한 필드-값 쌍이 포함됩니다. 7} 필드의 크기 shards
값은 정수로 표시됩니다.
보안
TLS 연결 X509 인증서 시작 경고
MongoDB 5.0부터 mongod
및 mongos
는 이제 인증서에 주체 대체 이름 특성이 포함되지 않은 경우 시작 경고를 발행합니다.
다음 플랫폼은 일반 이름 유효성 검사를 지원하지 않습니다:
iOS 13 이상
MacOS 10.15 이상
Go 1.15 이상
이러한 플랫폼을 사용하는 클라이언트는 호스트 이름이 CommonName 속성으로 지정된 x.509 인증서를 사용하는 MongoDB 서버에 인증하지 않습니다.
맵 축소
버전 5.0부터 MongoDB는 맵 축소 작업을 더 이상 지원하지 않습니다.
맵 리듀스 작업에 대한 집계 파이프라인 대안의 예는 집계 파이프라인으로 맵 리듀스 및 맵 리듀스 예시를 참조하세요.
Auditing
MongoDB 5.0은 런타임에 구성할 수 있는 감사 기능을 추가했습니다.
0}이 로 auditLog.runtimeConfiguration
true
설정된 mongod
mongos
경우 및 구성 setParameter.auditAuthorizationSuccess
파일은 더 이상 를 설정하거나 감사 필터를 구성할 수 없습니다. 서버 구성 파일에 이러한 설정이 포함되어 있으면 서버가 시작되지 않고 오류가 기록됩니다.
auditLog.runtimeConfiguration
false
로 설정되고 감사 필터 구성 문서가 있는 경우 시작 경고가 발생하지만 서버는 중단되지 않습니다.
샤딩된 트랜잭션에서 부실 청크의 위험 감소
MongoDB 5.0부터는 transactionLifetimeLimitSeconds
매개 변수를 변경하는 경우 모든 구성 서버 복제본 세트 멤버에서 transactionLifetimeLimitSeconds
도 동일한 값으로 변경해야 합니다. 이 값을 일관되게 유지합니다.
적어도 샤드 복제본 세트 멤버의 트랜잭션 수명 제한만큼 라우팅 테이블 기록이 유지되도록 합니다.
트랜잭션 재시도 빈도를 줄여 성능을 향상시킵니다.
일반 변경 사항
MongoDB 5.0부터 도입됨:
featureCompatibilityVersion이
"5.0"
이상으로 설정된 경우 사용자는 더 이상<database>.system.views
컬렉션에 직접 쓸 수 없습니다.reIndex
2} 명령과 셸 메서드는 독립db.collection.reIndex()
실행형 인스턴스에서만 실행할 수 있습니다.단일 파이프라인에 허용되는 집계 파이프라인 단계의 수는 1,000개로 제한됩니다.
2} 또는 가 활성화되어 있을
directoryPerDB
--directoryperdb
때 데이터베이스의 최종 컬렉션을 제거하거나 데이터베이스 자체를 제거하면 해당 데이터베이스의 새로 비워진 하위 디렉터리가 삭제됩니다.$subtract
집계 연산자는 필요한 경우 결과 값을 정확하게 나타내기 위해 결과의 데이터 유형을 변환합니다. 구체적인 전환은$subtract
를 참조하세요.MongoDB는
--serviceExecutor
명령줄 옵션과 해당net.serviceExecutor
구성 옵션을 제거합니다.--apiStrict
옵션이 설정된 경우 동일한 클라이언트 세션에서 여러 동시 사용자로 인증할 수 없습니다.--apiStrict
옵션이 설정된 경우, 기존 사용자로 로그인한 상태에서 새 사용자로 인증하려고 하면 인증 시도당 한 번씩 오류 메시지가 생성됩니다.--apiStrict
옵션을 사용하지 않는 경우, 기존 사용자로 로그인한 상태에서 새 사용자로 인증하면 인증 시도당 한 번씩 로그에 경고가 기록됩니다.weights 옵션은
$text
인덱스에만 사용할 수 있습니다.암시적 기본 쓰기 문제를 변경하는 구성으로 분할되지 않은 복제본 세트를 재구성하기 전에 전역 기본 쓰기 문제를 명시적으로 설정해야 합니다. 전역 기본 쓰기 문제를 설정하려면
setDefaultRWConcern
명령을 사용합니다.mongosh
에서replSetOplog
크기를 설정하려면replSetResizeOplog
명령과 함께Double()
생성자를 사용하세요.
지원 중단
더 이상 사용되지 않습니다. | 설명 |
---|---|
mongo | 레거시 mongo shell은 MongoDB v5.0에서 더 이상 사용되지 않습니다. 대체품은 mongosh 입니다. |
db.printSlaveReplicationInfo() | 버전 4.4.1부터 더 이상 사용되지 않습니다: 대신 |
rs.printSlaveReplicationInfo() | 버전 4.4.1부터 더 이상 사용되지 않습니다: 대신 |
버전 5.0에서 더 이상 사용되지 않습니다. 대신 security.clusterIpSourceAllowlist 를 사용합니다. | |
버전 5.0에서 더 이상 사용되지 않습니다. 대신 --clusterIpSourceAllowlist 를 사용합니다. | |
버전 5.0에서 더 이상 사용되지 않습니다. 대신 서버에서 연결을 끊어 세션을 종료하세요. | |
버전 5.0에서 더 이상 사용되지 않습니다. 대신 서버에서 연결을 끊어 세션을 종료하세요. | |
로컬 감사 메시지 필드(Local Audit Message Field) | 버전 5.0에서 더 이상 사용되지 않습니다. 대신 clientMetadata 감사 메시지에 localEndpoint 필드를 사용하세요. |
사용되지 않는 와이어 프로토콜 옵코드
MongoDB 5.0은 다음 와이어 프로토콜 옵코드를 더 이상 지원하지 않습니다.
OP_REPLY
OP_UPDATE
OP_INSERT
OP_QUERY
OP_GET_MORE
OP_DELETE
OP_KILL_CURSORS
최신 드라이버 버전에서는 이러한 더 이상 사용되지 않는 opcodes 대신 OP_MSG를 사용합니다.
관련 명령어 및 메서드도 MongoDB 5.0에서 더 이상 사용되지 않습니다.
getLastError
db.getLastError()
db.getLastErrorObj()
드라이버가 최신 유선 프로토콜을 사용하도록 하려면 드라이버를 5.0 호환 버전으로 업그레이드하십시오.
getLastError
db.getLastError()
0}, 또는 를 db.getLastErrorObj()
명시적으로 사용하는 모든 코드는 대신 CRUD API를 사용하여 원하는 쓰기 우려로 쓰기를 발행해야 합니다. 쓰기 작업의 성공 또는 실패에 대한 정보는 드라이버에서 반환 값으로 직접 제공됩니다.
5.0 기능 호환성
5.0의 일부 기능을 사용하려면 5.0 바이너리뿐만 아니라 기능 호환성 버전 (fCV)을 5.0으로 설정해야 합니다. 이러한 기능에는 다음이 포함됩니다.
시계열 컬렉션을 만들려면 fCV를 5.0 이상으로 설정해야 합니다.
런타임 감사 필터 관리를 구성하려면 fCV를 5.0 이상으로 설정해야 합니다.
필드 이름에
.
및$
을 사용하려면 fCV를 5.0 이상으로 설정해야 합니다.컬렉션을 리샤딩하려면 fCV를 5.0+로 설정해야 합니다.