Docs Menu
Docs Home
/ / /
Node.js 드라이버
/

CRUD 작업 구성

이 가이드 에서는 Node.js 운전자 사용하여 읽기 및 쓰기 (write) 작업을 구성하는 방법을 학습 수 있습니다.

읽기 설정 (read preference) 설정하여 운전자 읽기 작업을 라우팅하는 방법을 제어할 수 있습니다. 또한 읽기 고려 (read concern) 또는 쓰기 고려(write concern) 설정하여 운전자 데이터 일관성 및 내구성을 처리하는 방식을 제어할 수도 있습니다. 읽기 고려는 읽기 작업을 수행할 때 데이터에 필요한 내구성 수준을 지정하고, 쓰기 (write) 고려는 운전자 복제본 세트 에서 쓰기 (write) 작업의 승인을 기다리는 방법을 지정합니다.

다음 수준에서 쓰기 고려, 읽기 고려, 읽기 설정 옵션을 설정할 수 있습니다.

  • 재정의되지 않는 한 모든 작업 실행에 대한 기본값을 설정하는 클라이언트

  • 트랜잭션

  • Database

  • 컬렉션

앞의 목록은 옵션 설정의 우선 순위가 높아지는 순서도 나타냅니다. 예시 를 들어, 트랜잭션 에 대해 읽기 고려 (read concern) 수준을 설정하다 클라이언트 에 대해 설정하다 읽기 고려 (read concern) 수준이 재정의됩니다.

읽기 및 쓰기 설정에 대해 자세히 알아보려면 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.

  • 읽기 설정

  • readConcern

  • 쓰기 고려

이 섹션에서는 각 수준에서 읽기 및 쓰기 (write) 설정을 구성하는 방법을 설명합니다.

이 예시 MongoClientOptions 객체 생성자에 전달하여 MongoClient 인스턴스 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여줍니다. 이 코드는 다음 설정을 구성합니다.

  • SECONDARY 읽기 설정 (read preference) : 읽기 작업은 세컨더리 복제본 세트 멤버에서 데이터를 조회 합니다.

  • local 읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.

  • 2 쓰기 고려 (write concern): 프라이머리 및 세컨더리 복제본 세트 멤버 중 하나가 쓰기 (write) 작업을 확인해야 합니다.

const clientOptions = {
readPreference: ReadPreference.SECONDARY,
readConcern: { level: "local" },
writeConcern: { w: 2 },
};
const client = new MongoClient("mongodb://localhost:27017", clientOptions);

또는 MongoClient 생성자에 매개 변수로 전달되는 연결 URI에 읽기 및 쓰기 (write) 설정을 지정할 수 있습니다.

const uri = "mongodb://localhost:27017/?readPreference=secondary&readConcernLevel=local&w=2";
const clientWithUri = new MongoClient(uri);

이 예시 TransactionOptions 객체 startTransaction() 메서드에 전달하여 트랜잭션 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여줍니다. 이 코드는 다음 설정을 구성합니다.

  • PRIMARY 읽기 설정 (read preference) : 읽기 작업은 프라이머리 복제본 세트 멤버에서 데이터를 조회 합니다.

  • majority 읽기 고려 (read concern): 읽기 작업은 대부분의 복제본 세트 멤버에 기록된 인스턴스의 가장 최근 데이터를 반환합니다.

  • 1 쓰기 고려 (write concern): 프라이머리 복제본 세트 멤버가 쓰기 (write) 작업을 확인해야 합니다.

const transactionOptions = {
readPreference: ReadPreference.PRIMARY,
readConcern: { level: "majority" },
writeConcern: { w: 1 },
};
const session = client.startSession();
session.startTransaction(transactionOptions);

이 예시 DbOptions 객체 db() 메서드에 전달하여 test_database 데이터베이스 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여 줍니다. 이 코드는 다음 설정을 구성합니다.

  • PRIMARY_PREFERRED 읽기 설정 (read preference) : 읽기 작업은 프라이머리 복제본 세트 멤버에서 데이터를 조회 하거나, 프라이머리 멤버를 사용할 수 없는 경우 세컨더리 멤버에서 데이터를 검색합니다.

  • available 읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.

  • majority 쓰기 고려 (write concern): 모든 복제본 세트 멤버의 대다수가 쓰기 (write) 작업을 승인해야 합니다.

