HTTP 메소드의 멱등성이란?
Categories: Network
멱등성이란?
수학에서 사용하는 용어에서 유래한 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질.
REST에서 멱등성이란?
자주 사용하는 HTTP method인 GET
, POST
, PUT
, DELETE
이 중 POST
를 제외하고는 모두 멱등성이 보장되어야 한다.
멱등성 판단 기준
- 요청의 효과를 보고 판단한다.
서버의 상태는 멱등성이 유지되어야 하는 경우, 같은 행위를 여러 번 반복하더라도 같은 효과를 가져야 하기 때문이다.
결국 멱등성이 성립하지 않는다는 것은, 여러 번 반복했을 때 다른 효과가 발생한다는 것입니다.
결론적으로 응답이 다를 수는 있지만, 요청이 의도한 효과를 발휘할 때 멱등성이 유지됨을 의미한다.(여러 번 요청을 해도 요청에 의한 서버 상태는 같음)
안전한 메소드
GET
HEAD
같이 서버의 상태 정보를 변경하지 않는 메소드이다.
주의 : 안전한 메소드와 멱등성을 지키는 메소드는 서로 의미가 다르다.
간단한 예
기본적인 GET
, POST
, PUT
, DELETE
를 하는 API가 있다고 하자.
데이터를 생성할 때는 처음으로 POST
를 사용한다.
-
POST
/data- POST 반복시 데이터는 계속해서 추가가 되며, 그 때 마다 서버의 응답은 다르며 다른효과를 지닌다.
-
GET
/data- GET은 목록을 불러온다. 여러번 수행한다고 해도 상태가 변하지도 않고, 같은 효과를 기대할 수 있다.
-
PUT
/data/3- PUT으로 3번 데이터를 수정한다고 했을 때, 3번이 존재하지 않더라도 데이터가 생성이 된다. 이미 존재한다고 하면 그 데이터는 수정이 된다. 결국
PUT
요청이 여러번 실행이 되더라도, 요청 시점에서는 3번 데이터는 항상 그 값으로 수정이 되어있는 상태일 것이다.
- PUT으로 3번 데이터를 수정한다고 했을 때, 3번이 존재하지 않더라도 데이터가 생성이 된다. 이미 존재한다고 하면 그 데이터는 수정이 된다. 결국
-
DELETE
/data/3- DELETE도 존재하던 존재하지 않던, 그 요청이 있던 시점으로부터 그 데이터는 없는것이기 때문이다.
결론
- 안전 메소드는 서버의 상태 자체를 변경하지 않는다.
- 멱등 메소드는 서버상태를 변경할 수 있고, 아닐 수도 있지만 요청에서의 에러나 지연이 없다면 서버의 상태는 항상 같다.
Leave a comment