개요
이 가이드에서는 change stream을 사용하여 데이터의 실시간 변경 사항을 모니터링하는 방법을 배울 수 있습니다. change stream은 애플리케이션이 단일 collection, 데이터베이스 또는 배포에서 데이터 변경 사항을 구독할 수 있도록 하는 MongoDB Server 기능입니다.
다음 조치를 수행하는 데 도움이 되는 change stream을 열 수 있습니다.
- 디바이스가 동작 감지 카메라와 같은 이벤트를 추적하고 React 수 있도록 합니다. 
- 주가 변화를 모니터링하는 애플리케이션 만들기 
- 특정 작업에 대한 직원 활동 로그 생성 
애그리게이션 연산자 세트를 지정하여 애플리케이션이 수신하는 데이터를 필터링하고 변환할 수 있습니다. MongoDB deployment v6.0 이상에 연결된 경우 변경 전후의 문서 데이터를 포함하도록 이벤트를 구성할 수도 있습니다.
change stream을 열고 구성하는 방법을 알아보려면 다음 섹션으로 이동하세요.
샘플 데이터
이 가이드의 예에서는 directors collection의 변경 사항을 모니터링합니다. 이 collection에 구조체로 모델링된 다음 문서가 포함되어 있다고 가정합니다.
let docs = vec! [     Director {         name: "Todd Haynes".to_string(),         movies: vec! ["Far From Heaven".to_string(), "Carol".to_string()],         oscar_noms: 1,     },     Director {         name: "Jane Campion".to_string(),         movies: vec! ["The Piano".to_string(), "Bright Star".to_string()],         oscar_noms: 5,     } ]; 
팁
컬렉션 에 문서를 삽입하는 방법을 학습 보려면 문서 삽입 가이드 를 참조하세요.
변경 스트림 열기
change stream을 열어 특정 유형의 데이터 변경 사항을 구독하고 애플리케이션에서 변경 이벤트를 생성할 수 있습니다.
change stream을 열려면 Collection, Database 또는 Client 인스턴스에서 watch() 메서드를 호출합니다.
중요
독립형 MongoDB 배포는 변경 스트림을 지원 하지 않는데, 이는 이 기능 에 복제본 세트 oplog 가 필요하기 때문입니다. oplog 에 학습 보려면 서버 매뉴얼의 복제본 세트 oplog 페이지를 참조하세요.
watch() 메서드를 호출하는 구조체 유형에 따라 change stream이 수신하는 이벤트 범위가 결정됩니다. 다음 표에서는 호출 객체에 따른 watch() 메서드의 동작을 설명합니다.
| 구조체 유형 | 동작  watch() | 
|---|---|
| 
 | Monitors changes to the individual collection | 
| 
 | Monitors changes to all collections in the database | 
| 
 | Monitors all changes in the connected MongoDB deployment | 
