MongoDB 6.0의 호환성 변경 사항
이 페이지의 내용
이 페이지에서는 MongoDB 이전 버전과의 호환성에 영향을 줄 수 있는 MongoDB 6.0에 도입된 변경 사항에 대해 설명합니다.
MongoDB 6.0은 주요 릴리스입니다. 따라서 MongoDB Atlas와 온프레미스 배포에서 지원됩니다. MongoDB 6.0에는 MongoDB Rapid Release 5.1, 5.2, 5.3에 도입된 변경 사항이 포함됩니다. 이 페이지에서는 이러한 Rapid Release와 MongoDB 6.0에 도입된 호환성 변경 사항을 설명합니다.
Major 릴리스와 Rapid Release의 차이점에 학습 보려면 MongoDB 버전 관리를 참조하세요.
집계
allowDiskUse
변경 사항
MongoDB 6.0부터 실행에 100 메가바이트 이상의 메모리가 필요한 파이프라인 단계에서 기본적으로 임시 파일을 디스크에 씁니다. 이러한 임시 파일은 파이프라인 실행 기간 동안 지속되며 인스턴스의 스토리지 공간에 영향을 줄 수 있습니다. MongoDB의 이전 버전에서는 이 동작을 활성화하려면 개별 find
및 aggregate
명령에 { allowDiskUse: true }
을 전달해야 합니다.
개별 find
및 aggregate
명령은 다음 방법 중 하나를 통해 allowDiskUseByDefault
매개변수를 재정의할 수 있습니다:
1}이 로 설정된 경우 을 사용하여 임시 파일을 디스크에 쓰는 것을 허용합니다.
{ allowDiskUse: true }
allowDiskUseByDefault
false
1}이 로 설정된 경우 을 사용하여 임시 파일을 디스크에 쓰는 것을 금지합니다.
{ allowDiskUse: false }
allowDiskUseByDefault
true
$$SEARCH_META
제한 사항
MongoDB 6.0 부터 Atlas Search $$SEARCH_META
애그리게이션 변수는 모든 파이프라인의 $search
단계 이후 어느 곳에서나 사용할 수 있지만 모든 파이프라인의 $lookup
또는 $unionWith
단계 이후에는 사용할 수 없습니다. . $$SEARCH_META
애그리게이션 변수는 $searchMeta
단계 이후의 어떤 단계에서도 사용할 수 없습니다.
변경 스트림
MongoDB 5.3부터는 범위 마이그레이션 중에 고아 문서의 업데이트에 대한 변경 스트림 이벤트가 생성되지 않습니다.
필터
MongoDB 6.0부터는 가능한 경우, 이전 릴리스보다 더 이른 변경 스트림에 매치 필터를 적용합니다. 이렇게 하면 성능이 향상됩니다. 그러나 필터가 좁게 정의된 경우, 이전 버전에서 성공한 작업이 6.0에서는 실패할 수 있습니다.
Indexes
마지막 남은 샤드 키 인덱스는 실수로 제거 불가
MongoDB 6.0부터 "*"
를 dropIndexes
또는 db.collection.dropIndexes()
로 전달하면 _id
인덱스와 마지막 남은 샤드 키 인덱스(존재하는 경우)를 제외한 모든 인덱스가 제거됩니다. 마지막 남은 샤드 키 인덱스를 명시적으로 제거하려고 시도하면 오류가 발생합니다.
인덱스 빌드 중 기존 인덱스 제거 가능
MongoDB 5.2부터는 인덱스 빌드가 진행 중이더라도 dropIndexes
또는 db.collection.dropIndexes()
를 사용하여 동일한 컬렉션에 있는 기존 인덱스를 제거할 수 있습니다. 이전 버전에서는 인덱스 빌드가 진행 중일 때 다른 인덱스를 제거하려고 하면 BackgroundOperationInProgressForNamespace
오류가 발생했습니다.
2dsphere 문서 인덱스 키
메모리 부족 오류를 방지하기 위해 indexMaxNumGeneratedKeysPerDocument
는 단일 문서에서 생성되는 2dsphere 인덱스 키의 최대 수를 제한합니다.
인덱스 키 형식
MongoDB 6.0부터 고유 인덱스 키 형식에 대한 변경 사항이 도입되었습니다. MongoDB 6.0에서 고유 인덱스를 생성하면, 해당 인덱스는 MongoDB 5.3.2 이전 버전 또는 5.0.7 버전에서는 작동하지 않습니다.
레거시 mongo
shell 제거됨
mongo
shell이 MongoDB 6.0에서 제거되었습니다. 대체품은 mongosh
입니다.
플랫폼 지원
MongoDB 5.1.2부터는 다음 플랫폼이 지원되지 않습니다.
커뮤니티 에디션
RHEL -72-s390x
정규 표현식
$regex
Find 쿼리는 더 이상 잘못된 정규식을 무시하지 않습니다.
MongoDB 5.1부터 잘못된 $regex options
옵션은 더 이상 무시되지 않습니다. 이 변경으로 $regex options
는 aggregate
명령 및 투영 쿼리에서 $regex
을 사용하는 것과 더 일관성이 있습니다.
$regex
스키마 유효성 검사 오류 동작
MongoDB 5.1부터 컬렉션에 잘못된 을 포함하는 스키마 유효성 검사 $regex options
규칙이 있는 경우 서버가 이를 무시합니다.
제거된 연산자
MongoDB 5.1부터는 이러한 레거시 쿼리 연산자가 제거됩니다.
제거된 연산자 | 대안 |
---|---|
$comment | |
설명 | |
$hint | |
$max | |
$maxTimeMS | |
$min | |
orderby | |
쿼리 | 커서 방법을 참조하세요. |
$returnKey | |
$showDiskLoc | |
db.getLastError() | |
db.getLastErrorObj() | |
getLastError |
제거된 옵션
MongoDB 6.0에서는 --cpu
mongod
옵션이 제거됩니다.
제거된 매개변수
MongoDB 6.0에서는 다음의 서버 매개 변수가 제거됩니다.
제거된 매개 변수 | 설명 |
---|---|
이 옵션은 MongoDB Community Edition에서 제거되었습니다. MongoDB Enterprise 에디션에서는 이 옵션을 사용할 수 있습니다. FIPS는 MongoDB Community Edition에서 지원되지 않는 기능입니다. 어쨌든 설치에서 FIPS를 사용했다면 업그레이드하기 전에 TLS/SSL 연결을 다시 구성해야 합니다. |
매개 변수 이름 변경
MongoDB 6.0부터 다음 매개 변수의 이름이 변경되었습니다.
wiredTigerConcurrentReadTransactions
→storageEngineConcurrentReadTransactions
wiredTigerConcurrentWriteTransactions
→storageEngineConcurrentWriteTransactions
TTL expireAfterSeconds
가 NaN
으로 설정된 경우 동작
TTL expireAfterSeconds
를 NaN
으로 설정하면 MongoDB 4.4에서 MongoDB 6.0으로 동작이 변경됩니다. 이는 MongoDB 4.4 이하 버전의 초기 동기화와 MongoDB 4.4 이하 버전의 mongorestore
에 영향을 줍니다. 이러한 조치를 수행하면 NaN
인 expireAfterSeconds
가 0
인 expireAfterSeconds
로 처리됩니다. 그 결과, 문서가 즉시 만료될 수 있습니다.
복제본 세트
Assert Cluster Wide Write Concern is Set When Starting or Adding Shard(샤드를 시작하거나 추가할 때 클러스터 전체 쓰기 문제가 설정됨)
MongoDB 5.1부터 사용하여 샤드 서버를 시작, 다시 시작하거나 sh.addShard()
추가할 때 CWWC(Cluster Wide Write Concern) 를 설정해야 합니다.
0}이 CWWC
설정되어 있지 않고 기본 쓰기 우려 사항이 이 되도록 샤드가 구성된 { w : 1 }
경우, 샤드 서버는 시작 또는 추가에 실패하고 오류를 반환합니다.
기본 쓰기 관심사 계산 방법에 대한 자세한 내용은 기본 쓰기 관심사 계산을 참조하세요.
rs.reconfig
클러스터 전체 쓰기 우려 검증
MongoDB 5.1부터는 새 복제본 세트 멤버의 기본 쓰기 우려를 변경하는 reconfigs
를 발행하기 전에 클러스터 전체 쓰기 우려(CWWC) 를 설정해야 합니다.
보안
클러스터 내 인증
MongoDB 5.3부터는 SCRAM-SHA-1을 클러스터 내 인증에 사용할 수 없습니다. SCRAM-SHA-256만 지원됩니다.
이전 MongoDB 버전에서는 SCRAM이 명시적으로 활성화되어 있지 않더라도 SCRAM-SHA-1과 SCRAM-SHA-256을 모두 클러스터 내 인증에 사용할 수 있습니다.
FIPS 모드 기본값 SCRAM-SHA-1 인증은 꺼짐으로 설정됨
MongoDB 5.1부터 FIPS 모드에서 실행되는 인스턴스는 기본적으로 SCRAM-SHA-1 인증 메커니즘이 비활성화되어 있습니다. setParameter.authenticationMechanisms 을 사용하여 SCRAM-SHA-1 인증 메커니즘을 활성화할 수 있습니다. 명령을 사용합니다.
이 변경 사항은 MongoDB setFeatureCompatibilityVersion
를 대상으로 하는 드라이버에는 영향을 미치지 않습니다. 4.0+.
OCSP 활성화 필수
MongoDB 6.0부터는 초기 동기화 중에 ocspEnabled
가 true
로 설정된 경우 모든 노드가 OCSP 응답자에 도달할 수 있어야 합니다.
STARTUP2
상태에서 노드가 실패하면 tlsOCSPVerifyTimeoutSecs
를 5
보다 작은 값으로 설정합니다.
Time Series 컬렉션
경고
MongoDB 5.1 이상에서 샤딩된 시계열 컬렉션을 만드는 경우, MongoDB 5.0.4 이전 버전으로 다운그레이드하면 데이터가 손실될 수 있습니다.
5.0.4 이전 버전으로 다운그레이드하기 전에 샤딩된 모든 Time Series 컬렉션을 제거하세요.
Time Series 컬렉션의 보조 인덱스
Time Series 컬렉션에 세컨더리 인덱스가 있고 기능 호환성 버전(FCV)을 다운그레이드해야 하는 경우, 먼저 다운그레이드된 FCV와 호환되지 않는 보조 인덱스를 모두 삭제해야 합니다. 자세한 내용은 setFeatureCompatibilityVersion
을 참조하세요.
일반 변경 사항
지원 중단
더 이상 사용되지 않습니다. | 설명 |
---|---|
db.collection.reIndex() 메서드는 MongoDB v6.0에서 더 이상 사용되지 않습니다. | |
reIndex 명령은 MongoDB v6.0에서 더 이상 사용되지 않습니다. | |
단순 네트워크 관리 프로토콜(SNMP) | MongoDB 6.0부터 SNMP는 더 이상 사용되지 않으며 다음 릴리스에서 제거될 예정입니다. 배포서버를 모니터링하려면 MongoDB Ops Manager를 사용하세요. |
$mod
오류 동작
MongoDB 5.1 (및 5.0.4)부터, $mod
연산자는 divisor
또는 remainder
값이 특정 값으로 평가되는 경우 오류를 반환합니다. $mod 동작을 참조하세요.
레거시 옵코드 제거
MongoDB 6.0에서는 다음과 같은 레거시 옵코드와 데이터베이스 명령에 대한 지원이 중단되었습니다.
경고
드라이버 업그레이드
이러한 옵코드의 제거로 인한 중단을 방지하려면 드라이버를 최신 버전으로 업그레이드하세요.
MongoDB 5.1 이상의 mongo
셸을 사용해 MongoDB 3.4 이하 버전의 mongod
인스턴스에 연결을 시도하면 다음과 같은 오류 메시지가 표시됩니다.
Connection handshake failed. Is your mongod 3.4 or older? :: caused by :: network error while attempting to run command 'isMaster' on host '127.0.0.1:27017'
레거시 옵코드에 대한 mongod 응답
MongoDB 3.6부터 MongoDB 드라이버는 OP_QUERY와 기타 레거시 옵코드 및 명령 대신 OP_MSG를 사용하고 있습니다.
MongoDB 6.0부터:
서버 측 JavaScript에서 더 이상 사용되지 않는 배열 및 문자열 함수 제거
MongoDB 6.0에서는 서버 측 JavaScript, $accumulator
, $function
, $where
표현식에 사용되는 내부 JavaScript 엔진이 MozJS-60에서 MozJS-91로 업그레이드되었습니다. MozJS-91에서는 MozJS-60에 존재했던 사용 중단된 몇 가지 비표준 배열과 문자열 함수가 제거되었습니다.
제거된 배열과 문자열 함수의 전체 목록은 이 페이지 다음 섹션을 참조하세요.
참고
정적 함수만 제거
정적 JavaScript 함수만 제거됩니다. 제거된 함수에 해당하는 프로토타입 함수는 계속 사용할 수 있습니다.
예를 들면 다음과 같습니다.
Array.concat(<array1>, <array2>)
는 정적 함수이며, 더 이상 MongoDB 6.0에서 실행되지 않습니다.<array1>.concat(<array2>)
프로토타입 함수이며, MongoDB 6.0에서 여전히 실행됩니다.
이 동작은 제거된 배열과 제거된 문자열 함수 모두에 적용됩니다.
배열 함수 제거
MongoDB 6.0부터는 다음과 같은 배열 함수가 제거되어 서버 측 JavaScript에서 $accumulator
, $function
및 $where
표현식과 함께 사용할 수 없습니다.
Array.concat
Array.every
Array.filter
Array.forEach
Array.indexOf
Array.join
Array.lastIndexOf
Array.map
Array.pop
Array.push
Array.reduce
Array.reduceRight
Array.reverse
Array.shift
Array.slice
Array.some
Array.sort
Array.splice
Array.unshift
문자열 함수 제거
MongoDB 6.0부터는 다음과 같은 배열 함수가 제거되어 서버 측 JavaScript에서 $accumulator
, $function
및 $where
표현식과 함께 사용할 수 없습니다.
String.charAt
String.charCodeAt
String.concat
String.contains
String.endsWith
String.includes
String.indexOf
String.lastIndexOf
String.localeCompare
String.match
String.normalize
String.replace
String.search
String.slice
String.split
String.startsWith
String.substr
String.substring
String.toLocaleLowerCase
String.toLocaleUpperCase
String.toLowerCase
String.toUpperCase
String.trim
String.trimLeft
String.trimRight
기본값 db.stats()
설정
MongoDB 6.0부터는 freeStorage 매개 변수가 1로 설정된 경우에만 dbStats
명령과 db.stats()
메서드가 컬렉션에 할당된 여유 공간을 보고합니다.
인덱스 필터 및 데이터 정렬
MongoDB 6.0부터 인덱스 필터는 이전에 명령을 planCacheSetFilter
사용하여 설정한 데이터 정렬을 사용합니다.
MongoDB 8.0 부터는 인덱스 필터 를 추가하는 대신 쿼리 설정을 사용합니다. 인덱스 필터는 MongoDB 8.0 부터 더 이상 사용되지 않습니다.
쿼리 설정에는 인덱스 필터보다 더 많은 기능이 있습니다. 또한 인덱스 필터는 영구적이지 않으며 모든 클러스터 노드에 대한 인덱스 필터를 쉽게 만들 수 없습니다. 쿼리 설정을 추가하고 예제를 탐색하려면 setQuerySettings
를 참조하세요.
distinct
명령을 사용한 컬렉션과 보기 화면 내 배열
MongoDB 6.0부터는 배열을 사용할 때 distinct
명령이 컬렉션과 보기 화면에 동일한 결과를 반환합니다.
컬렉션과 보기 화면 내 배열을 참조하세요.
다운그레이드 고려 사항
다음 섹션에서는 배포에서 이전 버전과 호환되지 않는 기능을 제거하는 방법을 설명합니다. MongoDB 6.0에서 이전 버전으로 다운그레이드하는 경우, 아래 섹션에서 다운그레이드 이후 배포가 성공적으로 실행되도록 하는 방법을 살펴보세요.
클러스터형 컬렉션
MongoDB 5.3부터는 클러스터형 컬렉션을 사용하는 경우 해당 컬렉션을 제거해야만 이전 MongoDB 버전으로 다운그레이드할 수 있습니다.
사용자 쓰기 차단
MongoDB 6.0부터는 기능 호환성 버전을 다운그레이드해야 하는 경우 cluster 간 복제 및 사용자 쓰기 차단을 비활성화해야 합니다.
Time Series 컬렉션
다운그레이드하기 전에 시계열 컬렉션을 삭제해야 합니다.
MongoDB 6.0 이상에서 MongoDB 5.0.7 이하로 다운그레이드 하는 경우.
MongoDB 5.3에서 MongoDB 5.0.5 이하로 다운그레이드하는 경우.
시계열 컬렉션을 참조하세요.
Cluster Parameters
MongoDB 6.0부터는 모든 setClusterParameter
작업이 완료되었는지 확인해야 합니다. 샤딩된 클러스터에서 진행 중인 setClusterParameter
작업이 있는 경우 fCV 다운그레이드를 성공적으로 수행할 수 없습니다.
SELinux 정책 데이터
MongoDB 5.1부터는 이전에 SELinux 정책을 복제한 디렉토리에서 다음 명령을 실행해야 이전 MongoDB 버전으로 다운그레이드할 수 있습니다.
sudo make uninstall
Key Management Interoperability Protocol(KMIP) 설정
MongoDB 6.0 버전부터 기본 KMIP 프로토콜 버전은 1.2 입니다. KMIP 버전 1.0 또는 1.1을 사용하려면 useLegacyProtocol
설정을 사용합니다.
MongoDB 5.3 Enterprise부터는 다음과 같은 KMIP 설정을 사용할 경우 이전 MongoDB 버전으로 다운그레이드하기 전에 먼저 구성 파일에서 해당 설정을 제거해야 합니다.
Change Streams 사전 및 사후 이미지 컬렉션의 시간 기반 보존
MongoDB 6.0부터는 changeStreamOptions.preAndPostImages.expireAfterSeconds
를 사용해 변경 스트림 전후 이미지 컬렉션의 시간 기반 보존을 제어하려면 다운그레이드를 진행할 때 활성화된 setClusterParameter
작업이 없도록 해야 합니다.
감사 로그 암호화 설정
MongoDB 6.0 Enterprise부터는 감사 로그 암호화를 사용할 경우 이전 MongoDB 버전으로 다운그레이드하기 전에 먼저 구성 파일에서 해당 설정을 제거해야 합니다.
기존에 있던 암호화된 감사 로그는 암호화된 상태로 유지되며, 암호화된 로그의 저장과 처리를 위해 개발한 모든 절차를 그대로 유지할 수 있습니다.
감사 로그를 참조하세요.
전후 이미지를 포함하는 문서의 Change Streams
MongoDB 6.0부터는 변경 스트림에 문서 사전 및 사후 이미지를 사용하는 경우 이전 MongoDB 버전으로 다운그레이드하기 전에 collMod
명령을 사용하여 각 collection에 대해 changeStreamPreAndPostImages를 비활성화해야 합니다.
확장된 이벤트가 있는 Change Streams
애플리케이션이 변경 스트림을 사용하는 경우, 애플리케이션이 다운그레이드 후에는 사용할 수 없는 showExpandedEvents
옵션을 사용하지 않도록 하세요.
srv:
및 srv_raw:
를 사용한 LDAP
클러스터 구성에서 LDAP 구성에 새로운 "srv:"
또는 "srv_raw:"
URL 유형을 사용하는 경우 다운그레이드 후 다시 시작할 수 없습니다. 다운그레이드하기 전에 클러스터 구성에서 새 URL 유형을 제거하세요.
암호화된 필드가 있는 컬렉션
FCV 다운그레이드를 완료하기 전에 먼저 암호화된 필드를 사용하는 컬렉션을 제거해야 합니다. encryptedFields
를 사용하는 컬렉션이 있는 경우 다운그레이드가 완료되지 않습니다.
다음을 사용하여 새 문서 만들기 작업 $densify
애플리케이션에서 $densify
를 사용하여 격차를 채우는 문서를 만들거나, 누락된 값을 추가하거나, 지정된 값 범위로 데이터를 채우는 경우 다운그레이드하기 전에 집계 파이프라인에서 $densify
단계를 제거합니다. $densify
단계는 5.1 버전 이상에서만 사용할 수 있습니다.