그알것 — 그럼에도 알아야 할 것들
홈질문커뮤니티
로그인
그알것 — 그럼에도 알아야 할 것들

Service

  • 홈
  • 소개
  • 질문
  • 커뮤니티

My

  • 내 워크스페이스
  • 저장한 질문
  • 작성한 답변

Policy

  • 이용약관
  • 개인정보처리방침
  • 문의

© 2026 그알것 · What Still Matters

질문 목록MessageQueue
MessageQueue

트랜잭셔널 아웃박스 패턴에 대해서 설명해주세요.

실무4/5
설계4/5
인간4/5
기초3/5

면접관의 질문 의도

패턴 이름만 외웠는지, 이중 쓰기 실패 모드와 아웃박스 이후에도 남는 중복·운영 부담을 함께 설명할 수 있는지를 가른다.

큐레이션 답변

학습 자료

트랜잭셔널 아웃박스는 도메인 데이터 변경과 이벤트 기록을 같은 DB 트랜잭션에 묶어 "커밋은 됐는데 발행이 빠지는" 이중 쓰기를 원천 차단하는 패턴이다. 커밋된 아웃박스 레코드는 별도 퍼블리셔(폴링 또는 CDC)가 읽어 브로커로 발행하고 상태를 갱신한다. 즉 발행 시점은 트랜잭션 밖으로 빠지지만 "커밋되지 않은 이벤트는 발행되지 않는다"는 보장이 생긴다. 다만 재시도·실패 복구 과정에서 중복 발행이 남으므로 소비자 멱등 처리가 짝으로 깔려야 완성된다.

좋은 답변 구조

  1. 01분산 환경의 이중 쓰기 문제를 입력·출력 관점으로 먼저 설명한다
  2. 02도메인 변경과 아웃박스 insert를 같은 트랜잭션으로 묶고 별도 퍼블리셔가 읽어 발행하는 단계별 흐름을 풀어준다
  3. 03아웃박스가 보장하는 것(누락 방지)과 보장하지 않는 것(중복 발행, 순서)을 명확히 가른다
  4. 04소비자 멱등 키·DLQ·아웃박스 정리 정책 같은 운영 보강책으로 마무리한다

자주 실수하는 포인트

아웃박스만 깔면 exactly-once가 자동 보장된다고 단정한다
발행 재시도 흐름을 두면서 소비자 멱등 키 설계를 빠뜨려 중복 처리 사고를 낸다
아웃박스 테이블 정리(아카이브·삭제) 정책을 안 짜서 테이블이 부풀고 발행이 느려진다
이벤트 순서가 중요한 도메인인데 폴링·파티셔닝 전략을 안 봐서 순서가 어긋난다

실무 맥락

  • 주문 생성 직후 결제·재고·알림 같은 후속 시스템으로 이벤트를 흘려야 하는 도메인
  • 여러 마이크로서비스가 같은 DB를 공유하지 않고 비동기로 연동되는 환경
  • Kafka·RabbitMQ 같은 브로커를 쓰면서도 DB 커밋과 발행 사이 유실을 막아야 하는 환경
  • Debezium 같은 CDC로 변경 캡처를 이미 깔아 둔 시스템

본인 경험에 녹이는 힌트

발행 실패로 이벤트가 누락돼 정합성 사고를 친 경험이 있다면 아웃박스 도입 전후 비교로 자연스럽게 풀 수 있다

재시도 로직만 강화하다가 중복 처리 버그를 만난 경험이 있다면 소비자 멱등 키 설계 이야기로 이을 수 있다

Debezium·CDC 기반 발행을 운영해본 적이 있다면 폴링 방식과의 트레이드오프를 본인 경험으로 풀 수 있다

DLQ·아웃박스 테이블 정리 운영을 해본 경험이 있다면 "보장하는 것 vs 운영으로 막는 것"의 경계를 설명하는 근거가 된다

커뮤니티 인기 답변

전체 0개

아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.

관련 꼬리 질문

Q1폴링 기반 아웃박스와 CDC 기반 아웃박스는 어떤 트레이드오프가 다른가요
Q2아웃박스가 있어도 중복 발행이 남는 이유와, 소비자 멱등은 어떻게 설계하나요
Q3아웃박스 테이블이 너무 커질 때 어떤 정리·아카이브 전략을 쓰나요
Q4이벤트 순서 보장이 필요한 도메인에서는 아웃박스를 어떻게 보강해야 하나요
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문