더북(TheBook)

DB 테이블을 메시지 큐로 활용

RDBMS 기반의 애플리케이션이라면 DB 테이블을 임시 메시지 큐로 사용하는 트랜잭셔널 아웃박스 패턴이 가장 알기 쉬운 방법입니다. 메시지를 보내는 서비스에 OUTBOX라는 DB 테이블을 만들고(그림 3-13), 비즈니스 객체를 생성, 수정, 삭제하는 DB 트랜잭션의 일부로 OUTBOX 테이블에 메시지를 삽입합니다. 로컬 ACID 트랜잭션이기 때문에 원자성은 자동 보장됩니다.

▲ 그림 3-13 서비스는 메시지를 DB 업데이트 트랜잭션에 태워 OUTBOX 테이블에 INSERT하는 식으로 메시지를 확실하게 발행한다. 메시지 릴레이는 OUTBOX 테이블에서 메시지를 읽어 메시지 브로커에 발행한다

OUTBOX 테이블은 임시 메시지 큐 역할을 합니다. 메시지 릴레이(relay, 중계기)OUTBOX 테이블을 읽어 메시지 브로커에 메시지를 발행하는 컴포넌트입니다.

Note≡ 패턴: 트랜잭셔널 아웃박스

이벤트나 메시지를 DB에 있는 아웃박스에 저장해서 DB 트랜잭션의 일부로 발행한다.42

NoSQL DB도 방법은 비슷합니다. DB에 레코드로 적재된 비즈니스 엔터티에 발행할 메시지 목록을 가리키는 속성이 있는데, 서비스가 DB 엔터티를 업데이트할 때 바로 이 목록에 메시지를 덧붙이면 됩니다. 단일 DB 작업이므로 원자적이지만, 문제는 이벤트를 가진 비즈니스 엔터티를 효과적으로 찾아 발행하는 일입니다.

메시지를 DB에서 메시지 브로커로 옮기는 방법은 두 가지입니다.

 

 


신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.