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는 본문 내용까지 캐시 키로 고려해야 하는데, 구현이 쉽지 않다.
참고하면 좋을 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 |
댓글