Dead Letter Queue (DLQ) 개념

이도형·2025년 12월 23일

Dead Letter Queue

메시지 큐 시스템에서 처리에 실패한 메시지를 따로 모아도는 보관소

출처 : https://aws.amazon.com/ko/what-is/dead-letter-queue/

주요 역할 및 필요성

  • 시스템 병목, 무한 루프 : 특정 메시지가 큐에 남아 있으면, 뒤따라오는 정상 메시지가 지연되거나 무한 재시도 루프에 빠질 수 있음.
  • 데이터 유실 방지 : 메시지를 단순 삭제하는 대신 보관해서, 중요한 데이터 유실을 막음.
  • 원인 분석 및 디버깅 : DLQ에 쌓인 메시지를 분석하여 실패 원인을 파악하고 코드를 수정함.

메시지가 DLQ로 이동하는 원인

  • 최대 재시도 횟수 초과 : 설정한 횟수이상으로 시도했는데 계속 실패할 때
  • 유효 기간 만료 (TTL) : 메시지 큐에서 머무르는 시간이 일정 시간 이상일 경우
  • 매사자 형식 오류 : 데이터 포맷이 잘못되어 코드에서 읽을 수 없을 때, 메시지가 크기 제한을 초과하는 경우
  • 수신자 문제 : 수신자가 존재하지 않는 경우

작동 원리

  1. 처리 시도 및 실패
  2. 재시도 (Retry)
  3. DLQ 이동
  4. 후속 조치 (Redrive) : DLQ에 저장된 메시지를 통해 문제를 분석하고 해결한 후, 소스 큐로 다시 이동시켜 재처리.

DLQ 사용해야하는 시점

  • 비동기 처리 시스템 : 주문 처리, 알림 발송 등 순서보다는 처리 정합성이 보장되는 경우
  • 외부 API 의존성 : 외부 시스템 장애로 인해 메시지 처리가 장기간 실패할 가능성 있을 경우
  • 엄격한 데이터 정합성 : 금융 거래 내역 등 메시지가 유실되서는 안 되는 경우

결론

개념뿐만 아니라, AWS SQS, RabbitMQ, Apache Kafka 등에서 실사용되는 것도 알아볼 필요가 있음.
이전에 참여한 계정게 프로젝트 에러 로그와의 차이점은 DLQ는 살아있는 데이터 (재처리), 에러로그는 죽은 데이터 (사후 증거, 감사)

profile
열심히 살고 싶습니다! 일하고 싶습니다 :)

0개의 댓글