토픽 186 / 192·시스템 설계 및 아키텍처 패턴
Outbox Pattern (아웃박스 패턴)
Outbox Pattern (아웃박스 패턴)
데이터베이스 트랜잭션과 메시지 발행의 원자성을 보장하기 위해 이벤트를 별도의 Outbox 테이블에 저장하고, 별도 프로세스가 이를 읽어 메시지 브로커에 발행하는 패턴
목적: 트랜잭션-메시지 원자성, 데이터 일관성, 안정적인 이벤트 발행
특징: Outbox 테이블, Polling/CDC, At-least-once 전달, 멱등성 필요
문제 상황 (Dual Write Problem)
- •DB 저장 성공 → 메시지 발행 실패: 데이터 불일치
- •메시지 발행 성공 → DB 저장 실패: 데이터 불일치
- •두 작업을 단일 트랜잭션으로 묶을 수 없음
Outbox Pattern 동작
구현 방식
- •Polling Publisher: 주기적으로 Outbox 테이블 조회, 단순하지만 지연
- •CDC (Change Data Capture): Debezium 등으로 DB 로그 감지, 실시간, 복잡
Outbox 테이블 구조: id, aggregate_type, aggregate_id, event_type, payload, created_at, published_at
장점: 트랜잭션 원자성, 데이터 일관성, 안정적 발행
단점: 추가 테이블/프로세스, At-least-once(멱등성 필요), 지연
적용사례: 마이크로서비스 이벤트 발행, 주문-재고 동기화, 감사 로그
기술요소: Outbox Table, CDC, Debezium, Polling, Idempotency
비교: Outbox(트랜잭션 보장) vs Transactional Messaging(지원 DB) vs 2PC
연관: 이벤트 기반 아키텍처, CDC, Debezium, Saga, 분산 시스템