AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

데이터 변경 사항 모니터링

이 가이드에서는 변경 스트림 을 사용하여 데이터베이스의 실시간 변경 사항을 모니터링하는 방법을 배울 수 있습니다. 변경 스트림은 애플리케이션이 컬렉션, 데이터베이스 또는 배포의 데이터 변경 사항을 구독할 수 있도록 하는 MongoDB Server 기능입니다.

C++ 운전자 를 사용하는 경우 mongocxx::change_stream 을(를) 인스턴스화하여 데이터 변경 사항을 모니터 할 수 있습니다.

이 가이드 의 예제에서는 Atlas 샘플 데이터 세트sample_restaurants 데이터베이스 에 있는 restaurants 컬렉션 을 사용합니다. C++ 애플리케이션 에서 이 컬렉션 에 액세스 하려면 Atlas cluster 에 연결하는 mongocxx::client 를 인스턴스화하고 dbcollection 변수에 다음 값을 할당합니다.

auto db = client["sample_restaurants"];
auto collection = db["restaurants"];

무료 MongoDB Atlas 클러스터 생성하고 샘플 데이터 세트를 로드하는 방법을 학습하려면 MongoDB 시작하기 가이드 를 참조하세요.

변경 스트림을 열려면 watch() 메서드를 호출합니다. watch() 메서드를 호출하는 인스턴스에 따라 변경 스트림이 수신 대기하는 이벤트 범위가 결정됩니다. 다음 클래스에서 watch() 메서드를 호출할 수 있습니다.

  • mongocxx::client: MongoDB deployment 의 모든 변경 사항을 모니터링합니다.

  • mongocxx::database: 데이터베이스 내 모든 컬렉션의 변경 사항 모니터링

  • mongocxx::collection: 컬렉션 의 변경 사항 모니터링

다음 예시에서는 restaurants 컬렉션에서 변경 스트림을 열고 변경 사항이 발생할 때 출력합니다.

auto stream = collection.watch();
while (true) {
for (const auto& event : stream) {
std::cout << bsoncxx::to_json(event) << std::endl;
}
}

변경 사항을 확인하려면 앞의 코드를 실행 하세요. 그런 다음 별도의 애플리케이션 또는 shell 에서 restaurants 컬렉션 을 수정합니다. 다음 예시 에서는 name 필드 값이 Blarney Castle 인 문서 를 업데이트합니다.

auto result = collection.update_one(make_document(kvp("name", "Blarney Castle")),
make_document(kvp("$set",
make_document(kvp("cuisine", "Irish")))));

컬렉션 을 업데이트 하면 변경 스트림 애플리케이션 은 변경 사항이 발생하는 즉시 출력합니다. 인쇄된 변경 이벤트 는 다음 출력과 유사합니다.

