파일 업로드 후 API에서 DB 저장 + MQ publish를 직접 수행할 경우 이중쓰기 문제가 발생할 수 있었다. 또한 polling 방식은 불필요한 DB 조회가 발생했다.
- 이벤트 유실 없이 정합성 보장
- DB polling 없이 변경 기반 이벤트 처리
- API와 MQ 간 결합도 제거
- DB polling — 주기적 SELECT로 작업 확인, 실시간성 저하 및 불필요한 DB 부하 증가 → 제외
- API에서 직접 MQ publish — DB 저장과 MQ publish 중 한쪽만 실패하면 이중쓰기 문제 발생 → 제외
- Transactional Outbox + CDC — DB 저장과 outbox_event 저장을 같은 트랜잭션으로 묶어 원자성 보장, Debezium이 변경 감지 후 MQ 발행 → 선택
💡 배운 점: 분산 환경에서는 MQ 발행보다 이벤트 기록이 먼저이고, CDC는 polling을 대체하는 강력한 방식이다.