APIMedium#429
API에서 Idempotency Key는 왜 필요하며 어떻게 동작하나요?
#API#Idempotency#결제#재시도
답변 포인트
결제 요청이 네트워크 오류로 재시도될 때 중복 처리되면 어떤 문제가 생길지 생각해보세요.
정답 및 해설
빠른 요약
Idempotency Key는 같은 요청이 여러 번 도착해도 서버가 한 번만 처리하도록 돕는 식별자입니다. 결제, 주문 생성, 포인트 적립처럼 중복 실행되면 치명적인 API에서 특히 중요합니다.
Idempotency Key는 같은 요청이 여러 번 도착해도 서버가 한 번만 처리하도록 돕는 식별자입니다. 결제, 주문 생성, 포인트 적립처럼 중복 실행되면 치명적인 API에서 특히 중요합니다.
클라이언트는 요청마다 고유한 key를 생성해 헤더로 보냅니다. 서버는 이 key와 요청 정보를 저장하고, 같은 key가 다시 오면 작업을 새로 수행하지 않고 이전 결과를 반환합니다.
HTTP
POST /payments
Idempotency-Key: 9f82b7a4-7f2e-4c2d-9a74
Content-Type: application/json동작 흐름은 보통 이렇습니다.
- 처음 받은 key면 요청을 처리하고 결과를 저장합니다.
- 같은 key가 다시 오면 저장된 응답을 반환합니다.
- 같은 key인데 요청 본문이 다르면 충돌로 보고 에러 처리합니다.
- key 저장 기간을 정해 오래된 기록은 정리합니다.
핵심은 네트워크 실패와 서버 처리 실패를 구분하기 어렵다는 현실입니다. 클라이언트 입장에서는 타임아웃이 났지만 서버에서는 결제가 성공했을 수 있습니다. Idempotency Key는 안전한 재시도를 가능하게 만들어 사용자 경험과 데이터 정합성을 함께 지켜줍니다.