Docs Menu
Docs Home
/ / /
Go
/ /

CRUD 작업 실행 수정하기

이 페이지의 내용

  • 개요
  • 쓰기 고려
  • readConcern
  • 읽기 설정
  • 추가 정보

이 가이드에서는 MongoDB Go 드라이버가 복제본 세트의 쓰기 고려(write concern), 읽기 고려(read concern)읽기 설정(read preference) 구성을 사용하여 생성, 읽기, 업데이트 및 삭제(CRUD) 작업을 실행하는 방식을 수정하는 방법을 배울 수 있습니다.

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

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

  • 세션 수준

  • 트랜잭션 수준

  • 데이터베이스 수준

  • 컬렉션 수준

복제본 세트에 있는 데이터의 일관성 과 가용성을 사용자 지정해야 하는 경우 이 가이드 를 읽어야 합니다.

쓰기 고려 (write concern)는 삽입 또는 업데이트와 같은 쓰기 작업을 승인해야 작업이 성공한 것으로 반환되기 전에 복제본 세트 내 데이터 보유 노드의 수를 설명합니다. 기본적으로, 쓰기 고려 (write concern)는 작업이 성공한 것으로 간주되기 전에 프라이머리 복제본 세트 멤버만 쓰기 작업을 승인하면 됩니다.

MongoDB 고 (Go) 드라이버 는 복제본 세트 에 대한 쓰기 고려 (write concern) 를 지정할 수 있는 writeconcern 패키지 를 제공합니다. Option 유형의 SetWriteConcern() 메서드를 사용하여 쓰기 고려 (write concern) 를 설정합니다. Option 유형에는 쓰기 고려 (write concern) 를 지정하는 다음과 같은 메서드가 있습니다.

메서드
설명
J()
The client requests acknowledgement that write operations are written to the journal. For more information, see the Write Concern specification.

Parameter: bool
W()
The client requests acknowledgement that write operations propagate to the specified number of mongod instances. For more information, see the Write Concern specification.

Parameter: int
WMajority()
The client requests acknowledgement that write operations propagate to the majority of mongod instances. For more information, see the Write Concern specification.

Parameter: none
WTagSet()
The client requests acknowledgement that write operations propagate to the specified mongod instance. For more information, see the Write Concern specification.

Parameter: string

또는 연결 string 에 쓰기 고려 (write concern) 를 지정할 수 있습니다. 자세한 내용은 쓰기 고려 옵션에 대한 서버 매뉴얼 항목을 참조하세요.

다음 코드는 두 복제본 세트 멤버의 승인을 요청 하기 위해 쓰기 고려 (write concern) 를 지정하는 방법을 보여줍니다. 그런 다음 이 옵션을 사용하여 Client 를 생성합니다.

uri := "mongodb://<hostname>:<port>"
wc := writeconcern.W(2)
opts := options.Client().ApplyURI(uri).SetWriteConcern(writeconcern.New(wc))
client, err := mongo.Connect(context.TODO(), opts)

사용자는 읽기 고려 (read concern) 옵션을 통해 클라이언트가 쿼리에서 반환하는 데이터를 결정할 수 있습니다. 기본 읽기 고려 (read concern) 수준은 "local"인데, 클라이언트가 최신 인스턴스 데이터를 반환하며 데이터가 복제본 세트 노드의 대부분에 쓰였다는 보장은 없다는 의미입니다.

MongoDB Go 드라이버는 복제본 세트에 대한 읽기 고려를 지정할 수 있는 readconcern 패키지를 제공합니다. ReadConcern 유형과 함께 SetReadConcern() 메서드를 사용하여 읽기 고려를 설정합니다. ReadConcern 유형에는 읽기 고려를 지정하는 다음과 같은 메서드가 있습니다.

