message-queuedeliveryidempotency
at-most-once, at-least-once, exactly-once delivery를 설명해 주세요
- 예상 시간
- 8분
30초 답변
꼬리질문
조금 더 깊게 물어본다면
답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.
at-least-once에서는 왜 중복이 생기나요?
idempotent consumer는 왜 필요한가요?
exactly-once는 정말 가능한가요?
메시지 순서 보장은 별도 문제인가요?
결제 이벤트에서는 어떤 방식을 선호하나요?
부가 설명
메시지 큐를 쓰면 비동기 처리는 쉬워지지만 “정확히 한 번 처리됐나?”라는 질문이 생깁니다. 소비자가 메시지를 처리한 뒤 ack 전에 죽으면 broker는 다시 보낼 수 있습니다. 그러면 중복 처리가 생깁니다. 반대로 ack를 먼저 보내고 처리 중 죽으면 메시지가 사라질 수 있습니다.
그래서 at-least-once + idempotent consumer 조합을 먼저 떠올리는 경우가 많습니다. 중복이 올 수 있다고 보고, 같은 idempotency key나 message id를 기준으로 한 번만 반영되게 만드는 식입니다. exactly-once는 제품 문구처럼 단순히 믿기보다 어떤 범위에서 보장되는지 확인해야 합니다.
한 줄 정리
delivery semantics는 메시지 유실과 중복을 어떤 방식으로 감당할지 정하는 기준입니다.