HTTP 메소드의 멱등성이란?

Date:     Updated:

Categories:

Tags: , , ,

멱등성이란?

수학에서 사용하는 용어에서 유래한 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질.

REST에서 멱등성이란?

자주 사용하는 HTTP method인 GET, POST, PUT, DELETE
이 중 POST를 제외하고는 모두 멱등성이 보장되어야 한다.

멱등성 판단 기준

  • 요청의 효과를 보고 판단한다.

서버의 상태는 멱등성이 유지되어야 하는 경우, 같은 행위를 여러 번 반복하더라도 같은 효과를 가져야 하기 때문이다.
결국 멱등성이 성립하지 않는다는 것은, 여러 번 반복했을 때 다른 효과가 발생한다는 것입니다.

결론적으로 응답이 다를 수는 있지만, 요청이 의도한 효과를 발휘할 때 멱등성이 유지됨을 의미한다.(여러 번 요청을 해도 요청에 의한 서버 상태는 같음)

안전한 메소드

GET HEAD 같이 서버의 상태 정보를 변경하지 않는 메소드이다.
주의 : 안전한 메소드와 멱등성을 지키는 메소드는 서로 의미가 다르다.

간단한 예

기본적인 GET, POST, PUT, DELETE를 하는 API가 있다고 하자.
데이터를 생성할 때는 처음으로 POST를 사용한다.

  1. POST /data

    • POST 반복시 데이터는 계속해서 추가가 되며, 그 때 마다 서버의 응답은 다르며 다른효과를 지닌다.
  2. GET /data

    • GET은 목록을 불러온다. 여러번 수행한다고 해도 상태가 변하지도 않고, 같은 효과를 기대할 수 있다.
  3. PUT /data/3

    • PUT으로 3번 데이터를 수정한다고 했을 때, 3번이 존재하지 않더라도 데이터가 생성이 된다. 이미 존재한다고 하면 그 데이터는 수정이 된다. 결국 PUT요청이 여러번 실행이 되더라도, 요청 시점에서는 3번 데이터는 항상 그 값으로 수정이 되어있는 상태일 것이다.
  4. DELETE /data/3

    • DELETE도 존재하던 존재하지 않던, 그 요청이 있던 시점으로부터 그 데이터는 없는것이기 때문이다.

결론

  • 안전 메소드는 서버의 상태 자체를 변경하지 않는다.
  • 멱등 메소드는 서버상태를 변경할 수 있고, 아닐 수도 있지만 요청에서의 에러나 지연이 없다면 서버의 상태는 항상 같다.

Leave a comment