message-queuedeliveryidempotency

at-most-once, at-least-once, exactly-once delivery를 설명해 주세요

예상 시간
8
30초 답변

꼬리질문

조금 더 깊게 물어본다면

답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.

at-least-once에서는 왜 중복이 생기나요?

부가 설명

메시지 큐를 쓰면 비동기 처리는 쉬워지지만 “정확히 한 번 처리됐나?”라는 질문이 생깁니다. 소비자가 메시지를 처리한 뒤 ack 전에 죽으면 broker는 다시 보낼 수 있습니다. 그러면 중복 처리가 생깁니다. 반대로 ack를 먼저 보내고 처리 중 죽으면 메시지가 사라질 수 있습니다.

그래서 at-least-once + idempotent consumer 조합을 먼저 떠올리는 경우가 많습니다. 중복이 올 수 있다고 보고, 같은 idempotency key나 message id를 기준으로 한 번만 반영되게 만드는 식입니다. exactly-once는 제품 문구처럼 단순히 믿기보다 어떤 범위에서 보장되는지 확인해야 합니다.

한 줄 정리

delivery semantics는 메시지 유실과 중복을 어떤 방식으로 감당할지 정하는 기준입니다.