복제본 세트에 대한 작업 구성
이 페이지의 내용
개요
이 가이드에서는 쓰기 고려 (write concern), 읽기 고려 (read concern), 읽기 설정 (read preference) 구성을 사용하여 MongoDB가 복제본 세트에서 생성, 읽기, 업데이트 및 삭제(CRUD) 작업을 실행하는 방식을 수정하는 방법에 대해 설명합니다.
이러한 구성은 다음 수준에서 설정하다 수 있습니다.
재정의되지 않는 한 모든 작업 실행에 대한 기본값 을 설정하는 클라이언트
트랜잭션
Database
컬렉션
앞의 목록은 우선 순위가 오름차순입니다. 예를 예시 클라이언트 와 데이터베이스 수준 모두에서 읽기 고려를 설정하다 하면 데이터베이스 수준에서 지정된 읽기 고려 (read concern) 고려가 클라이언트 수준의 읽기 고려 (read concern) 고려를 재정의합니다.
쓰기 고려
쓰기 고려는 작업이 성공적으로 반환되기 전에 쓰기 (write) 작업에 대해 MongoDB 에서 요청하는 승인 수준을 지정합니다. 명시적인 쓰기 고려 (write concern) 를 지정하지 않은 작업은 전역 기본값 쓰기 고려 (write concern) 설정을 상속합니다.
클라이언트 또는 트랜잭션 에서 writeConcern()
메서드를 사용하거나 데이터베이스 또는 컬렉션 에서 withWriteConcern()
메서드를 사용하여 쓰기 고려 (write concern) 를 설정하다 수 있습니다.
writeConcern()
및 withWriteConcern()
메서드는 WriteConcern
인스턴스 를 매개 변수로 허용합니다. 다음 값 중 하나를 사용하여 쓰기 고려 (write concern) 를 지정할 수 있습니다.
WriteConcern.ACKNOWLEDGED
: 쓰기 (write) 작업은 작업이 메모리에 기록된 후 반환됩니다.WriteConcern.W1
: 쓰기 (write) 작업은 세컨더리 노드의 승인을 기다리지 않고 프라이머리 노드 만 쓰기 (write) 작업을 승인한 후에 반환됩니다.WriteConcern.W2
: 프라이머리 노드 와 하나 이상의 세컨더리 노드 가 쓰기 (write) 작업을 승인한 후 쓰기 (write) 작업이 반환됩니다.WriteConcern.W3
: 프라이머리 노드 와 두 개 이상의 세컨더리 노드가 쓰기 (write) 작업을 승인한 후 쓰기 (write) 작업이 반환됩니다.WriteConcern.MAJORITY
: 대다수의 복제본 세트 멤버가 쓰기 (write) 작업을 승인한 후 쓰기 (write) 작업이 반환됩니다.WriteConcern.UNACKNOWLEDGED
: 프라이머리 노드 가 쓰기 (write) 작업을 처리한 후 쓰기 (write) 작업이 반환됩니다.WriteConcern.JOURNALED
: 프라이머리 노드 가 디스크 저널 에 데이터를 쓴 후 쓰기 (write) 작업이 반환됩니다.
다음 예시 에서는 MongoClient
인스턴스 에 대해 쓰기 고려 (write concern) 를 "majority"
로 설정합니다.
MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("<your connection string>")) .writeConcern(WriteConcern.MAJORITY) .build(); MongoClient client = MongoClients.create(settings);
다음 예시 에서는 컬렉션 에 대해 쓰기 고려 (write concern) 를 "majority"
로 설정합니다.
MongoCollection<Document> collection = database.getCollection("<collection name>"); collection = collection.withWriteConcern(WriteConcern.MAJORITY);
참고
컬렉션과 데이터베이스는 변경할 수 없습니다.
MongoDatabase
MongoCollection
인스턴스는 변경할 수 없습니다. 데이터베이스 나 컬렉션 에 쓰기 고려 (write concern) 를 설정하다 하면 이 메서드는 새 인스턴스 를 반환하며 원래 인스턴스 에 영향을 주지 않습니다.
쓰기 고려 (write concern) 고려에 대한 자세한 내용은 MongoDB Server 매뉴얼에서 쓰기 고려 를 참조하세요.
readConcern
읽기 고려는 다음과 같은 동작을 지정합니다.
클라이언트 또는 트랜잭션 에서 readConcern()
메서드를 사용하거나 데이터베이스 또는 컬렉션 에서 withReadConcern()
메서드를 사용하여 읽기 고려 (read concern) 를 지정할 수 있습니다. readConcern()
및 withReadConcern()
메서드는 읽기 고려 (read concern) 수준을 지정하는 단일 매개 변수를 허용합니다.
다음과 같은 읽기 고려 (read concern) 수준을 설정하다 수 있습니다.
ReadConcern.LOCAL
: 쿼리 는 인스턴스의 가장 최근 데이터를 반환합니다. 데이터가 대부분의 복제본 세트 멤버에 기록되었다는 보장을 제공하지 않습니다.ReadConern.AVAILABLE
: 쿼리 는 인스턴스의 가장 최근 데이터를 반환합니다. 데이터가 대부분의 복제본 세트 멤버에 기록되었다는 보장을 제공하지 않습니다.ReadConcern.AVAILABLE
는 인과적 일관적인 적인 세션 및 트랜잭션에는 사용할 수 없습니다.ReadConcern.MAJORITY
: 쿼리 는 복제본 세트 멤버의 과반수가 승인한 데이터를 반환합니다.ReadConcern.LINEARIZABLE
: 쿼리 는 읽기 작업이 시작되기 전에 완료된 모든 성공적인 쓰기를 반영하는 데이터를 반환합니다.ReadConcern.LINEARIZABLE
는 인과적 일관적인 적인 세션 및 트랜잭션에는 사용할 수 없습니다.ReadConcern.SNAPSHOT
: 쿼리 는 최근 과거의 특정 단일 점 에서 샤드 전체에 나타나는 대다수 커밋 데이터를 반환합니다.
읽기 고려 (read concern) 고려 수준에 대한 자세한 내용은 MongoDB Server 매뉴얼의 읽기 고려 수준을 참조하세요.
다음 예시 에서는 MongoClient
인스턴스 에 대해 읽기 고려 (read concern) 를 ReadConcern.MAJORITY
로 설정합니다.
MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("<your connection string>")) .readConcern(ReadConcern.MAJORITY) .build(); MongoClient client = MongoClients.create(settings);
다음 예시 에서는 컬렉션 에 대해 읽기 고려 (read concern) 를 ReadConcern.MAJORITY
로 설정합니다.
MongoCollection<Document> collection = database.getCollection("<collection name>"); collection = collection.withReadConcern(ReadConcern.MAJORITY);
읽기 고려 (read concern) 고려에 학습 보려면 MongoDB Server 매뉴얼에서 읽기 고려 를 참조하세요.
읽기 설정
읽기 설정은 쿼리 를 실행 때 MongoDB 가 읽는 복제본 세트 의 멤버를 결정합니다. 클라이언트 또는 트랜잭션 에서 readPreference()
메서드를 사용하거나 데이터베이스 또는 컬렉션 에서 withReadPreference()
메서드를 사용하여 읽기 설정 (read preference) 설정하다 지정할 수 있습니다.
readPreference()
및 withReadPreference()
메서드는 읽기 설정 (read preference) 모드 를 매개 변수로 허용합니다. 읽기 설정 (read preference) 모드 를 다음 값 중 하나로 설정하다 수 있습니다.
ReadPreference.primary()
: 쿼리 는 프라이머리 노드 에서 데이터를 반환합니다.ReadPreference.primaryPreferred()
: 쿼리 는 사용 가능한 경우 프라이머리 노드 의 데이터를 반환합니다. 그렇지 않으면 쿼리 는 세컨더리 노드 에서 데이터를 반환합니다.ReadPreference.secondary()
: 쿼리 가 세컨더리 노드 에서 데이터를 반환합니다.ReadPreference.secondaryPreferred()
: 쿼리 는 사용 가능한 경우 세컨더리 노드 에서 데이터를 반환하고, 그렇지 않은 경우 쿼리 는 프라이머리 노드 에서 데이터를 반환합니다.ReadPreference.nearest()
: 쿼리 는 네트워크 지연 시간 이 가장 짧은 노드 의 데이터를 반환합니다.
다음 예시 에서는 MongoClient
인스턴스 에 대해 읽기 설정 (read preference) 을 ReadPreference.secondary()
로 설정합니다.
MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("<your connection string>")) .readPreference(ReadPreference.secondary()) .build();
다음 예시 에서는 컬렉션 에 대해 읽기 설정 (read preference) 을 ReadPreference.secondary()
로 설정합니다.
MongoCollection<Document> collection = database.getCollection("<collection name>"); collection = collection.withReadPreference(ReadPreference.secondary());
읽기 설정 (read preference) 에 대한 자세한 내용은 MongoDB Server 매뉴얼에서 읽기 설정 을 참조하세요.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.