피드로 돌아가기
Testing Webhooks: The Pattern I Keep Reaching For
Dev.toDev.to
Backend

Inbox 패턴과 결정론적 테스트로 Webhook 검증 시간 및 의존성 제거

Testing Webhooks: The Pattern I Keep Reaching For

Rishi Gaurav2026년 6월 26일7intermediate

Context

외부 시스템의 Asynchronous 호출에 의존하는 Webhook 테스트의 불확실성 분석. ngrok와 같은 외부 터널링 도구 및 임의의 sleep 호출로 인한 CI 파이프라인의 비결정론적 동작과 테스트 지연 문제 식별.

Technical Solution

  • Reception과 Processing을 분리한 Inbox 패턴 도입을 통해 수신 단계의 책임 범위 최소화
  • HTTP Receiver가 요청 수신, 유효성 검증, Queue 삽입만 수행하도록 설계하여 테스트 격리성 확보
  • Signature Verification 단계를 독립적으로 테스트하여 페이로드 변조 및 Secret 오설정으로 인한 통합 오류 사전 차단
  • Retry Policy의 스케줄링 로직을 Injectable하게 설계하여 30분 이상의 대기 시간을 수백 밀리초 단위로 단축
  • 동일 페이로드 재전송 시의 Idempotency 검증 레이어를 추가하여 데이터 중복 생성 방지 구조 설계

- Webhook Receiver가 비즈니스 로직을 직접 실행하는지 확인하고 Queue 기반의 비동기 구조로 분리 - Happy Path 외에 Modified Payload 및 Wrong Secret 케이스를 포함한 Signature 테스트 구현 - 테스트 환경에서 Retry Interval을 강제로 단축하는 시간 주입(Time Injection) 메커니즘 적용 - 동일한 Webhook 이벤트의 중복 수신 시 DB 및 외부 알림 중복 발생 여부를 확인하는 Idempotency 테스트 수행

원문 읽기