DB

OUTBOX 패턴이란?

호기심 많은 솔이 2026. 5. 21. 00:03

OUTBOX 패턴이란?

OUTBOX 패턴은 외부 시스템으로 처리해야 할 작업을 바로 실행하지 않고, 먼저 DB 테이블에 "해야 할 작업"으로 저장해두고, 별도 워커가 그 테이블 또는 큐를 기준으로 처리하는 방식이다. 특히, 이벤트 기반 아키텍처에서 메시지 유실을 방지하고, 데이터 정합성을 보장하는 데 활용한다.

 

예를 들면, 특정 이벤트에 대한 알림톡을 보내야 하는 경우, 바로 알림톡 API를 호출하는 게 아니라, 먼저 DB에 데이터를 남기고, 프로듀서가 SQS에 메시지를 넣고, 워커가 SQS 메시지를 받아서 해당 outboxId를 기준으로 OUTBOX를 선점한 뒤 알림톡을 발송할 수 있다.

 

 

사용하는 이유?

[중복 처리 방지, 장애 복구, 처리 상태 추적]

알림톡 같은 외부 API 호출은 언제든 실패할 수 있는데, 이런 상황에서 OUTBOX가 없으면 보냈는지 안 보냈는지, 다시 보내도 되는지, 누가 처리 중인지 추적이 어려워진다.

반면, OUTBOX가 있다면, DB에 상태가 남기 때문에 안전하게 제어할 수 있다.

 

하지만, OUTBOX 패턴을 사용했을 때, 아웃박스 테이블을 따로 둬야 하므로 DB 사용량이 증가하고, 아웃박스를 다루는 로직이 추가로 필요하다는 단점도 존재한다.

 

OUTBOX 처리 흐름 예시

1. OUTBOX로 특정 이벤트를 선점(CLAIM)하여 다른 워커 등이 같은 이벤트를 중복 처리하지 않도록 방지.

2. 해당 이벤트 처리 성공 시 선점 상태를 풀고 성공 처리로 변경

3. 처리 실패 시 선점 상태를 풀고 실패 처리로 변경