Transactional Outbox Pattern
을 활용하여 이벤트 발행을 보장하는 방법에 대해 설명한다. Kafka를 통한 비동기 이벤트 통신을 구현하며 데이터 일관성을 보장하는 방법에 대해 설명한다.
실제 코드는 아래 링크에서 확인할 수 있다.
https://github.com/BK-marriott/server/pull/59
현재 선착순 쿠폰 발급을 담당하는 Promotion service 와 Coupon serivce 사이에는 Kafka 인스턴스를 두어 Event를 통해 비동기로 쿠폰 발급 작업을 수행하고 있다. 선착순 쿠폰 발급의 성공 유무는 promotion 에서 판단하고 실제로 쿠폰 데이터를 저장하는 작업은 coupon 에서 수행한다.
해당 작업은 비동기로 처리되는 만큼 데이터 일관성이 중요한데, 선착순 쿠폰 발급에 성공했음에도 이벤트 발행이 실패한다거나 하는 문제로 쿠폰 발급 처리가 누락될 수 있기 때문이다.
(이렇게 일관성이 깨졌을 때 개발자가 수동으로 일관성을 맞춰주는 작업은 아주 번거로운 작업이 될 겁니다.)
따라서 데이터 일관성을 보장하기 위해 outbox pattern
을 적용하려 한다.
EDD는 이벤트를 사용한 비동기 통신 방식이다.
<aside> 💡
이벤트는 어떤 일이 발생함
을 의미한다.
</aside>