[블로그] 데이터 정합성을 위한 '보낸 편지함': 트랜잭셔널 아웃박스 패턴 정리
(원문: https://fredly.dev/transactional-outbox/)
분산 시스템에서 DB 업데이트와 메시지 발행의 원자성을 보장하는 '트랜잭셔널 아웃박스 패턴(Transactional Outbox Pattern)'을 상세히 분석한 글입니다. 분산 트랜잭션(2PC)의 복잡성을 피하면서도 데이터의 최종 정합성을 확보하는 실질적인 엔지니어링 설계 방안을 제시합니다.
주요 내용:
- 이중 쓰기(Dual-Write)의 늪: DB와 메시지 브로커가 서로 다른 트랜잭션 범위를 가질 때 발생하는 데이터 불일치 사례 분석.
- 패턴의 핵심 구조:
- 아웃박스(Outbox) 테이블: 발행할 이벤트를 비즈니스 데이터와 동일한 DB 트랜잭션 내에 저장하여 '원자성' 확보.
- 메시지 릴레이(Message Relay): 저장된 이벤트를 읽어 외부 브로커로 안정적으로 전달하는 역할.
- 구현 전략 비교:
- 폴링 퍼블리셔(Polling Publisher): 주기적 쿼리 기반의 단순하고 직관적인 구현.
- 로그 테일링(Log Tailing): CDC(Change Data Capture) 기술을 활용하여 DB 성능 저하 없이 실시간 이벤트 추출.
- 전달 신뢰성: "적어도 한 번(At-least-once)" 전달을 보장하기 위한 메커니즘과 수신측의 멱등성 처리의 중요성 강조.