Idempotency — Two Clicks, One Charge
A validly signed webhook arrived twice: review
한국어 원문으로 표시합니다.
서명은 파싱한 JSON 대신 무엇에 대해 계산하나?
- 정해진 타임스탬프와 원본 본문 바이트
- dict의 str 표현
- 응답 상태 코드
- 이벤트 id만
유효한 서명만으로 오래된 재전송을 막을 수 있나?
- 항상 완전히 막음
- 아니며 시간과 중복 기록도 필요
- JSON 정렬만 하면 됨
- HTTPS면 기록 불필요
허용 범위를 넘는 미래 시각은?
- 무조건 최신으로 인정
- 과거로 변환
- 거절한다
- 서명 검사 생략
효과 반영 중 장애가 나면 inbox 기록은?
- 먼저 성공으로 확정
- 상관없이 남김
- id만 변경
- 효과와 함께 롤백
같은 이벤트 id에 다른 본문이 오면?
- 충돌로 거절
- 정상 중복으로 무시
- 기존 합계에 다시 가산
- 기존 본문 덮어쓰기
업무 효과가 한 번인지 가장 직접적인 증거는?
- 로그 줄 수만
- 별도 연결로 읽은 저장 합계
- 핸들러 이름
- HTTP 요청 수만