LabHub

시스템 간 연동 (EAI) · 오류 처리와 재처리 설계 · 실습

멱등키로 중복 수신 방어하기

LabHub 에서 이어서 보기

목표

멱등키를 설계하고 DB 제약으로 중복을 막고, 동시 실행에서도 안전하게 만들고,
저장-후-응답까지 구현해 재전송이 안전한 수신측을 만들 수 있게 됩니다.

왜 중요한가

비동기 연동과 재시도가 있는 세상에서 중복은 예외가 아니라 기본값입니다.
그런데 중복 방어를 애플리케이션의 조회 후 없으면 삽입 으로 구현하면
동시에 두 건이 들어오는 순간 뚫립니다. 조회와 삽입 사이에 틈이 있기 때문입니다.
DB 제약은 그 틈을 없애고, 애플리케이션에 버그가 있어도 뚫리지 않습니다.
그리고 한 걸음 더 나가 최초 응답을 저장해 두고 중복 요청에 그대로 돌려주면,
송신측이 타임아웃 후 마음 놓고 재전송할 수 있게 됩니다.
결제 API 들이 Idempotency-Key 를 쓰는 이유가 이것입니다.

단계

1. /root/i/idem.db (sqlite)에 inbox_log 테이블을 만듭니다.
컬럼은 msg_id, biz_key, status, response, created_at 이고,
msg_idPRIMARY KEY 또는 UNIQUE 제약이 있어야 합니다.
2. /root/i/key.md 를 작성합니다. 아래 세 가지가 본문에 있어야 합니다.

참고

단계 8개

  1. 멱등 이력 테이블
  2. 멱등키 설계 문서
  3. 적재 스크립트
  4. 일괄 적재와 중복 집계
  5. 동시 실행 방어
  6. 보관 기간 정리
  7. 저장-후-응답
  8. 중복 발생 경로 정리