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
출처 - https://docs.tosspayments.com/blog/what-is-idempotency
'IT지식 > Computer Science' 카테고리의 다른 글
WIFI(무선랜) 주파수 2.4GHz와 5GHz차이 그리고 대역폭 (0) | 2025.01.21 |
---|---|
TCP/IP 레이어별 네트워크 장치(L1~L7스위치, 허브, 라우터 등)의 역할 (1) | 2025.01.19 |
HTTP메서드 GET, POST의 정의 및 차이점에 대해 알아보자 (0) | 2025.01.18 |
HTTP 상태 코드(1XX~5XX)에 대해 알아보자. (0) | 2025.01.16 |
세션과 토큰을 이용한 로그인 인증 방식의 장단점 (0) | 2025.01.15 |