0. Change Streams
- 애플리케이션이 실시간 데이터 변경 내용을 바로 받아볼 수 있게 하는 기능
- ✅ Aggregation Framework 기반 (변경 이벤트를 Aggregation 파이프라인으로 처리)
- ✅ 단일 컬렉션, 데이터베이스, 전체 클러스터 대상
1. Availability
- Replica Set Protocol Version 1 (pv1) 사용
- ✅ Replica Set 및 Sharded Cluster + WiredTiger 스토리지 엔진 환경
- ✅ majority read concern 여부 관계없이 사용 가능
- ✅ 암호화 가능
2. Watch
- 클라이언트에서 change stream을 구독하기
- ✅ 구독자 내부에서 대상 컬렉션에 대한 change stream이 생성됨
대상
| 대상 | 설명 | 제외되는 대상 | 관련 메서드 예시 |
| Collection | 단일 컬렉션 변경 사항 감시 | 시스템 컬렉션 admin, local, config DB |
db.collection.watch()
|
| Database | 단일 DB의 비시스템 컬렉션 감시 | admin, local, config DB | db.watch() |
| Deployment | Replica Set 또는 Sharded Cluster 대상 모든 DB의 비시스템 컬렉션 감시 |
admin, local, config DB | Mongo.watch() |
3. Connect
- 클라이언트가 change stream를 구독하는 방식
- ✅ mongodb 스레드가 oplog를 모니터링함 (커서 기반)
- ➡️ 커서 조건에 맞는 이벤트 발생 시, 클라이언트에 변경 이벤트를 내려줌
연결 방식
| 연결 방식 | 예시 | 특징 | 사용 예 |
| DNS Seed List 방식 | mongodb+srv://<cluster-url>/ | DNS로 노드 목록 자동 조회 | MongoDB Atlas 등 |
| 서버 개별 나열 방식 | mongodb://host1:27017,host2:27017,host3:27017 | 각 서버 주소를 한번에 나열 |
|
Failover
- MongoDB 서버와 지속연결을 유지하여 실시간으로 변경 이벤트를 받음
- ✅ 외부 요인에 의해 연결이 끊기면 자동으로 재연결을 시도함
- ✅ 대상: 같은 read prefreence를 가진 다른 replica 노드
- ⚠️ 적절한 노드를 찾지 못하면 예외 발생
4. Performance Consideration
Connection Pool
- Change Stream: 연결 1개 + getMore() 요청 유지
- 열린 Change Stream 수가 connection pool 크기를 초과하면 지연 발생
- ➡️ maxPoolSize 값을 열린 Change Stream 수보다 크게 설정
Sharded Cluster에서의 동작
- 각 샤드별로 Change Stream 생성
- mongos는 각 샤드에서 Change Stream 이벤트를 정렬 및 필터링함
옵션
| 옵션 | 설명 | 비고 |
| fullDocument | 변경 이벤트에서 변경된 문서 전체를 포함할지 여부 |
updateLookup 설정 시 컬렉션에서 다시 조회
|
| fullDocumentBeforeChange | 변경 전 문서의 전체 내용을 포함할지 여부 |
changeStreamPreAndPostImages 기능 활성화 필요
|
| resumeAfter | 이전에 받은 Change Stream 이벤트의 _id를 지정해 중단한 지점부터 재개 |
Change Stream 재시작 시 사용
|
| startAfter | 특정 resume token 이후 이벤트부터 시작 |
resumeAfter와 유사하나, 해당 이벤트는 포함 안 함
|
| startAtOperationTime | 특정 시점의 operationTime 이후 이벤트부터 시작 |
클러스터 타임 기준
|
| batchSize | 한 번에 반환할 최대 이벤트 수 |
기본값은 드라이버별 상이
|
| maxAwaitTimeMS | 서버가 다음 이벤트를 기다리는 최대 시간(ms) |
이 시간이 지나면 빈 결과 반환
|
| collation | 문자열 비교 방식 지정 |
다국어/대소문자 구분 처리 시 사용
|
| showExpandedEvents | 내부 이벤트까지 포함 (예: createIndexes, dropIndexes 등) |
Stable API V1에는 포함 안 됨
|
Open A Change Stream
Modify Change Stream Output
Lookup Full Document for Update Operation
Resume a Change Stream
Use Cases
Access Control
Event Notification
Collation
Change Stream and Orphan Documents
Change Stream with Document Pre- and Post- Images
출처
'Database > MongoDB' 카테고리의 다른 글
| [MongoDB Kafka Connector] 3-2. Source Connector: Configuration Properties (0) | 2025.08.10 |
|---|---|
| [MongoDB Kafka Connector] 3-1. Source Connector: Fundamentals (1) | 2025.08.10 |
| [MongoDB] ?-2. Replication: Oplog (0) | 2025.08.10 |
| [MongoDB] MongoDB Replication (0) | 2025.08.05 |