{ "_id" : { "_data" : "..." }, "operationType" : "update", "clusterTime" :
{ "$timestamp" : { ... }, "wallTime" : { "$date" : ... }, "ns" :
{ "db" : "sample_restaurants", "coll" : "restaurants" }, "documentKey" :
{ "_id" : { "$oid" : "..." } }, "updateDescription" : { "updatedFields" :
{ "cuisine" : "Irish" }, "removedFields" : [ ], "truncatedArrays" : [ ] } }

mongocxx::pipeline 인스턴스 를 watch() 메서드에 인수로 전달하여 변경 스트림 출력을 수정할 수 있습니다. 다음 목록에는 해당 setter 메서드를 호출하여 설정하다 수 있는 일부 mongocxx::pipeline 필드가 포함되어 있습니다.

  • add_fields: 문서에 새 필드를 추가합니다.

  • match: 문서를 필터링합니다.

  • project: 문서 필드의 하위 집합을 프로젝션합니다.

  • redact: 문서의 내용을 제한합니다.

  • group: 지정된 표현식 을 기준으로 문서를 그룹화합니다.

  • merge: 결과를 컬렉션 에 출력

mongocxx::pipeline 필드의 전체 목록은 mongocxx::파이프라인 API 설명서를 참조하세요.

다음 예시 에서는 mongocxx::pipeline 인스턴스 의 match 필드 를 설정한 다음 파이프라인 을 watch() 메서드에 전달합니다. 이는 watch() 메서드가 업데이트 작업만 출력하도록 지시합니다.

mongocxx::pipeline pipeline;
pipeline.match(make_document(kvp("operationType", "update")));
auto stream = collection.watch(pipeline);
while (true) {
for (const auto& event : stream) {
std::cout << bsoncxx::to_json(event) << std::endl;
}
}

mongocxx::options::change_stream 클래스의 인스턴스 를 매개변수로 전달하여 watch() 메서드의 동작을 수정할 수 있습니다. 다음 표에서는 mongocxx::options::find 인스턴스 에서 설정하다 수 있는 필드에 대해 설명합니다.

필드
설명

full_document

문서의 변경 사항만 표시하지 않고 변경 후 전체 문서를 표시할지 여부를 지정합니다. 이 옵션에 대해 자세히 알아보려면 사전 이미지 및 사후 이미지 포함 을 참조하세요.

full_document_before_change

문서의 변경 사항만 표시하는 대신 변경 전의 전체 문서를 표시할지 여부를 지정합니다. 이 옵션에 대해 자세히 알아보려면 사전 이미지 및 사후 이미지 포함 을 참조하세요.

resume_after

watch() 재개 토큰에 지정된 작업 후 변경 사항 반환을 재개하도록 에 지시합니다.
각 변경 스트림 이벤트 문서 필드 로 재개 토큰이 포함되어 있습니다._id 이후에 _id 재개하려는 작업을 나타내는 변경 이벤트 문서 의 전체 필드 전달합니다.
resume_after 은 및 와 상호 start_after start_at_operation_time배타적입니다.

start_after

재개 토큰에 지정된 watch() 작업 후 새 변경
스트림 _id 시작하도록 _id
start_after 에 지시합니다. 이 필드 사용하면 무효화 이벤트 후 알림 다시 시작할 수 있습니다. 각 변경 스트림 이벤트 문서 필드 로 재개 토큰이 포함되어 있습니다. 이후에 재개하려는 작업을 나타내는 변경 이벤트 문서 의 전체 필드 전달합니다.resume_after 은 및 와 상호 start_at_operation_time 배타적입니다.

start_at_operation_time

watch() 지정된 타임스탬프 이후에 발생하는 이벤트만 반환하도록
start_at_operation_timeresume_after start_after지시합니다. 은 및 와 상호 배타적입니다.

max_await_time_ms

서버 빈 배치 를 반환하기 전에 변경 스트림 커서 에 보고하기 위해 새 데이터 변경 사항을 기다리는 최대 시간(밀리초)을 설정합니다. 기본값은 1000 밀리초입니다.

batch_size

MongoDB cluster 의 각 응답 배치 에서 반환할 최대 변경 이벤트 수를 설정합니다.

collation

변경 스트림 커서 에 사용할 데이터 정렬을 설정합니다.

comment

작업에 주석을 첨부합니다.

중요

배포에서 MongoDB v6.0 이상을 사용하는 경우에만 컬렉션에서 사전 이미지 및 사후 이미지를 활성화할 수 있습니다.

기본값 으로 컬렉션 에서 작업을 수행할 때 해당 변경 이벤트 에는 해당 작업에 의해 수정된 필드의 델타만 포함됩니다. 변경 전후의 전체 문서 를 보려면 mongocxx::options::change_stream 인스턴스 의 full_document_before_change 또는 full_document 필드를 지정합니다.

사전 이미지 는 변경 전의 문서 전체 버전입니다. 변경 스트림 이벤트 에 사전 이미지를 포함하려면 full_document_before_change 필드 를 다음 문자열 중 하나로 설정하다 합니다.

  • "whenAvailable": 변경 이벤트에는 사전 이미지를 사용할 수 있는 경우에만 변경 이벤트에 대해 수정된 문서의 사전 이미지가 포함됩니다.

  • "required": 변경 이벤트에는 변경 이벤트에 대한 수정된 문서의 사전 이미지가 포함됩니다. 사전 이미지를 사용할 수 없는 경우 드라이버에서 오류가 발생합니다.

사후 이미지 는 변경 문서 의 전체 버전입니다. 변경 스트림 이벤트 에 사후 이미지를 포함하려면 full_document 필드 를 다음 문자열 중 하나로 설정하다 합니다.

  • "updateLookup": 변경 이벤트에는 변경 후 일정 시간 이후의 변경된 문서 전체의 복사본이 포함됩니다.

  • "whenAvailable": 변경 이벤트에는 사후 이미지를 사용할 수 있는 경우에만 변경 이벤트에 대해 수정된 문서의 사후 이미지가 포함됩니다.

  • "required": 변경 이벤트에는 변경 이벤트에 대한 수정된 문서의 사후 이미지가 포함됩니다. 사후 이미지를 사용할 수 없는 경우 드라이버에서 오류가 발생합니다.

다음 예시 에서는 컬렉션 에서 watch() 메서드를 호출하고 mongocxx::options::change_stream 인스턴스 의 full_document 필드 를 설정하여 업데이트된 문서의 사후 이미지를 포함합니다.

mongocxx::options::change_stream opts;
opts.full_document("updateLookup");
auto stream = collection.watch(opts);
while (true) {
for (const auto& event : stream) {
std::cout << bsoncxx::to_json(event) << std::endl;
}
}

변경 스트림 애플리케이션 실행 에서 앞의 업데이트 예시 를 사용하여 restaurants 컬렉션 의 문서 를 업데이트하면 다음 코드와 유사한 변경 이벤트 가 출력됩니다.

{ "_id" : { "_data" : "..." }, "operationType" : "update", "clusterTime" :
{ "$timestamp" : { ... } }, "wallTime" : { "$date" : ... },
"fullDocument" : { "_id" : { "$oid" : "..." }, "address" : { "building" : "202-24",
"coord" : [ -73.925044200000002093, 40.559546199999999772 ], "street" :
"Rockaway Point Boulevard", "zipcode" : "11697" }, "borough" : "Queens", "cuisine" :
"Irish", "grades" : [ ... ], "name" : "Blarney Castle", "restaurant_id" : "40366356" },
"ns" : { "db" : "sample_restaurants", "coll" : "restaurants" }, "documentKey" :
{ "_id" : { "$oid" : "..." } }, "updateDescription" : { "updatedFields" :
{ "cuisine" : "Irish" }, "removedFields" : [ ], "truncatedArrays" : [ ] } }

사전 이미지 및 사후 이미지에 대해 자세히 알아보려면 Change Streams 매뉴얼에서 문서 사전 및 사후 이미지로 MongoDB Server 을 참조하세요.

변경 스트림에 대해 자세히 알아보려면 Change Streams 매뉴얼의 MongoDB Server 을 참조하세요.

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