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 기능 입니다.

Ruby 운전자 사용하는 경우 watch 메서드를 호출하여 Mongo::Collection::View::ChangeStream 객체 반환할 수 있습니다. 그런 다음 콘텐츠를 반복하여 업데이트, 삽입 및 삭제와 같은 데이터 변경 사항을 모니터 할 수 있습니다.

이 가이드 의 예제에서는 Atlas 샘플 데이터 세트sample_restaurants 데이터베이스 에 있는 restaurants 컬렉션 사용합니다. Ruby 애플리케이션 에서 이 컬렉션 에 액세스 하려면 Atlas cluster 에 연결하는 Mongo::Client 객체 만들고 databasecollection 변수에 다음 값을 할당합니다.

database = client.use('sample_restaurants')
collection = database[:restaurants]

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

변경 스트림 열려면 watch 메서드를 호출합니다. watch 메서드를 호출하는 객체 에 따라 변경 스트림 모니터링하는 이벤트 범위가 결정됩니다. 다음 객체에서 watch 메서드를 호출할 수 있습니다.

  • Mongo::Client: 시스템 컬렉션 adminlocal또는, 및 데이터베이스의 컬렉션을 제외한 배포서버 내 모든 데이터베이스의 모든 컬렉션에 대한 변경 사항을 모니터링합니다.config

  • Mongo::Database: 하나의 데이터베이스 에 있는 모든 컬렉션의 변경 사항을 모니터링합니다.

  • Mongo::Collection: 하나의 컬렉션 에 대한 변경 사항을 모니터링합니다.

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

stream = collection.watch
stream.each do |doc|
puts doc
break if doc['operationType'] == 'invalidate'
end

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

collection.update_one(
{ 'name' => 'Blarney Castle' },
{ '$set' => { 'cuisine' => 'Irish' } }
)

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

{"_id"=>{"_data"=>"..."}, "operationType"=>"update", "clusterTime"=>#<...>,
"ns"=>{"db"=>"sample_restaurants", "coll"=>"restaurants"}, "documentKey"=>
{"_id"=>BSON::ObjectId('...')}, "updateDescription"=>{"updatedFields"=>
{"cuisine"=>"Irish"}, "removedFields"=>[], "truncatedArrays"=>[]}}

변경 스트림 출력을 수정하려면 배열 의 파이프라인 단계를 watch 메서드에 매개 변수로 전달하면 됩니다. 배열 에 다음 단계를 포함할 수 있습니다.

  • $addFields 또는 $set: 문서에 새 필드를 추가합니다.

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

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

  • $replaceWith 또는 $replaceRoot: 입력 문서 를 지정된 문서 로 바꿉니다.

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

  • $unset: 문서에서 필드를 제거합니다.

다음 예시 에서는 $match 단계가 포함된 파이프라인 을 watch 메서드에 전달합니다. 이는 업데이트 작업이 발생할 때만 이벤트를 출력하도록 watch 메서드에 지시합니다.

pipeline = [{ '$match' => { 'operationType' => 'update' } }]
stream = collection.watch(pipeline)
stream.each do |doc|
puts doc
break if doc['operationType'] == 'invalidate'
end

watch 메서드의 동작을 수정하려면 옵션 해시를 watch에 매개 변수로 전달하면 됩니다. 다음 표에서는 설정하다 수 있는 몇 가지 옵션에 대해 설명합니다.

옵션
설명

full_document

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

full_document_before_change

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

resume_after

변경 스트림 의 논리적 점 지정합니다.
이 옵션은 start_at_operation_time 와 상호 배타적입니다.

start_at_operation_time

지정된 타임스탬프 또는 그 이후에 발생한 변경 사항만 제공하도록 변경 스트림 에 지시합니다.
이 옵션은 resume_after 와 상호 배타적입니다.

collation

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

watch 옵션의 전체 목록은 API 설명서의 보기 를 참조하세요.

중요

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

기본값 으로 컬렉션 에서 작업을 수행할 때 해당 변경 이벤트 작업 전후에 수정된 필드와 해당 값만 포함됩니다.

watch 메서드에 수정된 필드 외에도 문서의 사전 이미지, 변경 전 문서의 전체 버전을 반환하도록 지시할 수 있습니다. 변경 스트림 이벤트 에 사전 이미지를 포함하려면 full_document_before_change 옵션을 설정하는 watch 에 옵션 해시를 전달합니다. 이 옵션을 다음 문자열 값으로 설정하다 수 있습니다.

  • 'whenAvailable': 변경 이벤트 에는 변경 이벤트에 대한 수정된 문서 의 사전 이미지가 포함됩니다. 사전 이미지를 사용할 수 없는 경우 이 변경 이벤트 필드 의 값은 nil 입니다.

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

  • 'off': (기본값) 변경 이벤트 수정된 문서 의 사전 이미지가 포함되지 않습니다.

메서드에 수정된 필드 외에도 문서의 사후 이미지 변경 문서 의 전체 버전을 반환하도록 지시할 수도 있습니다.watch 변경 스트림 이벤트 에 사후 이미지를 포함하려면 full_document 옵션을 설정하는 watch 에 옵션 해시를 전달합니다. 이 옵션을 다음 문자열 값으로 설정하다 수 있습니다.

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

  • 'whenAvailable': 변경 이벤트 에는 변경 이벤트에 대한 수정된 문서 의 사후 이미지가 포함됩니다. 사후 이미지를 사용할 수 없는 경우 이 변경 이벤트 필드 의 값은 nil 입니다.

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

  • 'default': (기본값) 변경 이벤트 수정된 문서 의 사후 이미지가 포함되지 않습니다.

다음 예시 에서는 컬렉션 에서 watch 메서드를 호출하고 full_document 옵션을 설정하여 업데이트된 문서의 사후 이미지를 포함합니다.

options = { full_document: 'updateLookup' }
stream = collection.watch([], options)
stream.each do |doc|
puts doc
break if doc['operationType'] == 'invalidate'
end

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

{"_id"=>{"_data"=>"..."}, "operationType"=>"update", "clusterTime"=>
#<...1>, "wallTime"=>..., "fullDocument"=>{"_id"=>BSON::ObjectId('...'),
"address"=>{"building"=>"202-24", "coord"=>[-73.9250442, 40.5595462],
"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"=>BSON::ObjectId('...')}, "updateDescription"=>{"updatedFields"=>
{"cuisine"=>"Irish"}, "removedFields"=>[], "truncatedArrays"=>[]}}

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

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

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