메시지 중복 처리 문제를 직접 겪고 해결한 결
분산 시스템 수업 프로젝트에서 Kafka를 처음 써봤습니다. 메시지가 한 번씩만 처리되는 줄 알았는데, 컨슈머가 처리 도중 실패하면 같은 메시지를 다시 받는다는 걸 직접 겪고 나서야 이해했습니다.
처음에는 컨슈머 코드가 단순히 DB에 값을 저장하는 구조였는데, 같은 메시지가 2번 들어오면 중복 데이터가 생겼습니다. 이를 해결하려고 메시지 ID를 저장해두고 이미 처리된 메시지인지 확인하는 로직을 추가했습니다. 단순해 보이는 처리인데 멱등성을 고려하지 않으면 의외의 오류가 생긴다는 걸 그때 배웠습니다.
Kafka 자체보다 비동기 시스템에서 실패를 어떻게 다루는가가 핵심이라는 걸 그 프로젝트에서 처음 실감했습니다. 정상적인 흐름보다 실패했을 때 어떤 일이 생기는지를 먼저 생각해야 한다는 감각이 생겼습니다.