const dbOptions = {
readPreference: ReadPreference.PRIMARY_PREFERRED,
readConcern: { level: "available" },
writeConcern: { w: "majority" },
};
const db = client.db("test_database", dbOptions);

이 예시 CollectionOptions 객체 collection() 메서드에 전달하여 test_collection 컬렉션 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여 줍니다. 이 코드는 다음 설정을 구성합니다.

  • SECONDARY_PREFERRED 읽기 설정 (read preference) : 읽기 작업은 세컨더리 복제본 세트 멤버에서 데이터를 조회 하거나, 사용 가능한 세컨더리 멤버가 없는 경우 프라이머리 멤버에서 데이터를 검색합니다.

  • available 읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.

  • 0 쓰기 고려 (write concern) : 쓰기 (write) 작업에 대한 승인을 요청 하지 않습니다.

const collOptions = {
readPreference: ReadPreference.SECONDARY_PREFERRED,
readConcern: { level: "available" },
writeConcern: { w: 0 },
};
const collection = db.collection("test_collection", collOptions);

MongoDB Server에서는 선택한 기준에 따라 복제본 세트 멤버에 키-값 태그 를 적용할 수 있습니다. 그런 다음 해당 태그를 사용하여 읽기 작업의 멤버를 한 명 이상 대상으로 지정할 수 있습니다.

기본값 으로 Node.js 운전자 읽을 멤버를 선택할 때 태그를 무시합니다. Node.js 운전자 특정 태그를 선호하도록 지시하려면 해당 태그를 읽기 설정 (read preference) 클래스 생성자에 매개변수로 전달합니다.

이 코드 예시 readPreference 옵션을 태그 세트 에 설정하여 test_database 가 다음 순서로 세컨더리 복제본 세트 멤버로부터 읽기를 선호하도록 지시합니다.

  1. 뉴욕 데이터 센터 ({ dc: 'ny' })의 멤버

  2. 샌프란시스코 데이터 센터 ({ dc: 'sf' })의 멤버

  3. 모든 세컨더리 멤버({})

const taggedReadPreference = new ReadPreference(
ReadPreference.SECONDARY,
[
{ dc: "ny" },
{ dc: "sf" },
{}
]
);
const dbWithTags = client.db(
"test_database",
{ readPreference: taggedReadPreference }
);

여러 복제본 세트 멤버가 지정한 읽기 설정 (read preference) 및 태그를 지정하다 세트와 일치하는 경우 Node.js 운전자 핑 시간에 따라 선택된 가장 가까운 복제본 세트 멤버에서 읽습니다.

기본적으로 드라이버는 핑 시간이 가장 가까운 멤버의 15 밀리초 이내인 멤버만 쿼리에 사용합니다. 지연 시간이 더 긴 멤버 간에 읽기를 분산하려면 localThresholdMS 옵션을 MongoClient() 생성자에 전달합니다.

다음 예에서는 로컬 임계값을 35 밀리초로 지정합니다.

const clientWithLocalThreshold = new MongoClient("mongodb://localhost:27017", {
replicaSet: "repl0",
readPreference: ReadPreference.SECONDARY_PREFERRED,
localThresholdMS: 35
});

앞의 예시 에서 Node.js 운전자 가장 가까운 멤버의 핑 시간 35 밀리초 이내에 일치하는 멤버 간에 읽기를 분산합니다.

참고

Node.js 운전자 mongos 인스턴스 통해 복제본 세트 와 통신할 때 localThresholdMS 값을 무시합니다. 이 경우 localThreshold 명령줄 옵션을 사용합니다.

데이터 정렬 을 지정하여 읽기 및 쓰기 (write) 작업의 동작을 수정할 수 있습니다. 데이터 정렬은 대소문자 및 악센트 표시와 같이 문자열 비교를 위한 언어별 규칙 설정하다 입니다.

