API Idempotency의 중요성
URL : https://www.youtube.com/watch?v=I08syTslan8
API Resiliency -> 실패 시 API가 recover 할 수 있도로 구성하는 것
클라이언트와 서버가 있고 클라이언트에서 서버에 예를 들어 create bank account라는 api를 던진다. 그래서 여러 응답(success, fail 등)을 받을 수 있는데 만약 아무 응답을 받지 않을 경우도 있다.
이럴 경우 exponential backoff를 통해 retry를 해서 어느 정도 기다리고 실패하면 또 기간을 늘려서 기다리다 retry 하는 식으로 해서 서버가 recover할 수 잇는 시간을 줄 수 잇다.
하지만 백앤드에서 문제가 있는지 서버 클라이언트 간에 네트워크 이상이였는지 알 수 없다. 또한 만약 네트워크 이슈였을 시 백앤드에서 account가 잘 생성되었는데 클라이언트에서 다시 요청을 보낼 시 계정이 중복될 수 있다.
그럴 경우 자동 retry를 해야하는데 automatic retry는 idempotent API Operation이 필요하다.
Idempotent API Operation은 요청이 재 전송되거나 retry될 시 추가 부작용이 없도록 하는 것이다.
그래서 상기의 예로 들면 은행 계좌 생성 api 받을 시 api input argument에 클라이언트 이름, ID, 유형, 조인트 어카운트 등을 받을텐데 해당 부분을 hash function을 통해 요청 토큰(uuid 등)을 발행하고 서버가 해당 토큰을 내부 db나 캐싱 서버에 던질수도 있다. 그래서 요청이 들어오면 해당 토큰을 찾고 동일하게 있을 경우 성공 응답만 클라이언트에 보낸다던지 할 수 있다.
하지만 모든 상황에 적합한 방법은 아니다. 비슷한 요청으로 2개의 계정이 필요한 경우에는 또 문제가 발생할 수 있다. 그럴 경우 오히려 클라이언트 쪽에서 요청 토큰을 생성해서 요청과 함께 보내도록 하고 해당 클라이언트 토큰이 중복이라면 중복으로 인식하고 토큰이 상이하다면 2개의 계정을 생성할 수 잇도록 할 수 있다.
하지만 이 과정에서도 이슈가 생길 수 있는데 syntactically identical response를 주는 것이 중요하다,