Idempotency는 어떤 연산을 여러 번 수행해도 한 번 수행한 것과 같은 효과를 낸다는 뜻이다. 네트워크가 신뢰할 수 없기 때문에 중요하다: client가 request를 보냈는데 response가 도착하지 않으면, server가 그것을 처리했는지 알 수 없다. retry하면, idempotent하지 않은 연산은 두 번 실행될 수 있다.
문제
Client ──POST /payments {$100}──▶ Server (charges $100 ✓)
Client ◀────────X (timeout)────── Server (response lost)
Client ──POST /payments {$100}──▶ Server (charges $100 AGAIN ✗ → $200!)
, , 는 본래 idempotent해서 retry가 안전하다. 는 — 바로 여기서 이중 청구와 중복 주문이 나온다.
