요점 정리 : 금융 관련 결제 같은 요청들은 멱등성이 보장되는 메서드들 꼭꼭 사용하기
HTTP 메소드의 속성 중에 하나인 멱등성은 여러 번 동일한 요청을 보냈을 때, 서버에 미치는 의도된 영향이 동일할 경우를 말한다. 예를 들어 Safe 요청인 GET, HEAD등과 함께 PUT, DELETE를 멱등한 HTTP 메소드라고 정의한다. DELETE는 요청 한번 보냈을 때 DELETE -> 200 OK
응답 값이 오고 동일한 요청을 보낼 경우 에러 DELETE-> 404 NOT FOUND
를 받지만 멱등성의 기준은 요청 응답 기준이 아닌 서버 기준임을 명시하자. PATCH 또한 리소스를 수정할 경우 기존 리소스에 응답을 추가하는 경우에도 사용될 수 있는데 이때, 호출 결과가 달라질 수 있으므로 멱등하다 할 수 없다.
멱등한 메소드는 서버 상태를 변경하지 않고 리소스에 대한 정보를 요청하는 데 사용될 수 있다. 이는 해당 요청이 오류 또는 부작용을 발생시키지 않고 여러 번 호출될 수 있음을 의미한다. 예를 들어, HTTP의 GET 메소드는 멱등성을 가지고 있다.
멱등한 메소드를 사용하면 캐싱이 더욱 효과적으로 이루어질 수 있다. 동일한 요청에 대한 응답은 항상 동일하므로 캐시된 응답을 재사용할 수 있다.
멱등한 메소드는 여러 클라이언트에서 동시에 호출되더라도 예상된 결과를 얻을 수 있습니다. 이는 분산 환경에서 병행 처리를 쉽게 만들어주며, 시스템이 실패하거나 중단되더라도 안전하게 복구할 수 있도록 한다.
멱등한 메소드를 사용하면 사용자 경험이 향상될 수 있다. 사용자가 "새로 고침" 버튼을 누르거나 다시 시도 버튼을 클릭하여 동일한 요청을 여러 번 시도해도 예상된 동일한 결과를 받을 수 있다.
멱등한 메소드를 사용하면 네트워크 문제로 인해 요청이 중단되었을 때 다시 시도하는 것이 더 쉽다. 동일한 요청을 여러 번 시도해도 동일한 결과를 얻을 수 있기 때문이다.
결제 시스템에서 멱등성은 중요한 개념이다. 결제는 금전적인 거래이기 때문에 중복 결제나 잘못된 금액의 결제 등을 방지하기 위해 멱등성이 필요하다.
#결제 요청 예시
http
Copy code
POST /payments
Content-Type: application/json
{
"amount": 50.00,
"card_number": "1234-5678-9012-3456",
"expiry_date": "12/24",
"cvv": "123",
"order_id": "abc123"
}
해당 결제 요청이 여러 번 수행되더라도 동일한 order_id에 대한 결제는 한 번만 이루어진다. 이는 멱등성을 통해 중복 결제를 방지하고 시스템의 안정성을 높이는 데 도움된다.
transaction_id
에 대한 이체가 한 번만 이루어지게 해둘 수 있다.멱등성은 금융 거래와 같은 중요한 작업에서 특히 중요한 역할을 한다.
간단하게 차이점을 얘기하면 GET은 정보의 요청, POST는 정보의 제출로 볼 수 있다.
RESTful API를 설계할 때는 각 메소드의 의도에 맞게 사용해야 한다.
리소스의 조회는 GET, 생성은 POST와 같이 목적에 따라 메소드를 사용한다.