본문 바로가기
네트워크/HTTP

[HTTP] 메서드(method) 정리

by jeonghaemin 2021. 3. 27.
728x90

본 게시글은 김영한 님의 모든 개발자를 위한 HTTP 웹 기본 지식강의를 수강하며 정리한 내용입니다.

HTTP 메서드의 종류

주로 자주 사용되는 메서드는 GET, POST, PUT, PATCH, DELETE가 있다.

GET

  • 리소스를 조회할 때 사용.
  • 쿼리 파라미터를 통해 서버에 데이터 전달.
  • 메시지 바디를 통해서도 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많음.

POST

  • 메시지 바디를 통해 서버로 요청 데이터를 전달한다.
  • 서버는 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
  • 주로 전달된 데이터를 신규 리소스 등록, 요청 데이터 처리, 다른 메서드로 처리하기 애매한 경우에 사용한다.
  • 리소스 URI에 POST 요청이 오면 요청 데이터를 어떻게 처리해야 되는지 정해진 것이 없기 때문에, 리소스마다 어떻게 처리할지 따로 정해야 한다.
  • POST의 결과로 새로운 리소스가 생성되지 않을 수도 있다.
  • 신규 리소스 등록 시 클라이언트는 등록될 리소스의 URI를 모르고, 서버가 새로 등록된 리소스 URI를 생성해준다.
  • 컬렉션 : 서버가 관리하는 리소스 디렉토리, 서버가 리소스 URI를 생성하고 관리한다.

참고 : 신규로 리소스가 생성되면 보통 HTTP 상태 코드 201 created와 location 헤더에 리소스가 생성된 경로를 보낸다. 그냥 200으로 보내도 된다.

PUT

  • 리소스가 있으면 대체하고, 없으면 생성한다.(덮어쓰기)
  • 신규 리소스 등록 시 클라이언트가 직접 리소스의 URI를 지정한다.
  • 스토어 : 클라이언트가 관리하는 리소스 저장소, 클라이언트가 리소스의 URI를 알고 관리한다.

PATCH

  • 업데이트
  • 리소스를 부분적으로 변경한다.
  • 간혹 PATCH를 지원하지 않는 서버가 있을 수 있는데, 이 경우 POST를 사용하면 된다.

DELETE

  • 리소스를 삭제한다.
  • DELETE : 리소스 삭제

이 밖에 HEAD, OPTIONS, CONNECT, TRACE가 있다.

  • HEAD : GET과 동일하지만, 상태 줄과 헤더만 반환.(본문을 포함하지 않는다)
  • OPTIONS : 대상 리소스에 대한 통신 가능 메서드를 설명(주로 CORS에서 사용)
  • CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정.
  • TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행.

HTTP 메서드의 속성

안전(Safe)

  • 호출해도 리소스를 변경하지 않는다.

멱등(Idempotent)

  • 몇 번을 호출하든 결과가 똑같다.
  • 멱등 메서드
    • GET
    • PUT : 리소스를 대체하는 것이기 때문에, 같은 요청을 여러 번 해도 최종 결과는 같다.
    • DELETE : 리소스를 삭제하기 때문에, 같은 요청을 여러 번 해도 삭제된 결과는 같다.
  • POST는 멱등이 아니다. 주문을 예로 들었을 때, 같은 주문이 중복해서 발생할 수 있다.
  • 자동 복구 메커니즘에 활용
    • 자동 복구 메커니즘 : 서버가 TIMEOUT 등으로 정상 응답을 주지 못했을 때, 클라이언트가 같은 요청을 자동으로 다시 보낸다.

캐시 가능(Cacheable)

  • 응답 결과 리소스를 캐시해서 사용해도 되는지?
  • GET, HEAD, POST, PATCH 캐시 가능지만 실제로는 GET, HEAD 정도만 캐시로 사용한다.
  • POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하는데, 구현이 쉽지 않다.

출처 : https://ko.wikipedia.org/wiki/HTTP

참고하면 좋을 URI 설계 개념

문서(document)

  • 단일 개념(하나의 파일, 객체 인스턴스, DB row)
  • 예: /orders/100, /image/star.png

컬렉션(collection)

  • 서버가 관리하는 리소스 디렉토리
  • 서버가 리소스의 URI를 생성하고 관리한다.

스토어(store)

  • 클라이언트가 관리하는 리소스 저장소
  • 클라이언트가 리소스의 URI를 알고 관리한다.

컨트롤러(controller), 컨트롤 URI

  • 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스를 실행
  • 동사를 직접 사용한다.
  • 예: members/{id}/delete

'네트워크 > HTTP' 카테고리의 다른 글

[HTTP] 헤더 정리  (0) 2021.04.29
[HTTP] 상태 코드 정리  (0) 2021.03.29

댓글