Dead Letter Queue

Architecture

Posted by Yan on August 31, 2024

DLQ(Dead Letter Queue)란?

애플리케이션이 메시지를 처리하는 과정에서 예상치 못한 문제가 발생할 수 있다. 메시지가 특정 조건을 만족하지 않거나, 여러 번의 재시도에도 불구하고 성공적으로 처리되지 않는 경우, 이러한 메시지는 어떻게 처리해야 할까? 이때 사용되는 것이 바로 Dead Letter Queue(DLQ)이다.

DLQ의 개념

Dead Letter Queue는 메시징 시스템에서 처리되지 않은 메시지를 별도로 보관하는 큐다. 메시지 브로커가 설정한 규칙에 따라 처리할 수 없거나 실패한 메시지를 이 큐에 보낸다. 이를 통해 실패한 메시지를 다른 메시지와 분리하여 관리할 수 있다.

DLQ는 주로 다음과 같은 상황에서 사용된다:

  1. 메시지 형식 오류: 메시지가 예상된 형식이 아니거나, 필요한 필드가 누락된 경우.
  2. 처리 제한 초과: 메시지가 여러 번 처리 시도 후에도 실패한 경우.
  3. 메시지 유효 기간 초과: 메시지가 지정된 시간 내에 처리되지 않은 경우.

DLQ의 장점

DLQ를 사용하면 실패한 메시지를 안전하게 보관하고, 이를 분석하여 문제를 진단할 수 있다. 또한, 주 애플리케이션의 흐름에 지장을 주지 않고 문제 메시지를 격리할 수 있어 시스템 안정성을 높인다.

  1. 문제 진단: DLQ에 저장된 메시지를 분석함으로써, 왜 특정 메시지가 실패했는지 파악할 수 있다. 이를 통해 버그를 수정하거나 시스템의 처리 로직을 개선할 수 있다.
  2. 재처리 가능: DLQ에 쌓인 메시지는 나중에 별도로 처리하거나 재시도할 수 있다. 이로 인해 메시지를 완전히 잃어버리는 것을 방지할 수 있다.
  3. 시스템 안정성: 처리 실패한 메시지가 주 애플리케이션의 메시지 큐를 가득 채우는 것을 방지하여, 전체 시스템의 성능 저하를 막을 수 있다.

DLQ 설정 시 고려사항

DLQ를 설정할 때는 몇 가지 중요한 사항을 고려해야 한다.

  1. 재시도 횟수: 메시지가 몇 번의 재시도 후 DLQ로 보내질지 결정해야 한다. 너무 많은 재시도는 시스템 자원을 낭비할 수 있고, 너무 적은 재시도는 메시지가 불필요하게 DLQ로 이동할 수 있다.
  2. 모니터링 및 알림: DLQ에 메시지가 쌓이는 상황은 곧 시스템의 문제를 의미할 수 있다. 따라서 DLQ를 모니터링하고, 일정 기준을 초과할 경우 알림을 설정하여 신속하게 대응할 수 있도록 해야 한다.
  3. 메시지 처리 전략: DLQ에 쌓인 메시지를 어떻게 처리할지에 대한 전략을 사전에 수립해야 한다. 재처리, 삭제, 로그 분석 등 다양한 방법을 고려할 수 있다.

DLQ와 Rate Limiting

Rate Limiting에 따른 요청 실패 처리:

  • 만약 애플리케이션이 외부 API에 요청을 보내고, 해당 API가 Rate Limiting에 의해 요청을 거부하는 경우가 있다. 이때, 요청 실패가 발생할 수 있으며, 이를 적절히 처리하지 않으면 시스템의 문제로 이어질 수 있다.
  • 만약 요청이 여러 번 재시도된 후에도 API가 요청을 수락하지 않으면, 이 실패한 요청을 DLQ로 보내는 방식을 고려할 수 있다. 이를 통해 Rate Limiting에 의해 실패한 요청을 나중에 분석하고 재처리할 수 있다.

Rate Limiting에 따른 재시도 전략:

  • API Rate Limiting이 적용된 시스템에서, 애플리케이션이 요청을 보낼 때 Rate Limiting에 걸리면 일정 시간 후 재시도를 하게 된다. 이러한 재시도는 여러 번 실패할 수 있고, 최종적으로 이 요청이 더 이상 처리될 수 없다고 판단될 경우 DLQ에 보내질 수 있다.
  • 예를 들어, 특정 API에 대한 요청이 지속적으로 Rate Limiting에 걸린다면, 이 메시지를 DLQ로 이동시키고, 시스템 운영자는 이를 분석하여 Rate Limiting의 원인을 파악하거나, 요청 간격을 조정하는 등의 조치를 취할 수 있다.

결론

Dead Letter Queue는 메시징 시스템에서 발생할 수 있는 오류를 효과적으로 관리할 수 있는 강력한 도구다. 이를 통해 시스템의 안정성을 높이고, 문제 발생 시 빠르게 대응할 수 있는 유연성을 제공한다. DLQ를 올바르게 설정하고 관리하면, 메시징 애플리케이션의 전반적인 품질과 신뢰성을 크게 향상시킬 수 있다. DLQ를 통해 장애 상황에서도 데이터 손실을 최소화하고, 지속적인 서비스 운영이 가능하게 된다.

reference

DLQ(Dead Letter Queue)란 무엇인가요?