Skip to main content

웹훅

웹훅은 스토어에서 이벤트가 발생할 때 애플리케이션에 알림을 보냅니다 — 주문 확인, 결제 완료, 재고 부족 알림 등.

설정 방법

Admin API를 통해 웹훅을 생성합니다:
응답에는 웹훅 서명을 검증하기 위한 secret이 포함됩니다. 모든 이벤트를 구독하려면 와일드카드 *를 사용하세요:

이벤트 유형

페이로드 형식

서명 검증

모든 웹훅 전송에는 X-Webhook-Signature 헤더(HMAC-SHA256)가 포함됩니다. 처리하기 전에 반드시 이를 검증하세요.

SDK 헬퍼 사용

수동 검증

SDK를 사용하지 않는 경우 직접 서명을 계산합니다:
서명 비교 시 === 대신 반드시 crypto.timingSafeEqual을 사용하세요. 문자열 동등 비교는 타이밍 공격에 취약합니다.

멱등성

HTTP 멱등성 키

멱등성 키를 사용하면 중복 리소스를 생성하지 않고 POST 요청을 안전하게 재시도할 수 있습니다. 고유한 값(UUID 권장)으로 Idempotency-Key 헤더를 포함하세요.
주요 규칙:
  • 키는 요청마다 고유해야 합니다 — UUID를 사용하세요
  • 키는 스토어(API 키) 범위로 제한됩니다
  • 캐시된 응답은 24시간 후 만료됩니다
  • 성공 응답(2xx)만 캐시됩니다
  • Idempotency-Key 헤더는 선택 사항입니다. 생략하면 요청이 정상적으로 처리됩니다

멱등적 웹훅 처리

웹훅은 재시도, 네트워크 문제 또는 인프라 장애 조치로 인해 두 번 이상 전달될 수 있습니다. 핸들러는 반드시 멱등적이어야 합니다.
중복 제거를 위한 데이터베이스 스키마:
이벤트 ID 삽입과 비즈니스 로직 수행을 원자적으로 처리하는 데이터베이스 트랜잭션을 사용하세요. 이렇게 하면 처리가 실패했을 때 이벤트가 처리된 것으로 표시되지 않아 재시도됩니다.

재시도 정책

실패한 전송은 지수 백오프로 재시도됩니다: 5회 연속 실패 후 웹훅 엔드포인트는 비활성 상태로 표시되며 대시보드에 알림이 전송됩니다.

빠른 응답 모범 사례

가능한 한 빨리 2xx 응답을 반환하세요. 핸들러가 30초 이상 걸리면 전송이 실패한 것으로 간주되어 재시도됩니다. 무거운 처리는 백그라운드 큐로 이동하세요.

이벤트 순서

이벤트는 순서가 뒤바뀌어 도착할 수 있습니다. 예를 들어, 네트워크 상태에 따라 order.paid가 order.created보다 먼저 도착할 수 있습니다.

전략: 도착 순서가 아닌 타임스탬프 사용

시스템에 아직 존재하지 않는 리소스에 대한 이벤트를 수신한 경우:
  1. 이벤트를 대기 큐에 저장합니다
  2. 선행 이벤트(예: order.created)가 도착하면 먼저 처리합니다
  3. 그런 다음 해당 리소스에 대한 대기 중인 이벤트를 재처리합니다

큐 기반 처리

프로덕션 워크로드의 경우 웹훅을 큐에 수신하고 비동기로 처리합니다.

Inngest 사용

BullMQ 사용

테스트

테스트 이벤트 전송

Admin API를 사용하여 웹훅 엔드포인트에 테스트 이벤트를 전송합니다:
또는 SDK를 사용합니다:
테스트 엔드포인트는 페이로드에 "test": true가 포함된 합성 이벤트를 전송하므로 테스트 이벤트와 실제 이벤트를 구분할 수 있습니다.

ngrok을 사용한 로컬 개발

개발 중 로컬 머신에서 웹훅을 수신하려면:
테스트가 끝나면 개발용 웹훅을 업데이트하거나 삭제하는 것을 잊지 마세요. 오래된 엔드포인트는 실패한 전송이 누적되어 자동으로 비활성화될 수 있습니다.

다음 단계

Stripe 연동

웹훅 기반 결제 확인으로 Stripe 결제를 설정합니다.

TossPayments 연동

웹훅 기반 결제 확인으로 TossPayments를 설정합니다.

레시피

일반적인 커머스 흐름을 다루는 실용적인 코드 레시피.

오류 처리

API 오류 코드 및 권장 처리 전략.