코드 저장소

공부에는 끝이 없다!

HTTP

HTTP - HTTP 메서드의 속성

VarcharC2K 2024. 1. 11. 17:55

HTTP 메서드의 속성

HTTP 메서드는 3가지 큰 특징을 가진다.

  • 안전(Safe Methods)
  • 멱등(Idempotent Methods)
  • 캐시가능(Casheable Methods)

이번 시간에는 이런 HTTP 메서드의 속성에 대하여 알아보자.


안전

안전이라는 특징은 호출해도 리소스를 변경하지 않는것을 의미한다.

그런 점에서 GET,HEAD와 같은 메서드는 리소스를 변경하지 않으므로 안전하다고 할 수 있다.

 

단, 안전은 해당 리소스의 변경만 고려하므로 로그가 쌓여서 발생하는 장애같은 것은 고려하지 않는다.

어디까지나 리소스에 대해서만 생각해야 한다.


멱등

멱등이라는 것은 몇번을 호출하든 같은 결과를 반환하는 것을 말한다.

조금 헷갈릴 수 있는데 여기서 같은 결과를 반환한다는 것은 요청이 같을 때 메서드로 이루어진 행위의 결과가 같다는 의미이다.

멱등 메서드는 다음과 같다.

  • GET : 여러번 조회해도 조회한 결과가 변하지 않는다.
  • PUT : 결과를 대체하므로 같은 요청을 여러번 해도 생성된 최종 결과는 같다.
  • DELETE : 결과를 삭제하므로 같은 요청을 여러번 해도 삭제되었다는 결과는 같다.

그런데 POST는 멱등이 아니다!

예를 들어 POST를 이용하여 상품을 사고 금액 결제를 한다고 생각해보자.

만약 POST가 멱등 메서드 였다면 내가 요청을 2번 보내면 같은 상품에 대해 결제가 2번 이루어 질것이다.

당연히 이런식으로 로직이 진행되면 안되며 우리는 1개의 상품 구매시 1번의 결제만 이루어져야 한다.

즉, 중복을 막고 이미 결제가 되었다면 이미 결제되었다는 응답을 보내야 한다.

따라서 같은 요청을 여러번 보냈을 때의 결과과 다를 수 있으므로 POST는 멱등하지 않다!

 

이런 특징때문에 멱등은 자동 복구 메커니즘나 서버가 TIMEOUT 등으로 정상 응답을 주지 못하는 경우 클라이언트가 같은 요청을 다시 해도 되는가를 판단하는 근거로 많이 사용한다.

 

그럼 만약 여러번 요청시 중간에 다른 곳에서 리소스를 변경하는 경우는 어떻게 생각해야 할까?

예를 들어 우리가 회원정보에서 휴대폰 번호가 111-111-1111이였는데 중간에 다른 사람이 PUT을 통하여 222-2222-2222로 변경하였다고 가정해보자

이런 경우 GET이더라도 결과 값이 다르게 되므로 멱등이 아니라고 생각할 수도 있는데 멱등은 외부 요인으로 중간에 리소스가 되는 것 까지는 고려하지 않으므로 GET은 멱등이 되는 것이다.


캐시 가능

응답 결과 리소스를 캐시해서 사용해도 되는지의 여부이다.

 

만약 우리가 웹 브라우저로 큰 이미지를 요청한다고 생각해보자.

캐시가 불가능 하다면 이를 매번 다운로드 해야하니 속도가 매우 느려질 것이다.

하지만 웹브라우저가 캐시로 저장이 가능하다면 이런 다운로드 시간을 절약하여 속도를 높일 수 있을 것이다.

 

GET, HEAD, POST, PATCH가 캐시가 가능하지만 실제로는 GET, HEAD 정도만 캐시로 사용한다.

POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하는데 이를 구현하기가 쉽지 않기 때문이다.

 

'HTTP' 카테고리의 다른 글

HTTP - HTTP API 설계  (0) 2024.01.15
HTTP - HTTP 메서드 활용하기  (0) 2024.01.12
HTTP - HTTP 메서드 (2)  (0) 2024.01.11
HTTP - HTTP 메서드  (0) 2024.01.10
HTTP - HTTP 기본  (1) 2024.01.09