더북(TheBook)

이벤트 발행: 폴링 발행기 패턴

RDBMS를 쓰는 애플리케이션에서 OUTBOX 테이블에 삽입된 메시지를 발행하는 가장 간단한 방법은 메시지 릴레이로 테이블을 폴링해서 미발행 메시지를 조회하는 것입니다. 다음과 같은 쿼리를 주기적으로 실행하면 됩니다.

SELECT * FROM OUTBOX ORDERED BY ... ASC

메시지 릴레이는 이렇게 조회한 메시지를 하나씩 각자의 목적지 채널로 보내서 메시지 브로커에 발행합니다. 그리고 나중에 OUTBOX 테이블에서 메시지를 삭제합니다.

BEGIN
DELETE FROM OUTBOX WHERE ID in (...)
COMMIT

Note≡ 패턴: 폴링 발행기

DB에 있는 아웃박스를 폴링해서 메시지를 발행한다.43

DB 폴링은 규모가 작을 경우 쓸 수 있는 단순한 방법입니다. 하지만 DB를 자주 폴링하면 비용이 유발되고 NoSQL DB는 쿼리 능력에 따라 사용 가능 여부가 결정됩니다. 애플리케이션이 OUTBOX 테이블을 쿼리하는 대신 비즈니스 엔터티를 쿼리해야 하는 경우도 있는데, 이런 일이 효율적으로 가능할 수도 있고 불가능할 수도 있기 때문입니다. 이런 단점과 한계가 있기 때문에 (어떤 경우에는 유용하지만) DB 트랜잭션 로그 테일링이 좀 더 정교하고 성능이 좋은 방법입니다.

 

 


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