HTTP 메서드

bolee·2022년 3월 23일
0

HTTP 기초

목록 보기
4/4

이번에는 HTTP request-line에서 사용되는 HTTP Method에 대해 알아보려고 한다.

HTTP 메서드 종류

다양한 HTTP 메서드가 존재한다.
그 중 많이 사용되는 주요 메서드와 잘 사용되지 않는 기타 메서드로 구분될 수 있다.

주요 메서드

  • GET: 리소스(resource) 조회
  • POST: 요청 데이터 처리, 주로 등록에 사용
  • PUT: 리소스를 대체, 해당 리소스가 없으면 생성
  • PATCH: 리소스 부분 변경
  • DELETE: 리소스 삭제

기타 메서드

  • HEAD: GET과 동일하지만 메세지 부분을 제외하고, 상태줄(status-line)과 헤더(header)만 반환
  • OPTIONS: 대상 리소스에 대한 통신 가능 옵션(메서드)를 설명
  • CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정
  • TRACE: 대상 리소스에 대한 경로를 따라 메세지 루프백 테스트 수행

이 중 많이 사용되는 주요 메서드에 대해 알아보려고 한다.

GET

리소스 조회를 위해 사용된다.
서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해 전달하며, 메세지 바디를 이용해 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장되지는 않는다.

아래는 리소스 조회 과정을 나타낸 것이다.

POST

요청 데이터 처리를 위해 사용된다.
요청 데이터는 메세지 바디를 통해 서버로 전달한다.
메세지 바디를 통해 들어온 데이터는 서버가 데이터를 처리하는 모든 기능을 수행한다. 주로 전달된 데이터는 신규 리소스 등록, 프로세스 처리에 사용된다.

아래는 리소스 등록 과정을 내타낸 것이다.

HTTP 관련 스펙에서는 POST 메서드는 대상 리소스가 리소스의 고유한 의미 체계에 따라 요청에 포함 된 표현을 처리하도록 요청한다고 한다.
즉, 해당 리로스 URI에 POST 요청이 오면 요청 데이터를 어떻게 처리할지 리소스마다 따로 정해야한다.(정해진 것이 없다)

PUT

PUT 메서드는 리소스를 대체하는 기능을 가지고 있다.
즉, 리소스가 있으면 대체하고 리소스가 없으면 생성한다. 다시 말해서 덮어쓰는 기능이라고 할 수 있다.

POST와 PUT의 가장 큰 차이점은 PUT의 경우 클라이언트가 리소스 위치를 알고 URI를 지정줘야 한다는 것이다.
POST의 경우 정확한 리소스 위치를 알 필요는 없지만, PUT의 경우 클라이언트가 리소스를 식별해야한다.

아래는 PUT으로 요청한 리소스가 이미 존재하는 경우를 나타낸 것이다. (리소스 대체)

아래는 PUT으로 요청한 리소스가 존재하지 않는 경우를 나타낸 것이다. (신규 리소스 생성)

PUT은 리소스를 완전히 대체하기 때문에 아래와 같은 경우가 발생할 수 있다. 따라서 PUT 사용에는 많은 주의가 필요하다.

PATCH

PATCH는 리소스를 완전히 대체하는 PUT과 다르게 리소스를 부분적으로 변경하는 기능을 가지고 있다.

아래는 PATCH를 이용해 리소스를 부분적으로 변경하는 과정을 나타낸 것이다.

DELETE

DELETE는 문자 그대로 리소스를 제거하는 기능을 가지고 있다.

아래는 DELETE 요청을 통해 리소스가 제거되는 과정을 나타낸 것이다.

HTTP 메서드의 속성

각각의 HTTP 메서드는 다른 속성들을 가지고 있는데 속성에 대한 항목은 다음과 같다.

  • 요청에 Body 존재 유/무
  • 응답에 Body 존재 유/무
  • 안전(Safe Methods)
  • 멱등(Idempotent Methods)
  • 캐시 가능 (Cacheable Methods)

이 중 생소한 안전, 멱등, 캐시 기능을 보면,

먼저 안전이라는 속성은 해당 HTTP 메서드를 이용해 호출하였을 때 리소스를 변경하지 않을 때 부여되는 속성이다.
안전 속성을 가지고 있는 메서드는 주요 메서드 중에서는 GET 하나 밖에 존재하지 않는다.

멱등몇 번을 호출하든 결과가 똑같을 때 부여되는 속성이다.
멱등 메서드에는 주요 메서드 중에서는 GET, PUT, DELETE가 있다.

  • GET: 몇 번을 조회하든 같은 결과를 조회한다.
  • PUT: 결과를 대체한다. 따라서 같은 요청을 여러번해도 최종 결과는 같다.
  • DELETE: 결과를 삭제한다. 같은 요청을 여러번해도 삭제된 결과는 같다.

또한 멱등은 외부 요인으로 중간에 리소스가 변경되는 것까지는 고려하지 않는다

마지막으로 캐시 가능응답 결과 리소스를 캐시해서 사용해도 되는지에 대한 여부에 따라 부여되는 속성이다.
캐시 가능 메서드에는 주요 메서드 중에서는 GET, HEAD, POST, PATCH가 있다.
그러나 실제로는 GET, HEAD 정도만 캐시로 사용 가능하다. 왜냐하면 POST와 PATCH의 경우 본문 내용까지 캐시 키로 고려해야 하는데, 구현이 쉽지 않기 때문이다.

참고 강의 : "김영한 강사님", 인프런 모든 개발자를 위한 HTTP 웹 기본 지식

  • 문제 발생 시 삭제 조치 하도록 하겠습니다.

0개의 댓글