개발일지

CS in A..Z - HTTP Method 본문

Computer Science

CS in A..Z - HTTP Method

강태종 2021. 10. 6. 11:30

HTTP Method

HTTP Method는 HTTP 통신할 때 사용하는 방법이라고 생각하면 된다. Method 종류는 GET, POST, HEAD, PUT, DELETE, OPTION, TRACE 등이 있으며 각 방법마다 특징과 용도가 다르다. GET과 POST만 사용하는 API 서버들도 많지만 Method의 의미를 파악하여 용도에 맞게 사용하는 것이 효율적이다.

 

* HTTP 버전과 Spec에 따라 지원하는 Method 종류, Method 특징등이 다릅니다. 참고하시기 바랍니다.

ex) HTTP 0.9에선 GET Method만 존재, RFC2616은 GET은 Body의 정보를 무시해야 한다고 나왔지만 RFC 7230 이후 해당 구문이 제거됐다.

 

Safe - Method

Content를 수정하지 않는 메소드를 뜻한다. GET, HEAD, OPTION등 오직 조회만 하는 Method를 Safe - Method라고 표현하고, POST, PUT, DELETE, PATCH같은 메소드를 Safe하지 않는다고 표현한다. Safe-Method는 항상 멱등성을 가진다.

 

멱등성(Idempotent)

같은 요청에 대해 항상 같은 결과값을 도출하는 특징이다. GET, PUT 같은 Method를 멱등성이 있다고 표현한다.


GET

일반적으로 데이터를 불러올 때 사용한다. Parameter를 URL에 포함시켜 보내는 특징이 있다. 그렇기 때문에 브라우저의 기록에 남고, Bookmark 기능을 사용할 수 있다.

 

* Body에 Parameter를 작성할 수는 있지만, 어떠한 Spec을 사용하는지 주의해야 한다. Spec에 따라 Body를 무시할 수 있고, Body에 값이 있는 경우 Exception이 발생할 수 있고, Body를 허용하는 Spec도 존재한다. 일반적으로 Body를 사용하지 않는다.

 

  • Safe-Method이다.
  • 멱등성이 있다.
  • 캐쉬가 가능하다.

POST

일반적으로 데이터를 생성하거나 업데이트할 때 사용된다. GET과 다르게 Parameter를 Body에 담아서 보낸다.

 

* 캐쉬 사용이 일반적으로 불가능 하지만, Header를 통해 Cache를 사용할 수 있다. 하지만 캐쉬를 사용할 때 Body를 보지 않고 Header를 통해 캐쉬를 사용하는 경우가 있다. Body의 내용이 다른 경우 캐쉬를 사용하면 잘못된 결과 값을 초래할 수 있다.

 

  • Safe-Method가 아니다. (데이터를 생성하거나 업데이트할 수 있기 때문에)
  • 멱등성이 없다.
  • 캐쉬를 사용하지 않는다.

PUT

일반적으로 데이터를 생성하거나 업데이트할 때 사용된다. POST와 다르게 특정 주소에 대해 데이터를 생성하거나 업데이트하며 멱등성이 보장된다.

 

  • Safe-Method가 아니다.
  • 멱등성이 있다.
  • 캐쉬를 사용하지 않는다.

DELETE

일반적으로 데이터를 삭제할 때 사용된다. 사용자가 민감한 데이터를 삭제할 수 있기 때문에 자주 사용되지 않는다.

 

* 만약 첫번째 응답에서 2XX 코드를 받는다면 그 후로 404 코드를 받을 것 입니다. 그럼에도 멱동성이 있다고 하는 이유는 2XX을 받은 시점에 해당 데이터가 없고, 그 후에 404 코드를 받은 경우에도 해당 데이터는 없기 때문에 멱등성이 있다고 표현합니다.

 

  • Safe-Method가 아니다.
  • 멱등성이 있다.
  • 캐쉬를 사용하지 않는다.

HEAD

일반적으로 데이터를 조회할 때 사용됩니다. GET과 다른 점은 응답값에 Body가 없다는 점입니다. 주로 Body가 긴(파일일 경우 사이즈가 큰) 데이터를 사용가능한지, 크기가 몇인지 미리 알기위해 Head로 조회할 때 사용합니다.

 

  • Safe-Method이다.
  • 멱등성이 있다.
  • 캐쉬를 사용한다.

PATCH

일반적으로 특정 자원의 특정 부분을 수정합니다. PUT과 다른 점은 새로운 데이터를 생성하지 않고 전체 데이터 수정이 아닌 특정 부분만 수정합니다.

 

* 만약 PATCH Method로 name을 수정하는 쿼리( ex) { "name", "taetae" } )를 작성할 경우 항상 name이 taetae로 바뀌기 때문에 멱등성이 보장되지만, 나이를 증가하는 쿼리를 작성할 경우 1, 2, 3, 4 .... 계속 값이 증가되기 때문에 멱등성을 보장하지 않습니다.

  • Safe-Method가 아니다.
  • 멱등성이 없다.
  • 캐쉬를 사용하지 않는다.

OPTIONS

해당 URL에 가능한 Method가 무엇인지 확인할 수 있습니다.


GET vs POST

 

1. Cache

GET은 Cache를 사용할 수 있지만, POST는 불가합니다. POST 경우 Header를 통해 Cache를 사용한다 하더라도, Cache Hit를 보통 헤더값으로 하기 때문에 올바른 결과값을 보장할 수 없습니다.

 

2. Back Button

GET은 데이터를 조회하는 Method이기 때문에 위험하지 않지만, POST인 경우 서버에 데이터 생성,수정 코드를 다시 보낼 수 있기 때문에 위험합니다.

 

3. History

GET은 URL에 Parameter를 보내기 때문에 브라우저 Histroy에 그대로 저장되고 북마크 기능을 사용할 수 있습니다. 하지만 POST는 Body에 포함되서 보내기 때문에 History에 남지 않고, 북마크 기능을 사용할 수 없습니다.

 

4. Data Length

URL특성상 길이에 제한이 있기 때문에 GET으로 Parameter를 보낼 때 한계가 있습니다. 하지만 HTTP Body는 제한이 없기 때문에 POST로 보낼 때 제한이 없습니다.


GET vs HEAD

가장 큰 차이점은 Response Body의 유무입니다. HEAD Method는 Response Body가 없기 때문에 좀 더 속도가 빠릅니다. 주로 GET Method를 사용하기 전에 HEAD에 포함된 정보를 얻을 때 사용합니다.


POST vs PUT

가장 큰 차이점은 POST는 데이터를 생성할 때 특정 주소나 특정 데이터를 정의하지 않기 때문에 서버 내에서 데이터를 임의로 생성합니다. 그렇기 때문에 멱등성이 보장되지 않습니다.

하지만 PUT은 특정 데이터를 정의하여 수정/삭제를 진행하기 때문에 멱등성이 보장됩니다.


PUT vs PATCH

가장 큰 차이점은 PUT은 데이터 전체를 바꾸지만 PATCH는 특정 부분만 바꿉니다. 그렇기 때문에 PUT은 멱등성이 보장되지만 PATCH는 멱등성이 보장되지 않습니다.

'Computer Science' 카테고리의 다른 글

CS in A..Z - 함수형 프로그래밍  (0) 2021.10.12
CS in A..Z - REST API  (0) 2021.10.12
CS in A..Z - HTTP Response Code  (0) 2021.10.06
Comments