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

CRUD 작업 구성

이 가이드 에서는 쓰기 고려 (write concern), 읽기 고려 (read concern)읽기 설정 (read preference) 옵션을 구성하여 MongoDB PHP 라이브러리가 복제본 세트에서 생성, 읽기, 업데이트 및 삭제 (CRUD ) 작업을 실행하는 방식을 수정하는 방법을 학습 수 있습니다.

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

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

  • Session

  • 트랜잭션

  • Database

  • 컬렉션

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

이러한 옵션을 사용하면 복제본 세트에 있는 데이터의 인과적 일관성 과 가용성을 사용자 지정할 수 있습니다. 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 옵션의 전체 목록을 보려면 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.

읽기 설정( 읽기 설정 (read preference))을 설정하여 라이브러리가 읽기 작업을 라우팅하는 방법을 제어할 수 있습니다. 또한 읽기 및 쓰기 (write) 고려를 설정하여 라이브러리가 복제본 세트 에 대한 읽기 및 쓰기 (write) 작업의 승인을 기다리는 방법을 제어할 수도 있습니다.

이 섹션에서는 다음 메서드 중 하나에 옵션 배열 매개변수를 전달하여 다양한 수준에서 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 를 구성하는 방법을 보여줍니다.

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

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

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

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

$clientOptions = [
'readPreference' => 'secondary',
'readConcernLevel' => 'local',
'w' => '2',
];
$client = new Client('mongodb://localhost:27017', $clientOptions);

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

$uri = 'mongodb://localhost:27017/?readPreference=secondary&readConcernLevel=local&w=2';
$client = new Client($uri);

참고

readPreference, readConcernLevelw 클라이언트 옵션은 string 값을 허용합니다. 다른 수준에서 읽기 및 쓰기 (write) 설정을 구성하는 경우 해당 옵션에 MongoDB\Driver\ReadPreference, MongoDB\Driver\ReadConcernMongoDB\Driver\WriteConcern 유형의 값을 할당해야 합니다.

이 예시 에서는 startSession() 메서드에 배열 을 전달하여 세션의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 를 설정하다 하는 방법을 보여줍니다. 이 코드는 다음 설정을 구성합니다.

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

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

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

$sessionOptions = [
'readPreference' => new ReadPreference(ReadPreference::PRIMARY_PREFERRED),
'readConcern' => new ReadConcern(ReadConcern::LOCAL),
'writeConcern' => new WriteConcern(WriteConcern::MAJORITY),
];
$session = $client->startSession($sessionOptions);

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

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

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

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

$transactionOptions = [
'readPreference' => new ReadPreference(ReadPreference::PRIMARY),
'readConcern' => new ReadConcern(ReadConcern::MAJORITY),
'writeConcern' => new WriteConcern(1),
];
$session->startTransaction($transactionOptions);

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

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

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

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

$db = $client->selectDatabase('test_database', [
'readPreference' => new ReadPreference(ReadPreference::PRIMARY_PREFERRED),
'readConcern' => new ReadConcern(ReadConcern::AVAILABLE),
'writeConcern' => new WriteConcern(WriteConcern::MAJORITY),
]);

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

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

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

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

$collection = $client->selectCollection('test_database', 'test_collection', [
'readPreference' => new ReadPreference(ReadPreference::SECONDARY_PREFERRED),
'readConcern' => new ReadConcern(ReadConcern::AVAILABLE),
'writeConcern' => new WriteConcern(0),
]);

이 섹션에서는 다음과 같은 방법으로 읽기 작업 설정을 추가로 사용자 지정하는 방법을 보여줍니다.

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

기본값 MongoDB PHP 라이브러리는 읽을 멤버를 선택할 때 태그를 무시합니다. MongoDB PHP 라이브러리가 특정 태그를 선호하도록 지시하려면 해당 태그를 MongoDB\Driver\ReadPreference 클래스 생성자에 매개변수로 전달합니다. 그런 다음 MongoDB\Driver\ReadPreference 객체 를 readPreference 데이터베이스 옵션의 값으로 설정하다 합니다.

