UTF-8 유효성 검사
이 페이지의 내용
개요
이 가이드에서는 Node.js 드라이버의 UTF-8 유효성 검사 기능을 활성화하거나 비활성화되도록 설정하는 방법을 알아볼 수 있습니다. UTF-8 은 대부분의 운영 체제, 애플리케이션 및 언어 문자 집합에서 호환성과 일관된 표현을 보장하는 문자 인코딩 사양입니다.
유효성 검사를 활성화하면 드라이버가 유효하지 않은 UTF-8 문자가 포함된 데이터를 변환하고자 하는 경우 오류가 발생합니다. 유효성 검사는 데이터를 확인해야 하기 때문에 처리 오버헤드를 추가합니다.
유효성 검사를 비활성화 하는 경우 애플리케이션은 유효성 검사 처리 오버헤드를 방지하지만 유효하지 않은 UTF-8 데이터의 일관된 표시를 보장할 수 없습니다.
드라이버는 디폴트로 UTF-8 유효성 검사를 활성화합니다. 애플리케이션과 MongoDB 간에 데이터를 전송하는 경우 유효한 UTF-8 포맷으로 인코딩되지 않은 문자가 있는지 문서를 확인합니다.
참고
최신 버전의 Node.js 드라이버는 데이터를 MongoDB로 전송하는 경우 유효하지 않은 UTF-8 문자를 유효한 대체 UTF-8 문자로 자동 대체합니다. 따라서 유효성 검사는 설정이 활성화되어 있고 드라이버가 MongoDB에서 잘못된 UTF-8 문서 데이터를 수신하는 경우에만 오류가 발생합니다.
아래 섹션을 참조하여 Node.js 드라이버를 사용하여 UTF-8 유효성 검사를 설정하는 방법을 학습합니다.
UTF-8 유효성 검사 설정 지정
클라이언트를 생성하거나 데이터베이스 또는 컬렉션을 참조하거나 CRUD 작업을 호출하는 경우 옵션 매개변수에서 enableUtf8Validation
설정을 정의하여 드라이버가 UTF-8 유효성 검사를 수행할지 여부를 지정할 수 있습니다. 설정을 생략하는 경우 드라이버에서 UTF-8 유효성 검사를 활성화합니다.
클라이언트, 데이터베이스, 컬렉션 혹은 CRUD 작업에서 UTF-8 유효성 검사를 비활성화하는 방법을 보여주는 코드 예시의 경우 다음을 참조합니다.
// disable UTF-8 validation on the client new MongoClient('<connection uri>', { enableUtf8Validation: false }); // disable UTF-8 validation on the database client.db('<database name>', { enableUtf8Validation: false }); // disable UTF-8 validation on the collection db.collection('<collection name>', { enableUtf8Validation: false }); // disable UTF-8 validation on a specific operation call await myColl.findOne({ title: 'Cam Jansen'}, { enableUtf8Validation: false });
옵션이 활성화된 상태에서 애플리케이션이 MongoDB에서 잘못된 UTF-8을 읽으면 enableUtf8Validation
BSONError
다음과 같은 메시지가 표시됩니다.
Invalid UTF-8 string in BSON document
유효성 검사 범위 설정
enableUtf8Validation
설정의 경우 해당 설정이 포함된 객체 인스턴스의 범위와 해당 인스턴스의 호출로 생성된 기타 모든 객체에 자동으로 적용됩니다.
예를 들어 데이터베이스 객체를 인스턴스화하는 옵션을 호출에 포함하는 경우 해당 객체에서 구성하는 모든 컬렉션 인스턴스가 설정을 이어받습니다, 해당 컬렉션 인스턴스에서 호출하는 모든 작업도 설정을 이어받습니다,
const database = client.db('books', { enableUtf8Validation: false }); // The collection inherits the UTF-8 validation disabled setting from the database const myColl = database.collection('mystery'); // CRUD operation runs with UTF-8 validation disabled await myColl.findOne({ title: 'Encyclopedia Brown' });
모든 범위 수준에서 객체 인스턴스를 생성하거나 작업을 호출하는 경우 설정을 포함하여 설정을 재정의할 수 있습니다.
예를 들어 컬렉션 객체에서 유효성 검사를 비활성화하는 경우 해당 컬렉션에 대한 개별 CRUD 작업 호출에서 설정을 재정의할 수 있습니다.
const collection = database.collection('mystery', { enableUtf8Validation: false }); // CRUD operation runs with UTF-8 validation enabled await myColl.findOne({ title: 'Trixie Belden' }, { enableUtf8Validation: true }); // CRUD operation runs with UTF-8 validation disabled await myColl.findOne({ title: 'Enola Holmes' });