더북(TheBook)

3.3.7 트랜잭셔널 메시징

서비스는 보통 DB를 업데이트하는 트랜잭션의 일부로 메시지를 발행합니다. DB 업데이트와 메시지 전송을 한 트랜잭션으로 묶지 않으면, DB 업데이트 후 메시지는 아직 전송되지 않은 상태에서 서비스가 중단될 수 있기 때문에 문제가 됩니다. 이 두 작업이 서비스에서 원자적으로 수행되지 않으면 시스템이 실패할 경우 아주 불안정한 상태가 될 것입니다.

예전에는 DB와 메시지 브로커에 분산 트랜잭션을 적용했었지만, 요즘 애플리케이션에 분산 트랜잭션은 더 이상 어울리지 않습니다(4장). 더구나 현대 메시지 브로커(예: 아파치 카프카)는 대부분 분산 트랜잭션을 지원하지 않습니다.

애플리케이션에서 메시지를 확실하게 발행하려면 어떻게 해야 할까요?

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