피드로 돌아가기
My Alert Pipeline Dropped Three Weeks of "Unknown" Emails Because a Webhook 403'd
Dev.toDev.to
Backend

HTTP Webhook의 403 Silent Failure를 Local JSONL Queue로 해결

My Alert Pipeline Dropped Three Weeks of "Unknown" Emails Because a Webhook 403'd

Atlas Whoff2026년 4월 25일6intermediate

Context

IMAP 기반 이메일 분류 파이프라인에서 저전송 대상(Unknown bucket)의 알림을 Discord Webhook으로 처리함. HTTP 403 에러 발생 시 except Exception 절에서 return False를 처리하여 실패한 메시지를 재시도 없이 유실하고 Watermark만 전진시키는 설계 결함이 존재함.

Technical Solution

  • Push 기반의 Webhook 구조를 Pull 기반의 Local File Append 구조로 전환
  • urllib 기반 HTTP 요청을 제거하고 JSONL 파일에 이벤트를 기록하는 Durable Storage 모델 채택
  • 예외 처리 범위를 좁혀 디스크 풀 등 치명적 오류 발생 시 프로세스를 즉시 중단시켜 가시성 확보
  • 1시간 단위의 별도 Cron Job을 통해 JSONL 데이터를 Digest 형태로 읽어오는 비동기 처리 구조 설계
  • 알림 시급성에 따라 'Push(실시간/고위험)'와 'Pull(지연/저위험)' 프리미티브를 분리하여 데이터 유실 가능성 차단

- 외부 API 연동 시 `except Exception`을 통한 무조건적인 False 반환 지양 - 메시지 처리 상태(Watermark) 업데이트 전 전송 성공 여부를 보장하는 DLQ(Dead Letter Queue) 검토 - 알림의 시급도에 따라 Push-based(Webhook, PagerDuty)와 Pull-based(File, DB) 아키텍처 구분 적용 - 외부 의존성이 높은 시스템일수록 Fail-fast 원칙을 적용하여 Silent Failure 방지

원문 읽기