네트워크가 느려서 결제 버튼을 두세 번 연타했는데, 결제는 딱 한 번만 됐다. 반대로 어떤 서비스에서는 이런 실수로 같은 주문이 두 번 들어가서 골치 아팠던 적도 있을 거다.
이 차이를 만드는 게 멱등성(Idempotent) 이라는 설계다.
한 줄 정의
멱등성은 "같은 요청을 여러 번 보내도 결과가 한 번 보낸 것과 똑같은 것" 을 말한다.
왜 필요한가
인터넷은 원래 불안정하다. 버튼을 눌렀는데 응답이 안 와서 사용자가 다시 누르거나, 앱이 자동으로 재시도를 하는 경우가 항상 생긴다. 이때 요청이 중복 처리되면 결제가 두 번 나가거나 이메일이 열 통씩 발송되는 사고가 난다. 멱등성 있게 만들면 몇 번을 재시도해도 안전하다.
실전에서 이렇게
- AI한테 "결제 API 연동해줘" 라고 했을 때, 안전한 코드는 요청마다 고유한 "idempotency key" 를 같이 보내서 서버가 "이 키는 이미 처리했다" 를 기억하게 한다
- 회원가입 API를 두 번 호출해도 계정이 하나만 생기면 멱등한 것이고, 호출할 때마다 계정이 새로 생기면 멱등하지 않은 것
- "네트워크 오류 나면 자동으로 재시도하게 해줘" 라고 AI에게 시킬 거라면, 재시도해도 안전한 요청인지(멱등한지) 먼저 확인하는 게 좋다. 결제/주문 생성처럼 돈이나 데이터가 늘어나는 요청은 특히 조심해야 한다
비유
엘리베이터 버튼과 비슷하다. 이미 눌러놓은 버튼을 열 번 더 눌러도 엘리베이터가 그만큼 더 오지는 않는다. 한 번 누른 것과 결과가 똑같다. 이게 멱등한 동작이다.
#결제#로그인#에러해결
댓글 0
첫 댓글을 남겨보세요!