[HTTP강의] HTTP 메서드

2022. 5. 23. 15:27개발공부/HTTP

본 글은 인프런 김영한님 강의를 정리한 글입니다. 자세한 강의내용은 강의를 통해 들어보시길 추천드립니다.


URI 설계할 때, 리소스 중심으로 작성하기 위해선 HTTP 메서드를 활용하는 것이 중요합니다. 리소스란 김영한님 비유에 따르면 미네랄을 캐다라는 상황에서 행위가이 아닌 미네랄이란 자원에 해당됩니다.

  • (조회)
  • GET /read-member (나쁜 예)
  • GET /member/{id} (좋은 예)
  • POST /create-member (나쁜 예)
  • POST /member (좋은 예)

위 예시처럼 HTTP 메서드를 활용하면 URI 설계가 리소스 중심으로 작성될 수 있음을 알 수 있습니다.

HTTP 메서드 종류

  • GET : 요청한 데이터를 조회
  • POST : 요청 데이터를 처리, 주로 등록에 사용
  • PUT : 요청한 데이터로 존재하는 리소스를 삭제 후 대체시키거나, 없을 경우 새로 생성
  • PATCH : 리소스를 부분 변경(회원 id, name만 변경. PUT은 회원 전체가 대체됨)
  • DELETE : 요청한 데이터를 삭제
  • HEAD : GET과 동일하지만 body를 가질 수 없음(상태줄과 헤더만 가짐)
  • OPTION : CORS에서 통신이 가능한지 확인하는 용도로 사용됨

1) GET

데이터는 URI 내 query를 통해 전달됩니다. body를 사용할 수 있지만, 대다수 개발자들이 GET은 query 파라미터로만 데이터를 전달하고 있기 때문에 body는 사용하지 않는 게 좋습니다. 또한 지원하지 않는 서버(HTTP) 버전도 있을 수 있습니다.

2) POST

body로 요청데이터를 전달합니다. POST 요청을 받은 서버는 신규 데이터를 생성하는 작업을 처리하게 됩니다. 물론 조회에도 사용할 수 있지만, body를 캐시데이터 key로 사용하기엔 복잡하기 때문에 주로 신규 리소스 생성, 데이터 처리를 하게 됩니다.

3) PUT

요청받은 데이터로 존재하는 리소스를 대체합니다. 존재하지 않을 경우 새로 생성합니다. 주의할 점은, 리소스를 삭제 후 대체하기 때문에 기존에 있던 엔티티의 데이터 일부가 삭제될 수 있습니다.

4) PATCH

PUT과 유사하지만 부분적인 변경이 가능해서 엔티티가 기존에 가진 데이터를 삭제하지 않고 대체가 가능합니다. 하지만 PATCH를 지원하지 않는 HTTP 서버에선 POST를 사용해야 합니다.

5) DELETE

요청한 데이터를 삭제해줍니다.

HTTP 데이터의 속성

1) 안전

안전이란 여러번 호출해도 데이터가 변경되지 않는 속성을 말합니다. GET, HEAD만 해당됩니다.

2) 멱등(Idempotent)

연산을 여러번해도 결과가 같은 성질이 멱등입니다. GET, PUT, DELETE가 이에 해당되며 POST는 생성 뿐만아니라 요청에 대한 처리가 이루어질 수 있기 때문에 멱등에 해당되지 않습니다. 예를 들어, 결제가 중복 처리될 경우가 있습니다.

3) 캐시가능

응답결과 리소스를 캐싱해서 사용해도 되는 속성입니다. 예를 들어 이미지를 응답으로 전달할 때, 웹브라우저는 로컬 PC에 저장하는 상황을 가정해봅시다. GET, POST, PATCH, HEAD가 캐싱을 지원하지만, URI query 파라미터를 캐싱의 key로 사용하는 편이 적합하므로 GET, HEAD를 캐시가 가능한 메서드로 인지하면 될 것 같습니다.


참조: 인프런 김영한님 HTTP 강의

'개발공부 > HTTP' 카테고리의 다른 글

[HTTP강의] HTTP 캐시  (0) 2022.05.26
[HTTP강의] HTTP 헤더  (0) 2022.05.25
[HTTP강의] HTTP 상태코드  (0) 2022.05.24
[HTTP강의] HTTP 특징  (0) 2022.05.23
[HTTP강의] TCP/UDP와 URI  (0) 2022.04.21