http POST 메소드에서 DELETE, PUT 사용해도 될까?, 멱등성이란?

Onam Kwon·2023년 2월 20일
0

CS

목록 보기
19/22

http POST 메소드에서 DELETE, PUT 사용해도 될까?

http 멱등성(idempotency)

  • 멱등성이란 연산을 여러번 적용해도 결과는 한번 적용했을때와 같은 성질을 말한다.
    • 대표적인 예로 절댓값이 존재한다.
      • 절댓값 -3은 절댓값-3의 절댓값과 같은 값을 가진다. => |-3| == ||-3||
      • 절댓값연산을 한번 이상 적용해도 한번 적용한 값과 항상 같다.

안전한 메소드

  • 안전한 메소드란 서버의 상태를 변화시키지 않는 메소드를 말한다.
  • GET HEAD OPTIONS 와 같이 조회에 사용되는 메소드가 이에 해당한다.
  • 모든 안전한 메소드는 멱등성을 만족하지만, 이 역은 성립하지 않는다.

REST

  • http POST 메소드에서 POST에 관한 요청이나 DELETE에 관한 요청을 수행해도 사실 문제없이 작동한다.
  • REST에서 자주 등장하는 4가지 메소드가 있으며 이는 GET POST PUT DELETE가 존재한다.
    • 이중에서 POST를 제외한 나머지는 멱등성 (idempotency)이 보장되어야 한다.
      • GET: GET요청은 DB를 읽을때 사용하며 이를 반복해서 실행해도 서버의 상태가 변하지 않는다. 따라서 결과가 달라지지도 않으며, 이는 멱등성을 보장하며 또한 안전한 메소드이다.
      • PUT: PUT요청을 반복해서 실행하면 처음 한번을 제외하고는 나머지는 항상 같은 결과가 나온다. 이는 멱등성을 보장하지만 안전한 메소드는 아니다.
      • DELETE: DELETE요청도 마찬가지로 해당 데이터가 존재 하거나 하지 않거나 두가지 경우 모두 처음을 제외하고 나머지 반복은 항상 같은 결과가 나타난다. 이는 멱등성을 보장하지만 안전한 메소드는 아니다.
      • POST: POST요청을 반복해서 실행한다면 데이터들은 반복해서 추가된다(같은 내용이지만 다른 데이터). 이는 멱등성을 보장하지 않으며 또한 안전한 메소드도 아니다.
  • POST 메소드를 통해 어떠한 정보를 수정한다고 가정해보자.
    • POST 메소드는 멱등성을 만족하지 않으므로, 해당 메소드를 반복해서 수행한한다면 다른 결과를 초래할 수 있다.
      • 예를들어 위의 요청이 시간초과로 인해 문제가 발생했다면 해당 정보는 실제로 수정 되었는가? 아니라면, 이 문제는 해당 요청을 서버로 보낼때 발생했는가? 클라이언트로 응답할때 발생했는가? 같은 요청을 재수행해도 DB는 안전한가? 등등 많은 질문이 생길수 있다.
    • 하지만 멱등성을 만족하는 메소드를 사용함으로 인해, 우리는 위 질문들에 대한 답변을 하지 않아도 되며 안전하게 요청을 재시작해 올바른 응답을 받을 수 있다.
  • 따라서, 위와 같은 문제들을 고민하지 않기 위해 멱등성을 따르는 메소드를 사용하며 더 안전하게 RESTful한 코드를 완성시킬 수 있다.

References

profile
권오남 / Onam Kwon

0개의 댓글