피드로 돌아가기
Dev.toBackend
원문 읽기
At-least-once Delivery 대응을 위한 3중 Idempotency 계층 설계
Handling Duplicate Shopify Webhook Events (And Why You Must)
AI 요약
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) 대신 절대값 할당 방식 채택