주요 HTTP method에 대해 알아보자

1. GET

GET method는 리소스를 조회할 때 사용하는 method이다. 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달한다. 메시지 바디를 사용해서 (json 등) 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아 권장되는 방법은 아니다.

GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com

쉽게 생각해서 클라이언트가 서버에 이런 데이터를 요청해요 라는 의미로 받아들이면 좋을 것 같다. 이렇게 클라이언트가 요청을 보내는 것을 request라고 하고, 서버가 이에 해당하는 응답을 주는것을 response라고 한다.

2. POST

POST method는 사용성이 높은 method인데, 메시지 바디를 통해 서버로 요청 데이터를 전달할 때 사용된다. 그러면 서버는 클라이언트가 보낸 요청 데이터를 처리한다. 주로 전달된 데이터로 신규 리소스를 등록하거나(회원가입, 게시글 작성 등) 프로세스 처리에 사용된다. 다음 예시는 이름과 나이가 담긴 json data를 post 요청으로 넘기는 예시이다. URI가 /members 이고 POST method이니 새로운 회원을 등록하는구나 라는 합리적 추론을 쉽게 할 수 있다.

POST /members HTTP/1.1
Content-Type: application/json

{
  "username": "young",
  "age": 20
}

POST method는 새 리소스를 등록하는 것 뿐 아니라 요청 데이터와 프로세스를 처리하는 용도로도 많이 사용되는데, 이런 경우에는 POST의 결과로 새로운 리소스가 생성되지 않을 수도 있다. 다음은 특정 주문번호에 대해 배달을 시작하라는 명령을 담은 POST 요청이다.

POST /orders/{orderId}/start-delivery (컨트롤 URI)

또한 조회를 해야하는데 이를 위해 json 데이터를 넘겨야 하는 경우 GET을 사용하면 지원이 되지 않을 수 있기 때문에 이런 경우에도 POST method를 사용하면 된다. 애매하면 POST

3. PUT

PUT method는 리소스를 대체하는 것이다. 리소스가 있으면 대체하고, 리소스가 없으면 생성한다. 쉽게 이야기해서 덮어쓰기를 하는 것이다. 여기서 중요한것은 클라이언트가 리소스를 식별한다는 것이다. 이게 어떤 의미인지 다음 예시를 보며 알아보자.

PUT /members/100 HTTP/1.1
Content-Type: application/json

{
  "username": "hello",
  "age": 20
}

아까 POST 요청과의 차이점이 보인다. 바로 URI에 식별자(100)가 추가되어 있다. 이 때 100에 해당하는 리소스가 있다면 아예 데이터를 덮어쓰고, 해당 리소스가 없다면 새로 생성한다. 여기서 주의할 점은 PUT method는 리소스가 완전히 대체된다는 것인데, 다음 예시를 보자.

image

원래 서버에 저장되어 있는 데이터엔 “username”과 “age”필드가 존재하지만, PUT 요청으로 보낸 데이터엔 “age”필드만 존재한다. 이런 경우엔 결과가 어떻게 될까?

image

바로 “username”필드가 사라지는 것을 볼 수 있다. 따라서 기존 데이터가 존재한다면 새로운 요청 데이터로 완전히 대체해버리기 때문에, 조심히 사용해야 하는 method라고 볼 수 있다. 그럼 데이터를 부분 변경하고 싶으면 어떻게 해야할까? 바로 PATCH method를 사용하면 해결된다.

4. PATCH

PATCH method는 리소스를 부분 변경하기 때문에, 다음과 같이 동작한다.

PATCH /members/100 HTTP/1.1
Content-Type: application/json

{
  "age": 50
}

image

image

5. DELETE

마지막으로 DELETE method이다. 이름에서도 알 수 있듯 리소스를 제거하는 HTTP method이다.

DELETE /members/100 HTTP/1.1
Host: localhost:8080

마치며

오늘은 주요 HTTP method에 대해서 알아보았다. 대부분 다 아는 내용일 수 있으나, POST의 범용적 사용 시기 혹은 PUT과 PATCH의 차이점은 헷갈릴 수 있는 부분이니 알고 넘어가면 좋을 것 같다.

참고 링크

모든 개발자를 위한 HTTP 웹 기본 상식

댓글남기기