예시
다음 예시에서는 directors collection에서 change stream을 엽니다. 이 코드는 각 인스턴스의 필드 및 필드에 액세스하여 각 이벤트의 작업 유형과 수정된 문서를 operation_type full_document ChangeStreamEvent 인쇄합니다.
let mut change_stream = my_coll.watch().await?; while let Some(event) = change_stream.next().await.transpose()? {     println!("Operation performed: {:?}", event.operation_type);     println!("Document: {:?}", event.full_document); } 
팁
ChangeStreamEvent 구조체 필드의 전체 목록은 API 문서에서 ChangeStreamEvent 를 참조하세요.
값이 인 collection에 문서를 directors name "Wes Anderson" 삽입하는 경우 앞의 코드는 다음과 같은 출력을 생성합니다.
Operation performed: Insert Document: Some(Director { name: "Wes Anderson", movies: [...], oscar_noms: 7 }) 
change stream에 애그리게이션 연산자 적용
pipeline() 메서드를 watch() 메서드에 연결하여 변경 스트림 이 수신할 변경 이벤트를 지정할 수 있습니다. 집계 파이프라인 을 pipeline() 에 매개 변수로 전달합니다.
사용 중인 MongoDB Server 버전에서 지원하는 집계 연산자를 학습 보려면 서버 매뉴얼의 변경 스트림 출력 수정 을 참조하세요.
예시
다음 예에서는 업데이트 작업을 필터링하는 집계 파이프라인을 만듭니다. 그런 다음 이 코드는 파이프라인을 pipeline() 메서드에 전달하여 업데이트 작업에 대한 change stream 이벤트만 수신하고 출력하도록 change stream을 구성합니다.
let mut update_change_stream = my_coll.watch()     .pipeline(vec![doc! { "$match" : doc! { "operationType" : "update" } }])     .await?; while let Some(event) = update_change_stream.next().await.transpose()? {     println!("Update performed: {:?}", event.update_description); } 
oscar_noms 필드의 값을 늘려 name 값이 "Todd Haynes" 인 문서를 업데이트하는 경우 앞의 코드는 다음과 같은 출력을 생성합니다.
Update performed: Some(UpdateDescription { updated_fields: Document({ "oscar_noms": Int64(2)}), removed_fields: [], truncated_arrays: Some([]) }) 
팁
업데이트 작업을 수행하는 방법을 알아보려면 문서 수정 가이드를 참조하세요.
사전 이미지 및 사후 이미지 포함하기
다음 데이터를 포함하거나 생략하도록 변경 이벤트를 구성할 수 있습니다.
- 사전 이미지: 작업 전의 문서의 버전을 나타내는 문서(있는 경우) 
- 사후 이미지: 작업 후의 문서의 버전을 나타내는 문서(있는 경우) 
중요
배포에서 MongoDB v6.0 이상을 사용하는 경우에만 collection에서 사전 및 사후 이미지를 활성화할 수 있습니다.
사전 이미지 또는 사후 이미지가 포함된 변경 스트림 이벤트를 수신하려면 다음 작업을 수행해야 합니다.
- MongoDB deployment에서 collection에 대한 사전 이미지 및 사후 이미지를 활성화합니다. - 팁- 배포에서 사전 및 사후 이미지를 활성화하는 방법에 대한 자세한 내용은 서버 설명서의 Change Streams with Document Pre- and Post-Images(이미지 사전 및 사후 문서화의 Change Streams)를 참조하세요. - 사전 이미지 및 사후 이미지가 활성화된 컬렉션을 생성하도록 드라이버에 지시하는 방법을 알아보려면 이 페이지의 사전 이미지 및 사후 이미지가 활성화된 컬렉션 생성 섹션을 참조하세요. 
- 사전 이미지와 사후 이미지 중 하나 또는 둘 다를 검색하도록 change stream을 구성합니다. 이 구성 중에 사전 및 사후 이미지를 요구하거나 사용 가능한 경우에만 포함하도록 드라이버에 지시할 수 있습니다. - 팁- 변경 이벤트에 사전 이미지를 기록 하도록 변경 스트림 을 구성하려면 이 페이지의 사전 이미지 구성 예시 를 참조하세요. - 변경 이벤트의 사후 이미지를 기록하도록 변경 스트림을 구성하려면 이 페이지의 사후 이미지 구성 예제 를 참조하세요. 
사전 이미지 및 사후 이미지를 활성화하여 collection 만들기
컬렉션 에 대해 사전 이미지 및 사후 이미지 문서를 활성화 하려면 change_stream_pre_and_post_images() 옵션 빌더 메서드를 사용합니다. 다음 예시 에서는 이 빌더 메서드를 사용하여 컬렉션 옵션을 지정하고 사전 및 사후 이미지를 사용할 수 있는 컬렉션 을 만듭니다.
let enable = ChangeStreamPreAndPostImages::builder().enabled(true).build(); let result = my_db.create_collection("directors")     .change_stream_pre_and_post_images(enable)     .await?; 
MongoDB Shell 또는 애플리케이션에서 collMod 명령을 실행하여 기존 컬렉션의 사전 이미지 및 사후 이미지 옵션을 변경할 수 있습니다. 이 작업을 수행하는 방법을 알아보려면 명령 실행 가이드 및 MongoDB Server 매뉴얼의 collMod 항목을 참조하세요.
경고
collection에서 사전 이미지 또는 사후 이미지를 활성화한 경우 collMod 으)로 이러한 설정을 수정하면 해당 collection의 기존 change stream이 종료될 수 있습니다.
사전 이미지 구성 예시
사전 이미지가 포함된 변경 이벤트를 반환하는 변경 스트림 을 구성하려면 full_document_before_change() 옵션 빌더 메서드를 사용합니다. 다음 예시 에서는 변경 스트림 옵션을 지정하고 사전 이미지 문서를 반환하는 변경 스트림 을 생성합니다.
let pre_image = FullDocumentBeforeChangeType::Required; let mut change_stream = my_coll.watch()     .full_document_before_change(pre_image)     .await?; while let Some(event) = change_stream.next().await.transpose()? {     println!("Operation performed: {:?}", event.operation_type);     println!("Pre-image: {:?}", event.full_document_before_change); } 
앞의 예시 에서는 FullDocumentBeforeChangeType::Required 값을 full_document_before_change() 옵션 빌더 메서드에 전달합니다. 이 메서드는 바꾸기, 업데이트 및 삭제 변경 이벤트에 대한 사전 이미지를 요구하도록 변경 스트림 을 구성합니다. 사전 이미지를 사용할 수 없는 경우 운전자 에서 오류가 발생합니다.
name 값이 "Jane Campion" 인 문서를 업데이트하면 변경 이벤트가 다음과 같은 출력을 생성합니다.
Operation performed: Update Pre-image: Some(Director { name: "Jane Campion", movies: ["The Piano", "Bright Star"], oscar_noms: 5 }) 
사후 이미지 구성 예시
사후 이미지가 포함된 변경 이벤트를 반환하는 변경 스트림 을 구성하려면 full_document() 옵션 빌더 메서드를 사용합니다. 다음 예시 에서는 변경 스트림 옵션을 지정하고 이미지 후 문서를 반환하는 변경 스트림 을 생성합니다.
let post_image = FullDocumentType::WhenAvailable; let mut change_stream = my_coll.watch()     .full_document(post_image)     .await?; while let Some(event) = change_stream.next().await.transpose()? {     println!("Operation performed: {:?}", event.operation_type);     println!("Post-image: {:?}", event.full_document); } 
앞의 예시 에서는 FullDocument::WhenAvailable 값을 full_document() 옵션 빌더 메서드에 전달합니다. 이 메서드는 사후 이미지를 사용할 수 있는 경우 교체, 업데이트 및 삭제 변경 이벤트에 대한 사후 이미지를 반환하도록 변경 스트림 을 구성합니다.
name 값이 "Todd Haynes" 인 문서를 삭제하면 변경 이벤트가 다음과 같은 출력을 생성합니다.
Operation performed: Delete Post-image: None 
추가 정보
API 문서
이 가이드에 언급된 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.