토픽 이벤트 발행 → 컨슈머 그룹 → 멱등성 처리 추가
서비스 간 결합을 낮추기 위해 Kafka를 처음 도입한 건 주문 완료 후 이메일 발송 흐름이었습니다. 기존엔 동기 호출로 연결돼 이메일 서비스가 느리면 주문 API도 함께 느려졌는데, 토픽으로 이벤트를 발행하고 컨슈머가 독립적으로 처리하는 구조로 바꿨습니다.
컨슈머 그룹을 활용해 같은 토픽을 여러 서비스가 독립적으로 소비할 수 있게 됐고, 통계 집계 서비스를 추가할 때 프로듀서 코드를 전혀 수정하지 않아도 됐습니다. 처음에는 메시지 중복 소비 문제를 고려하지 않아 이메일이 여러 번 발송되는 버그가 있었고, 멱등성 처리를 추가하는 게 배포 후 긴급 패치가 됐습니다.
at-least-once 보장이 멱등 컨슈머를 전제한다는 걸 직접 겪으며 배웠습니다.