평범한 이야기들

트랜잭셔널 아웃박스 (Transactional Outbox) 본문

평범한 개발 이야기/ETC

트랜잭셔널 아웃박스 (Transactional Outbox)

songsariya 2023. 11. 17. 13:19
728x90

 트랜잭셔널 아웃박스(Transactional Outbox)는 트랜잭션 내에서 발생하는 이벤트를 외부 시스템으로 전송하는 패턴입니다. 트랜잭션 내에서 발생하는 이벤트를 외부 시스템으로 전송하는 경우, 트랜잭션이 성공적으로 완료되었는지 여부에 따라 이벤트 전송 여부를 결정해야 합니다. 트랜잭셔널 아웃박스 패턴을 사용하면 트랜잭션 내에서 발생하는 이벤트를 외부 시스템으로 전송하는 작업을 트랜잭션 내에서 처리할 수 있습니다. RDBMS 기반의 애플리케이션이라면 DB 테이블을 임시 메시지 큐로 사용하는 트랜잭셔널 아웃박스 패턴이 가장 알기 쉬운 방법입니다. 메시지를 보내는 서비스에 OUTBOX라는 DB 테이블을 만들고, 비즈니스 객체를 생성, 수정, 삭제하는 DB 트랜잭션의 일부로 OUTBOX 테이블에 메시지를 삽입합니다. 로컬 ACID 트랜잭션이기 때문에 원자성은 자동 보장됩니다. OUTBOX 테이블은 임시 메시지 큐 역할을 합니다. 메시지 릴레이(relay, 중계기) OUTBOX 테이블을 읽어 메시지 브로커에 메시지를 발행하는 컴포넌트입니다.

 

동작방법

1. 트랜잭션 내에서 이벤트를 생성합니다.
2. 이벤트를 이벤트 저장소에 저장합니다.
3. 트랜잭션이 성공적으로 완료되면 이벤트를 외부 시스템으로 전송합니다.

 

트랜잭셔널 아웃박스  장점

- 트랜잭션 내에서 발생하는 이벤트를 외부 시스템으로 전송하는 작업을 트랜잭션 내에서 처리할 수 있습니다.

- 트랜잭션이 성공적으로 완료되었는지 여부에 따라 이벤트 전송 여부를 결정할 수 있습니다.
- 이벤트를 외부 시스템으로 전송하는 작업을 비동기적으로 처리할 수 있습니다.

 

트랜잭셔널 아웃박스 구현 방법

- 이벤트 저장소로 데이터베이스를 사용하는 방법
- 이벤트 저장소로 메시지 브로커를 사용하는 방법
- 이벤트 저장소로 이벤트 버킷을 사용하는 방법

 

트랜잭셔널 아웃박스 패턴은 마이크로 서비스 아키텍처에서 많이 사용되는 패턴입니다. 마이크로 서비스 아키텍처에서는 각 마이크로 서비스가 독립적으로 개발되고 운영되기 때문에, 마이크로 서비스 간에 데이터를 동기화하는 것이 중요합니다. 트랜잭셔널 아웃박스 패턴을 사용하면 마이크로 서비스 간에 발생하는 이벤트를 외부 시스템으로 전송하여 데이터를 동기화할 수 있습니다.

트랜잭셔널 아웃박스 유의 사항

- 이벤트 저장소는 트랜잭션 내에서 안정적으로 읽고 쓸 수 있어야 합니다.
- 이벤트 전송 작업은 비동기적으로 처리해야 합니다.
- 이벤트 전송 작업이 실패하더라도 트랜잭션은 성공적으로 완료되어야 합니다.

 

참고

https://thebook.io/007035/0185/

728x90
Comments