미국 전역의 여러 데이터 센터에서 호스팅되는 멤버가 포함된 복제본 세트 에 연결되어 있다고 가정해 보겠습니다. 이 코드 예시 에서는 readPreference 옵션을 태그 세트 에 설정하여 test_database 가 다음 순서로 세컨더리 복제본 세트 멤버로부터 읽기를 선호하도록 지시합니다.

  1. 뉴욕 데이터 센터 (['dc' => 'ny'])의 멤버

  2. 샌프란시스코 데이터 센터 (['dc' => 'sf'])의 멤버

  3. 모든 세컨더리 멤버([])

$readPreference = new ReadPreference(
ReadPreference::RP_SECONDARY,
[
['dc' => 'ny'],
['dc' => 'sf'],
[],
],
);
$db = $client->selectDatabase(
'test_database',
['readPreference' => $readPreference],
);

샤딩된 클러스터 또는 복제본 세트에 연결할 때 PHP 라이브러리는 로드 밸런싱 을 사용하여 읽기 및 쓰기 (write) 요청을 처리하다. 로드 밸런싱을 통해 라이브러리는 이러한 요청을 여러 서버에 분산하여 하나의 서버 에 과부하가 걸리는 것을 방지하고 최적의 성능을 보장할 수 있습니다.

When connecting to a sharded cluster, the PHP library determines the closest mongos instance by calculating which one has the lowest network round-trip time. Then, the library determines the latency window by adding this mongos's average round-trip time to the localThresholdMS value. The library load balances requests across up to two random mongos instances that fall within the latency window. For each request, the library chooses the server with the lower operation load by determining its operationCount value.

복제본 세트 에 연결할 때 PHP 라이브러리는 먼저 읽기 설정 (read preference) 에 따라 복제본 세트 멤버를 선택합니다. 그런 다음 라이브러리는 이전 단락에서 설명한 것과 동일한 프로세스 따릅니다. 지연 시간 창 계산한 후 라이브러리는 이 창 에 속하는 무작위 복제본 세트 멤버를 최대 두 개 선택하고 operationCount 값이 더 낮은 멤버를 선택하여 요청 받습니다.

로드 밸런싱에 대해 자세히 학습하려면 MongoDB Server 매뉴얼에서 샤드 클러스터 밸런서 를 참조하세요.

라이브러리의 서버 선택 동작을 사용자 지정하는 방법을 학습하려면 연결 옵션 지정 가이드의 서버 선택 및 검색 옵션 을 참조하세요.

PHP 라이브러리는 로컬 임계값을 사용하여 서버 선택에 대한 지연 시간 창 계산합니다. 이 값은 읽기 및 쓰기 (write) 요청을 수신할 수 있는 서버를 결정합니다.

기본값 으로 라이브러리는 핑 시간이 가장 가까운 서버 에서 15 밀리초 이내인 mongos 인스턴스 또는 복제본 세트 멤버만 사용합니다. 지연 시간이 더 긴 서버 간에 읽기를 분산하려면 localThresholdMS 옵션을 설정하는 MongoDB\Client 생성자에 옵션 배열 전달합니다.

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

$options = [
'replicaSet' => 'repl0',
'readPreference' => new ReadPreference(ReadPreference::RP_SECONDARY_PREFERRED),
'localThresholdMS' => 35,
];
$client = new Client('mongodb://localhost:27017', [], $options);

앞의 예시 에서 MongoDB PHP 라이브러리는 가장 가까운 멤버의 핑 시간 35 밀리초 이내에 일치하는 멤버에게 읽기를 분산합니다.

참고

MongoDB PHP 라이브러리는 mongos 인스턴스 를 통해 복제본 세트 와 통신할 때 localThresholdMS 값을 무시합니다. 이 경우 localThreshold 명령줄 옵션을 사용합니다.

이 가이드 에 설명된 메서드 또는 유형에 학습 보려면 다음 라이브러리 API 문서를 참조하세요.

startTransaction() 메서드에 대해 자세히 학습하려면 확장 API 문서에서 MongoDB\ 드라이버 \Session::startTransaction() 을 참조하세요.