메서드
설명
Available()
쿼리는 데이터가 대부분의 복제본 세트 멤버에 기록되었다는 보장 없이 인스턴스에서 데이터를 반환합니다. 자세한 내용은 읽기 고려 사양을 참조하세요.
Linearizable()
쿼리는 majority 쓰기 고려로 발행되고 읽기 작업이 시작되기 전에 승인된 모든 성공적인 쓰기를 반영하는 데이터를 반환합니다. 자세한 내용은 읽기 고려 사양을 참조하세요.
Local()
쿼리는 인스턴스의 가장 최근 데이터를 반환합니다. 자세한 내용은 읽기 고려 사양을 참조하세요.
Majority()
이 쿼리는 복제본 세트의 과반수 이상의 멤버에 기록된 것으로 확인된 인스턴스의 가장 최근 데이터를 반환합니다. 자세한 내용은 읽기 고려 사양을 참조하세요.
Snapshot()
쿼리는 특정 시점의 mongod 인스턴스에 있는 데이터의 전체 복사본을 반환합니다. 다중 문서 트랜잭션 내의 작업에만 사용할 수 있습니다. 자세한 내용은 읽기 고려 사양을 참조하세요.

다음 코드는 "majority"의 읽기 고려 (read concern)를 지정하는 방법을 보여줍니다. 그런 다음 코드는 이 옵션을 사용하여 Collection 를 선택합니다.

rc := readconcern.Majority()
opts := options.Collection().SetReadConcern(rc)
database := client.Database("db")
coll := database.Collection("myCollection", opts)

읽기 설정 (read preference) 옵션은 MongoDB 클라이언트가 읽기 작업을 복제본 세트의 노드로 라우팅하는 방법을 지정합니다. 애플리케이션은 기본값으로 복제본 세트의 프라이머리 노드에 읽기 작업을 지시합니다.

읽기 설정은 읽기 설정 모드와 선택적으로 태그 세트 목록, maxStalenessSeconds 옵션 및 헤지된 읽기( hedged read ) 옵션으로 구성됩니다.

MongoDB Go 드라이버는 복제본 세트에 대한 읽기 설정을 지정할 수 있는 readpref 패키지를 제공합니다. ReadPref 유형과 함께 SetReadPreference() 메서드를 사용하여 읽기 설정을 지정합니다. ReadPref 유형에는 다음과 같은 메서드로 읽기 설정을 지정할 수 있습니다.

메서드
설명
Nearest()
클라이언트 는 지정된 지연 시간 임계값에 따라 프라이머리 또는 세컨더리 임의의 적격 복제본 세트 멤버에서 읽습니다. 자세한 내용은 읽기 설정 서버 매뉴얼 항목을 참조하세요.
Primary()
클라이언트 는 현재 복제본 세트 프라이머리 노드 에서 읽습니다. 자세한 내용은 읽기 설정 서버 매뉴얼 항목을 참조하세요.
PrimaryPreferred()
클라이언트 는 대부분의 상황에서 프라이머리 노드 에서 읽습니다. 프라이머리 를 사용할 수 없는 경우 작업은 세컨더리 멤버로부터 읽습니다. 자세한 내용은 읽기 설정 서버 매뉴얼 항목을 참조하세요.
Secondary()
클라이언트 는 복제본 세트 의 세컨더리 멤버로부터 읽습니다. 자세한 내용은 읽기 설정 서버 매뉴얼 항목을 참조하세요.
SecondaryPreferred()
클라이언트 는 대부분의 상황에서 세컨더리 노드에서 읽습니다. 세컨더리를 사용할 수 없는 경우 작업은 프라이머리 멤버에서 읽습니다. 자세한 내용은 읽기 설정 서버 매뉴얼 항목을 참조하세요.

또는 연결 string 에 읽기 설정 (read preference) 을 지정할 수 있습니다. 자세한 내용은 읽기 기본 설정 옵션의 서버 매뉴얼 항목을 참조하세요.

다음 코드는 세컨더리 노드에서 읽도록 읽기 설정을 지정하는 방법을 보여줍니다. 그런 다음 코드는 이 옵션을 사용하여 Database를 선택합니다.

rp := readpref.Secondary()
opts := options.Database().SetReadPreference(rp)
database := client.Database("db", opts)

이 가이드에 나오는 개념이 자세히 알고 싶다면 다음 서버 문서를 확인하세요.

  • 연결 가이드

  • 복제 세트에 대한 쓰기 컨커런트

  • readConcern

  • 읽기 설정

돌아가기

복합 작업