에러와 재시도 처리는 신뢰성 있는 RabbitMQ consumer에 중요합니다 — 메시지 처리가 실패했을 때 무엇을 할지(재시도, dead-letter, 폐기) 결정하는 것입니다. 적절한 에러 처리는 메시지 손실과 막힌 consumer를 방지합니다.
문제
consumer가 메시지 처리에 실패하면 (잘못된 데이터, 다운스트림 실패, 버그):
→ 영원히 requeue → "poison" 메시지가 queue를 막음 (끝없이 재시도)
→ 폐기 → 메시지 LOST
→ 크래시 → 재처리, 또 막힐 가능성
→ 의도적인 전략이 필요함
재시도 전략
✓ NACK + REQUEUE → reject하고 재시도를 위해 requeue (단, 재시도 제한 — 영원히 requeue 금지)
✓ 백오프(BACKOFF)와 재시도 → 일시적 실패를 점점 늘어나는 지연으로 재시도 (예: TTL을 가진
지연 retry queue → 지연 후 requeue)
✓ 재시도 제한 → 시도 횟수 추적; N번 실패 후 → DEAD LETTER (영원히 재시도 금지)
✓ 일시적(TRANSIENT, 재시도) vs 영구적(PERMANENT, 즉시 dead-letter) 실패 구분
