AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

CRUD 작업 실행 수정하기

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

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

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

  • 세션 수준

  • 트랜잭션 수준

  • 데이터베이스 수준

  • 컬렉션 수준

다음 섹션에서는 복제본 세트에 있는 데이터의 일관성과 가용성을 사용자 정의하는 방법을 알아볼 수 있습니다.

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

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

메서드
설명

Custom()

클라이언트는 쓰기 작업이 mongod 인스턴스의 태그를 지정한 노드에 전파되었음을 인정해 주도록 요청합니다. 자세한 내용은 쓰기 고려 (write concern) 사양 을 참조하세요.

매개변수: string

Journaled()

클라이언트는 쓰기 (write) 작업이 온디스크 저널에 기록되었음을 확인해 달라고 요청합니다. 자세한 내용은 쓰기 고려 (write concern) 사양을 참조하세요.

매개변수: 없음

Majority()

클라이언트는 데이터를 가진 투표 노드의 과반수에 쓰기 (write) 작업이 전파되었음을 확인해달라고 요청합니다. 자세한 내용은 쓰기 고려 (write concern) 사양을 참조하세요.

매개변수: 없음

Unacknowledged()

클라이언트는 쓰기 (write) 작업에 대한 확인을 요청하지 않습니다. 자세한 내용은 w: 0에 대한 쓰기 고려 (write concern) 사양을 참조하세요.

매개변수: 없음

W1()

클라이언트는 쓰기 작업이 독립형 mongod 또는 복제본 세트의 프라이머리와 같이 하나의 노드에 있는 메모리에 쓰여졌음을 확인해 주도록 요청합니다. 자세한 내용은 w: 1에 대한 쓰기 고려 (write concern) 사양을 참조하세요.

매개변수: 없음

보다 특수한 쓰기 고려가 필요한 경우 사용자 지정 WriteConcern 구조체 리터럴을 정의할 수 있습니다. WriteConcern 구조체에 다음 필드를 설정할 수 있습니다.

필드
설명

W

승인을 위해 쓰기 작업이 전파되어야 하는 mongod 인스턴스 또는 태그가 지정된 노드의 수를 지정합니다. 일반적인 값에는 1, 0, "majority"가 있습니다.

유형: string 또는 int

Journal

쓰기 (write) 작업을 승인을 위해 온디스크 저널에 기록해야 하는지 여부를 지정합니다.

유형: bool

WTimeout

쓰기 고려(write concern)의 시간 제한을 지정합니다. 이 설정은 1 보다 큰 W 값에만 적용됩니다. 이 설정을 지정하고 클라이언트에 시간 초과 를 동시에 지정하면 정의되지 않은 동작이 발생합니다. 자세한 내용은 wtimeout에 대한 쓰기 고려 사양을 참조하십시오.

유형: time.Duration

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

다음 코드는 클라이언트 및 collection 수준에서 다양한 쓰기 고려 (write concern)를 지정하는 방법을 보여줍니다. 클라이언트 수준 쓰기 고려 (write concern)는 두 개의 복제본 세트 구성원에게 승인을 요청하고 저널링을 false 으로 설정합니다. 컬렉션 수준 쓰기 고려는 대부분의 복제본 세트 멤버에게 승인을 요청합니다.

uri := "mongodb://<hostname>:<port>"
journal := false
cliWC := &writeconcern.WriteConcern{
W: 2,
Journal: &journal,
}
clOpts := options.Client().ApplyURI(uri).SetWriteConcern(cliWC)
client, err := mongo.Connect(context.TODO(), clOpts)
...
collWC := writeconcern.Majority()
collOpts := options.Collection().SetWriteConcern(collWC)
coll := client.Database("db").Collection("myColl", collOpts)

사용자는 읽기 고려 (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()

클라이언트는 지정된 지연 시간 임계값에 따라 프라이머리 또는 세컨더리의 임의의 적격 복제본 세트 멤버에서 읽습니다. 자세한 내용은 읽기 설정 MongoDB Server 수동 항목을 참조하세요.

Primary()

클라이언트는 현재 복제본 세트 프라이머리 노드에서 읽습니다. 자세한 내용은 읽기 설정 MongoDB Server 수동 항목을 참조하세요.

PrimaryPreferred()

클라이언트는 대부분의 상황에서 프라이머리 노드에서 읽습니다. 프라이머리를 사용할 수 없는 경우 작업은 세컨더리 멤버로부터 읽습니다. 자세한 내용은 읽기 설정 MongoDB Server 수동 항목을 참조하세요.

Secondary()

클라이언트는 복제본 세트의 세컨더리 멤버에서 읽습니다. 자세한 내용은 읽기 설정 MongoDB Server 수동 항목을 참조하세요.

SecondaryPreferred()

클라이언트는 대부분의 상황에서 세컨더리 노드에서 읽습니다. 세컨더리를 사용할 수 없는 경우 작업은 프라이머리 멤버에서 읽습니다. 자세한 내용은 읽기 설정 MongoDB Server 수동 항목을 참조하세요.

또는 연결 string 에 읽기 설정을 지정할 수 있습니다. 자세한 내용은 읽기 설정 옵션에 대한 MongoDB Server 수동 항목을 참조하세요.

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

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

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