토픽 187 / 192·시스템 설계 및 아키텍처 패턴
Transactional Outbox (트랜잭셔널 아웃박스)
Transactional Outbox (트랜잭셔널 아웃박스)
Outbox Pattern의 구체적 구현으로, 비즈니스 데이터와 이벤트를 동일 데이터베이스 트랜잭션 내에 저장하여 원자성을 보장하고, Message Relay가 이벤트를 브로커에 전달하는 아키텍처
목적: 원자적 데이터-이벤트 처리, 분산 시스템 일관성, 신뢰성 있는 이벤트 발행
특징: 단일 트랜잭션, Message Relay, 재시도 가능, 순서 보장 가능
구성요소
- •Outbox Table: 발행할 이벤트 저장 (event_id, payload, status, created_at)
- •Message Relay: Outbox 읽기 → 브로커 발행 → 완료 마킹
- •Message Broker: Kafka, RabbitMQ 등
Message Relay 구현
- •Polling: SELECT ... WHERE status = 'PENDING' FOR UPDATE
- •CDC: Debezium으로 INSERT 이벤트 감지
- •Outbox Event Router: Debezium Outbox SMT(Single Message Transform)
순서 보장: aggregate_id 기준 파티션, 같은 엔티티 이벤트 순서 유지
중복 처리 (Idempotency)
- •Consumer에서 event_id로 중복 확인
- •Idempotency Key 저장 테이블
Debezium Outbox Event Router: Debezium 전용 SMT, Outbox 테이블 감지 → Kafka 토픽 자동 라우팅
장점: 강한 일관성, 재시도 가능, 순서 보장, 표준 패턴
단점: 추가 인프라, 복잡도, At-least-once(멱등성 필요)
적용사례: 이커머스, 금융, 이벤트 소싱 시스템
기술요소: Outbox Table, Message Relay, CDC, Debezium, Kafka Connect
비교: Transactional Outbox(DB 기반) vs Transactional Messaging(브로커 기반)
연관: Outbox Pattern, CDC, Debezium, Kafka, 이벤트 기반 아키텍처