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

출처 : https://aws.amazon.com/ko/what-is/dead-letter-queue/
주요 역할 및 필요성
- 시스템 병목, 무한 루프 : 특정 메시지가 큐에 남아 있으면, 뒤따라오는 정상 메시지가 지연되거나 무한 재시도 루프에 빠질 수 있음.
- 데이터 유실 방지 : 메시지를 단순 삭제하는 대신 보관해서, 중요한 데이터 유실을 막음.
- 원인 분석 및 디버깅 : DLQ에 쌓인 메시지를 분석하여 실패 원인을 파악하고 코드를 수정함.
메시지가 DLQ로 이동하는 원인
- 최대 재시도 횟수 초과 : 설정한 횟수이상으로 시도했는데 계속 실패할 때
- 유효 기간 만료 (TTL) : 메시지 큐에서 머무르는 시간이 일정 시간 이상일 경우
- 매사자 형식 오류 : 데이터 포맷이 잘못되어 코드에서 읽을 수 없을 때, 메시지가 크기 제한을 초과하는 경우
- 수신자 문제 : 수신자가 존재하지 않는 경우
작동 원리
- 처리 시도 및 실패
- 재시도 (Retry)
- DLQ 이동
- 후속 조치 (Redrive) : DLQ에 저장된 메시지를 통해 문제를 분석하고 해결한 후, 소스 큐로 다시 이동시켜 재처리.
DLQ 사용해야하는 시점
- 비동기 처리 시스템 : 주문 처리, 알림 발송 등 순서보다는 처리 정합성이 보장되는 경우
- 외부 API 의존성 : 외부 시스템 장애로 인해 메시지 처리가 장기간 실패할 가능성 있을 경우
- 엄격한 데이터 정합성 : 금융 거래 내역 등 메시지가 유실되서는 안 되는 경우
결론
개념뿐만 아니라, AWS SQS, RabbitMQ, Apache Kafka 등에서 실사용되는 것도 알아볼 필요가 있음.
이전에 참여한 계정게 프로젝트 에러 로그와의 차이점은 DLQ는 살아있는 데이터 (재처리), 에러로그는 죽은 데이터 (사후 증거, 감사)