Skip to content

Latest commit

 

History

History
50 lines (26 loc) · 3.29 KB

http-method-idempotent.md

File metadata and controls

50 lines (26 loc) · 3.29 KB

HTTP 메소드의 멱등성

멱등성이 무엇인지 알고계신가요? 멱등성이란, 수학에서 사용하는 용어에서 유래한 것으로. 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 뜻합니다.

이 멱등성은 왜 HTTP Method와 연관이 되는걸까요?

여기를 보시면 알 수 있습니다.

참고를 해보셨다면, 오류와 같은 상황이 발생하는 경우는 예외상황이므로 제외됨을 알 수 있습니다.

REST API

REST API에서 자주 사용하는 HTTP Method들이 있습니다. GET, POST, PUT, DELETE가 있죠.

이 중에서 POST를 제외하고는 모두 멱등성이 보장되어야 합니다.

그런데, 이 멱등성은 도대체 어떻게 이해해야 하는 것일까요?

멱등성은 무엇으로 판단할까?

멱등성은 '요청의 효과'를 보고 판단합니다.

서버의 상태는 멱등성이 유지되어야 하는경우 같은 행위를 여러 번 반복하더라도 같은 효과를 가져야 합니다.

멱등성이 성립하지 않으면, 같은 행위를 여러 번 반복하는 경우 요청마다 다른 효과가 발생된다고 생각하면 되겠죠?

즉, 이는 응답이 다를 수는 있지만, 요청이 의도한 효과를 발휘할 때 멱등성이 유지됨을 의미합니다.(여러 번 요청을 보내더라도 요청에 의한 서버의 상태는 항상 같음.)

안전한 메소드

안전한 메소드는 GET, HEAD 와 같이 서버측의 상태 정보를 변경하지 않는 메소드를 가리킵니다.

이 안전한 메소드와 멱등성을 지키는 메소드는 서로 다르니 참고하시기 바랍니다.

자, 간단한 예를 봅시다.

우리가 REST API로 간단한 GET, POST, PUT, DELETE를 하는 API를 만들었다고 가정합시다.

먼저 우리는 어떤 Data를 생성합니다. POST 요청으로 생성하겠죠. POST요청을 반복하게 된다면 데이터들은 계속해서 추가가 될 것이고, 그 때 마다 서버의 응답은 다른 응답을 나타내며, 다른 효과를 지닐 것입니다.

GET요청으로 목록을 불러옵니다. 이 행위를 여러 번 수행한다고, 서버의 상태가 변하지도 않고, 같은 효과를 기대할 수 있습니다. 따라서 멱등성과 안전한 메소드가 성립함을 알 수 있습니다.

PUT요청으로 3번째 Data를 수정한다고 합니다. 3번 데이터가 없는 경우 데이터가 생성 될 수 있습니다. 이미 존재한다면, 데이터는 수정이 됩니다. 그러면 PUT요청이 여러 번 실행되더라도 3번째 Data는 우리가 요청한 그 값이 항상 같은 상태일 것 입니다.

DELETE요청도 마찬가지입니다. 이미 존재하든, 존재하지 않든 그 데이터는 DELETE 요청을 보낸 시점에서 사라지게 되는 것입니다. 즉, 우리가 요청한 사항은 이루어졌음을 의미합니다.

요약

  • 안전한 메소드는 서버의 상태를 아예 변경시키지 않습니다.
  • 멱등한 메소드는 서버의 상태를 변경시킬 수도 있고, 시키지 않을 수도 있습니다. 다만, 우리가 요청한 사항은 에러가 나거나, 지연이 발생하지 않는 한 요청에 대한 서버의 상태는 항상 같습니다.