IT지식/Computer Science

HTTP메서드 멱등성의 정의와 API에서 멱등성 구현법

맨땅에헤딩개발자 2025. 1. 18. 22:50

HTTP멱등성이란?

 

하나의 요청이 아닌 여러번 동일한 요청의 보냈을 때 서버가 같은 상태를 가지는 것을 멱등성이라고 합니다.

만약 HTTP의 요청이 멱등하다면, 요청이 실패한 경우 주저없이 재시도 요청을 하면 되지만

요청이 멱등하지 않다면, 리소스는 이미 처리되었는데 중복으로 요청을 보낼 수 있게됩니다.

예를들어 결제 후 처리과정에서 오류가 났을 경우 이미 결제된 건에 대해 재요청을 하게되면 문제가 될 것 입니다.

그래서 클라이언트는 멱등성을 고려하여 재시도 요청을 해야합니다.

 

HTTP메서드의 멱등여부

 

GET, PUT, DELETE처럼 리소스를 조회하거나 대체하는 메서드는 멱등합니다.

PUT은 여러 번 호출해도 매번 같은 리소스로 업데이트되기 때문에 결과가 달라지지 않습니다.

DELETE 역시 여러 번 호출해도 삭제된 리소스에 대한 결과는 달라지지 않습니다.

 

반면 서버 데이터를 변경하는 POST, PATCH는 호출할 때 마다 응답이 달라지기 때문에 멱등한 메서드가 아닙니다.

멱등하지 않은 메서드는 안정성을 보장하지 않기 때문에 서버에 요청할 때 멱등키로 안정성을 보안합니다.

서버에서 이전 요청과 동일한 멱등키가 요청이되면 이 요청을 중복으로 판단하고 실제로 처리하진않고

첫 요청과 같은 응답만 보내면 됩니다.

 

 

 

API에서 멱등성을 보장하는법

 

  • Step 1. API 서버는 취소 요청마다 헤더에 멱등키가 있는지 확인해요.
  • Step 2. 또 멱등키를 저장하기 위해 DB를 만들어둬요. 멱등키가 포함된 취소 요청이 들어왔을 때 이 DB를 쿼리 해서 요청이 들어온 멱등키와 매칭되는 요청 기록이 있는지 확인해요.
    • 멱등한 요청 기록을 DB에 저장하는 기간을 정해둘 수 있어요. 그 기간이 지나면 DB에 저장된 멱등키와 기록이 없기 때문에 같은 멱등키를 사용해서 새로운 요청을 보낼 수 있어요. 사용하는 입장에서는 멱등키의 유효 기간이라고 할 수 있죠.
  • Step 3-1. 만약 이전에 같은 멱등키로 들어온 요청이 있었다면, 서버에서 실제 요청을 실행하지 않고 저장되어 있던 응답 데이터를 돌려줘요.
  • Step 3-2. 만약 멱등키와 매칭되는 이전 기록이 없다면, 새로 생성된 응답을 저장하는 새로운 기록을 만들고 응답을 클라이언트에 돌려줘요.

도메인 서버 로직의 복잡도가 높다면 멱등성 로직을 추가했을 때 API 성능 개선에 도움이 되기도 해요. 멱등키를 가진 요청은 도메인 서버로 바로 처리되지 않기 때문이에요.

 

 

 

 

 

 

 

 

 

출처 - https://mangkyu.tistory.com/251

 

[HTTP] HTTP 메소드의 멱등성(Idempotence)과 Delete 메소드가 멱등한 이유

HTTP 메소드의 속성으로 안전, 멱등, 캐시가능이 있는데, 이번에는 그 중에서 멱등이 무엇이고 Patch가 멱등하지 않은 이유와 Delete가 멱등한 이유에 대해서 살펴보도록 하겠습니다. 1. HTTP 메소드의

mangkyu.tistory.com

출처 - https://docs.tosspayments.com/blog/what-is-idempotency

 

멱등성이 뭔가요? | 토스페이먼츠 개발자센터

생소한 표현이지만 알고 보면 쉬워요. 멱등성에 대해 이해하고 API를 멱등하게 제공하기 위한 방법도 함께 알아봐요.

docs.tosspayments.com