MongoDB 기본값으로 바이너리 데이터 정렬 을 사용하여 문자열을 정렬합니다. 이 기본값 정렬은 ASCII 표준 문자 값을 사용하여 문자열을 비교하고 정렬합니다. 언어 및 국가 및 언어 설정에는 ASCII 표준과 다른 특정 문자 순서 규칙이 있으며, 작업에 다른 데이터 정렬 규칙 설정하다 적용 하도록 선택할 수 있습니다.

다음 수준에서 데이터 정렬을 지정할 수 있습니다.

  • 컬렉션: 컬렉션 작업에 대한 기본값 데이터 정렬을 설정합니다. 기존 컬렉션 에 대해서는 데이터 정렬을 정의할 수 없습니다.

  • 인덱스: 인덱스 사용하는 작업에 대한 데이터 정렬을 설정합니다.

  • 작업: 작업의 데이터 정렬을 설정하고 상속된 모든 데이터 정렬을 재정의합니다.

데이터 정렬 객체 에는 다음 필드가 포함되어 있습니다.

collation: {
locale: <string>,
caseLevel: <bool>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <bool>,
alternate: <string>,
maxVariable: <string>,
backwards: <bool>
}

collation 옵션을 설정할 때 locale 필드 지정해야 합니다. 다른 모든 필드는 선택 사항입니다. 지원되는 국가 및 언어 설정의 전체 목록과 locale 필드의 기본값은 MongoDB Server 매뉴얼에서 지원되는 언어 및 국가 및 언어 설정 을 참조하세요.

데이터 정렬을 지정하려면 collation 객체 만들고 해당 locale 필드 사용하려는 언어 데이터 정렬로 설정하다 . 그런 다음 이 객체 대상 데이터 정렬 수준에 해당하는 메서드에 옵션 매개 변수로 전달합니다.

이 섹션에는 컬렉션, 인덱스 및 작업 수준에서 데이터 정렬을 설정하다 예제가 포함되어 있습니다.

다음 예시 names 이라는 새 컬렉션 만들고 기본값 데이터 정렬을 "fr_CA" 국가 및 언어 설정 설정으로 설정합니다.

const db = client.db("db")
db.createCollection("names", {
collation: { locale: "fr_CA" },
});

다음 예시 와 같이 names 컬렉션 에 다른 데이터 정렬을 지정하는 인덱스 만들 수 있습니다.

const coll = db.collection("names");
coll.createIndex(
{ "last_name" : 1 },
{ "collation" : { "locale" : "en_US" } });

이전 섹션에서 만든 names 컬렉션에서 기본값 데이터 정렬을 재정의하는 작업을 실행 수 있습니다.

names 컬렉션에는 다음 문서가 포함되어 있습니다.

{ "_id" : 1, "first_name" : "Hans", "last_name" : "Muller" }
{ "_id" : 2, "first_name" : "Gunter", "last_name" : "Braun" }
{ "_id" : 3, "first_name" : "Günter", "last_name" : "Krause" }
{ "_id" : 4, "first_name" : "Jürgen", "last_name" : "Weber" }

이 예시 findOneAndUpdate() 메서드를 호출하여 first_name 값이 "Gunter"인 첫 번째 일치 문서 업데이트 . 이 코드는 "de" 국가 및 언어 설정 및 "phonebook" 국가 및 언어 설정 변형을 사용하여 데이터 정렬을 적용합니다.

coll.findOneAndUpdate(
{ first_name: { $lt: "Gunter" } },
{ $set: { verified: true } },
{ collation: { locale: "de@collation=phonebook" } },
);

앞의 예시 에서 phonebook 국가 및 언어 설정 설정 변형은 운전자 에 움라우트가 있는 문자를 움라우트가 없는 동일한 문자보다 먼저 정렬하도록 지시합니다. 결과적으로 이 작업은 first_name 값이 "Günter"인 문서 움라우트와 일치시키고 다음 업데이트 정보를 반환합니다.

{ lastErrorObject: { updatedExisting: true, n: 1 },
value: { _id: 3, first_name: 'Günter', last_name: 'Krause' },
ok: 1 }

국가 및 언어 설정 변형에 대해 자세히 학습하려면 MongoDB Server 매뉴얼의 로컬 변형 을 참조하세요.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

돌아가기

Core API

이 페이지의 내용