멱등성이 무엇인지 알고계신가요? 멱등성이란, 수학에서 사용하는 용어에서 유래한 것으로. 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 뜻합니다.
이 멱등성은 왜 HTTP Method와 연관이 되는걸까요?
여기를 보시면 알 수 있습니다.
참고를 해보셨다면, 오류와 같은 상황이 발생하는 경우는 예외상황이므로 제외됨을 알 수 있습니다.
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
요청을 보낸 시점에서 사라지게 되는 것입니다. 즉, 우리가 요청한 사항은 이루어졌음을 의미합니다.
- 안전한 메소드는 서버의 상태를 아예 변경시키지 않습니다.
- 멱등한 메소드는 서버의 상태를 변경시킬 수도 있고, 시키지 않을 수도 있습니다. 다만, 우리가 요청한 사항은 에러가 나거나, 지연이 발생하지 않는 한 요청에 대한 서버의 상태는 항상 같습니다.