[면접 대비] Kafka를 썼는데 왜 Outbox까지 필요했을까?
·
면접 대비
DB와 메시지 발행 사이에서 생기는 정합성 문제 실시간 이상거래 탐지 시스템을 만들면서 결제 Webhook으로 들어온 거래를 Kafka를 통해 비동기로 처리하는 구조를 사용했다. 처음 구조는 단순했다. 거래를 DB에 저장한 뒤 Kafka에 메시지를 보내고 Consumer가 해당 메시지를 받아 이상거래 여부를 판단하는 방식이다.처음에는 이 구조면 충분하다고 생각했다. Kafka가 Producer와 Consumer 사이에서 메시지를 전달해 주고 Consumer에서 문제가 발생하면 재시도나 DLQ를 이용하면 된다고 생각했기 때문이다. 그런데 구현하면서 한 가지 문제가 눈에 들어왔다.DB 저장은 성공했는데 Kafka 메시지 발행에 실패하면 어떻게 될까?이 질문에서 Transactional Outbox를 적용하게..