Study/Network

[Network] HTTP 메소드 종류와 속성

jonghne 2023. 10. 18. 17:07

HTTP 메서드란 ?

HTTP 메서드란 HTTP 요청/응답에 리소스에 대해 수행해야 할 동작을 지정하는 방법으로 

리소스와 동작을 분리해서 URI는 리소스만 식별하고 수행해야할 동작은 HTTP 메서드로 확인하기 위해 사용한다. 

 

HTTP 메서드는 총 9가지가 있지만, 주로 GET / POST / PUT / PATCH / DELETE 5가지를 주로 사용한다.

 

HTTP 메서드 종류

GET

GET 메소드는 리소스를 변경하지 않고 조회 용도로만 사용한다.

 

만약 추가적인 정보를 서버에게 전달하고 싶은 경우 쿼리 스트링을 통해 전달 할 수 있다.

쿼리 스트링은 아래와 같이 키와 값 쌍으로 이루어져 있고 여러개인 경우 &(앤퍼센트)를 통해 구분한다.

GET /members?username=jonghne&age=20

 

쿼리 스트링 외에도 메시지 바디에 데이터를 넣을수도 있지만, 지원하지 않는 곳이 있기 때문에 지양하는 것이 좋다. 

 

그리고 GET 메소드를 지원하지 않는 서버에서는 조회용도의 웹브라우저 요청도 POST 메소드로 처리하는 경우가 종종 있다.

 

하지만 GET 메소드를 사용했을 때 캐싱 등의 장점이 있어서 조회 요청은 GET 메소드를, 등록 및 프로세스 처리 요청은 POST 메소드를 사용하는 것이 좋다.

 

POST

POST 메소드는 리소스를 생성하거나 특정 프로세스를 처리하기 위한 용도로 사용한다.

 

메시지 바디를 통해 신규 등록하거나 처리를 해야하는 리소스에 대한 정보를 전달한다.

 

리소스를 변경하거나 삭제하는 용도의 PUT, PATCH, DELETE 메소드가 있지만, POST로 전부 처리하도록 설계하는 곳이  종종 있다.

 

PUT

리소스를 업데이트하기 위한 메소드로 아래와 같은 특징을 가진다.

 

📌 리소스를 완전히 대체한다. (덮어씌움)

웹브라우저에서 요청한 리소스가 존재하면 대체하고, 없으면 새로 생성한다.

 

📌 POST 요청과 달리 클라이언트가 리소스를 식별한다

 

PATCH

리소스를 부분 변경하기 위한 메소드로, 특정 필드만 변경하고자 할 때 PATCH를 사용한다.

(HTTP 통신 시 PATCH를 지원하지 않는 서버가 있는데 이때는 POST를 쓰면 된다)

 

DELETE

리소스를 삭제하는 용도의 HTTP 처리 메소드이다. 

 

 

HEAD

GET 메서드와 용도가 비슷하지만 요청 시 헤더 정보를 전송하지 않고, 응답 시에도 바디를 제외한 Status-line과 헤더 정보만 받는다는 차이가 있다. 

 

HEAD 메서드는 요청에 대한 Body 값을 받지 않기 때문에 GET 메서드보다 빠르다

 

이 메서드는 요청에 대한 Resource 양만 조회하는 경우(Content-Length 헤더로 파악) 사용한다. 

 

HTTP 메소드 별 비교

GET - HEAD

GET 메서드와 HEAD 메서드는 거의 동일하다 

 

하지만 HEAD 메서드는 요청 시 헤더만 전송하고, 서버에서 Body를 리턴하지 않는다.

 

GET - POST

GET 메서드는 서버에 존재하는 리소스를 조회하기 위해 요청하는 용도로 사용되고 몇 번 요청하던 같은 결과를 응답받는 멱등성을 갖는다.

 

그에 비해 POST 메서드는 서버에 리소스를 신규로 생성하거나, 어떤 프로세스를 처리하기 위한 용도로 사용되고 멱등성을 보장하지 않는다.

 

 

PUT - PATCH

기존의 리소스가 존재할 때 PUT은 요청 메시지의 리소스로 완전히 대체하지만, PATCH는 리소스의 일부만 변경한다. 

 

만약 요청 메시지에 PUT 리소스에 대한 필드 일부를 누락한다면 , 누락된 대로 완전히 대체된다. 

 

HTTP 메소드의 속성

HTTP 메소드는 메소드 별로 아래와 같은 속성이 존재한다.

안전 (Safe Methods)

여러번 호출해도 리소스를 변경하지 않는 속성 (단 외부 요인으로 인한 변경까지는 고려하지 않는다)

 

GET, HEAD 메소드가 이에 해당된다.

 

멱등 (Idenmpotent)

한번 호출하던, 100번 호출하던 결과가 똑같은 속성 (단 외부 요인으로 인한 변경까지는 고려하지 않는다)

 

GET, PUT, DELETE 메소드가 이에 해당된다.

 

자동 복구 매커니즘과 같이 서버가 TIMEOUT 등으로 정상 응답하지 못해서 같은 요청을 다시 해야 할 때 

해당 속성이 멱등성을 보장한다

 

캐시 가능 (Cacheable)

응답 결과 리소스를 캐시해서 사용해도 되는지 여부에 대한 속성이다. 

 

GET, HEAD, POST, PATCH 가 캐시가능한 속성을 가진 메서드 이지만,

 

사실상 GET, HEAD 정도만 응답 리소스를 캐시해서 사용한다.

 

 

출처 : 김영한님, 모든 개발자를 위한 HTTP 웹 기본지식