피드로 돌아가기
Handling Duplicate Shopify Webhook Events (And Why You Must)
Dev.toDev.to
Backend

At-least-once Delivery 대응을 위한 3중 Idempotency 계층 설계

Handling Duplicate Shopify Webhook Events (And Why You Must)

Muhammad Masad Ashraf2026년 5월 25일3intermediate

Context

Shopify Webhook의 At-least-once Delivery 특성으로 인한 중복 이벤트 수신 가능성 존재. 5초 이내 응답 미달 시 최대 19회 재시도되는 메커니즘으로 인해 결제 중복 처리 및 재고 데이터 불일치 리스크 발생.

Technical Solution

  • 빠른 응답을 통한 Retry 방지를 위해 Webhook Handler와 실제 처리 로직을 분리한 Async Queue 구조 도입
  • 재시도 시 변경되는 Header 값 대신 Payload 내 Resource ID를 활용한 고유 Dedup Key 생성
  • 처리 속도 최적화를 위해 Redis 기반의 1차 중복 검증 및 24시간 TTL 설정
  • Redis 장애 상황에 대비하여 DB Unique Constraint와 ON CONFLICT DO NOTHING을 활용한 원자적(Atomic) 2차 방어선 구축
  • 최종 안전장치로 상대적 증감 연산 대신 절대값 업데이트 방식을 적용한 Idempotent Logic 구현

1. Webhook 수신 즉시 200 OK 응답 후 Queue 기반 비동기 처리 여부 확인

2. Dedup Key 생성 시 가변적인 Header가 아닌 비즈니스 고유 식별자 사용 여부 검토

3. Redis(속도)와 DB Unique Key(정확성)를 조합한 다중 필터링 계층 적용

4. 데이터 업데이트 시 증감 연산(Increment/Decrement) 대신 절대값 할당 방식 채택

원문 읽기