애플리케이션에서 이벤트를 발행하는 로직이 있다고 해보자. 보통, 트랜잭션 내에서 트랜잭션이 커밋되기 전에 이벤트 발행을 완료해 버린다. 하지만 이벤트 발행 완료 후 어떠한 이유에서 예외가 발생하면, 트랜잭션이 롤백되어 버린다. 이벤트는 발행되었는데 트랜잭션은 롤백되어 버린 것이다. 이러한 불상사를 막기 위해 이벤트 발행을 트랜잭션에 묶어 관리하는 것이 트랜잭셔널 아웃박스 패턴이다.
수행되는 한 트랜잭션 내에서 데이터베이스의 Outbox 테이블에 메세지 내용을 저장한다. 다른 별도 프로세스에서 Outbox 테이블에서 메세지를 읽어 메세지 브로커에 전송한다. 이것이 Outbox Pattern 이다. 메세지 브로커에 전송하는 작업은 실패시 완료될 때 까지 재시도 할 수 있다. 따라서 Outbox Pattern은 적어도 한 번 이상(at-least once)메세지가 성공적으로 전송됨을 보장할 수 있다.
여기에서 Outbox는 “보낼 편지함”이라는 뜻이 있다. 전송되지 않았거나 전송에 실패한 메세지들이 모여있는 보관함이라는 뜻이다. 전송할 메세지를 저장하는 저장소를 따로 두는 것이다.