HTTP 메서드는 클라이언트가 웹 서버에게 사용자 요청의 목적이나 종류를 알리는 수단이다. 최초의 HTTP 메서드는 GET메서드밖에 없었지만 이후 다양한 메서드들이 추가되었다.
☑️ 주요 메서드 5가지
☑️ 기타 메서드 4가지
보통 리소스 조회시 사용하며 서버에 전달하고 싶은 데이터는 쿼리 파라미터를 통해 전달한다. 메시지 바디를 통해 데이터를 전달할 수 있지만, GET 메서드에 메시지 바디를 통한 데이터 전송을 지원하지 않는 서버가 많아 권장되지 않는다.
[GET 메시지]
[GET 리소스 조회1 - 메시지 전달]
100번 회원
데이터 조회 요청[GET 리소스 조회2 - 응답 데이터]
데이터 요청을 처리하고 메시지 바디를 통해 서버로 요청 데이터를 전달한다. 주로 신규 리소스를 등록하거나 프로세스 처리에 사용된다.
[POST 메시지]
[POST 리소스 등록1 - 메시지 전달]
POST
방식으로 데이터를 담아 보낸다.[POST 리소스 등록2 - 신규 리소스 생성]
[POST 리소스 등록3 - 응답 데이터]
200
이나 201
응답코드를 사용한다. 자원이 생성된 경로와 데이터를 함께 보낼수 있다.리소스
URI
에POST
요청이 오면 요청 데이터를 어떻게 처리할지 따로 정해진것이 없기 때문에 리소스마다 지정해야한다.
☑️ 새 리소스 생성
☑️ 요청 데이터 처리
예) 결제완료 ➡️ 배달시작 ➡️ 배달완료 처럼 값 변경을 넘어서 프로세스의 상태가 변경되는 경우
예) POST /orders/{orderId}/start-delivery(컨트롤 URI)
☑️ 다른 메서드로 처리가 애매한경우
예) JSON으로 조회 데이터를 넘겨야하는데 GET을 사용하기 어려운경우
GET
은 캐싱이 가능하므로 되도록 조회시 GET
을 사용하자.요청한 리소스가 있을경우 대체하고 없을경우 새로 생성한다.
☑️ PUT
은 POST
와 비슷한 역할을 하는데 PUT
은 클라이언트가 리소스의 위치를 알고 URI
를 지정한다는 차이점이 있다.
PUT
: /members/100
POST
: /members/
[PUT 메시지]
[PUT - 리소스가 있는 경우1]
[PUT - 리소스가 있는 경우2]
[PUT - 리소스가 없는 경우1]
[PUT - 리소스가 없는 경우2]
[PUT - 주의! 리소스를 완전히 대체한다1]
[PUT - 주의! 리소스를 완전히 대체한다2]
PUT과 마찬가지로 리소스를 수정할때 사용하지만 PATCH는 리소스를 일부분만 변경할 수 있다.
[PATCH - 메시지]
[PATCH - 리소스 부분변경1]
[PATCH - 리소스 부분변경2]
리소스를 제거할 때 사용한다.
[DELETE - 메시지]
[PATCH - 리소스 제거1]
[PATCH - 리소스 제거1]
HTTP 메서드의 속성으로는 안전(Safe Methods), 멱등(Idempotent Methods), 캐시가능(Cacheable Methods)이 있다.
[HTTP 메서드 속성 표]
메서드를 계속해서 호출해도 리소스가 변경되지 않는다는 의미이다.
☑️ 안전은 해당 리소스 그 자체만 고려한다. 그 외의 부분으로 인해 발생하는 문제는 고려하지 않는다.
메소드를 계속해서 호출해도 같은 결과가 나오는것을 의미한다.
GET
,PUT
,DELETE
는 멱등하다고 볼 수 있으나POST
나PATCH
는 멱등하다고 할 수 없다.
☑️ GET
: 몇번을 조회하더라도 같은 결과가 조회된다.
☑️ PUT
: 결과를 대체한다. 따라서 같은 요청을 여러번해도 최종 결과는 같다.
☑️ DELETE
: 결과를 삭제한다. 같은 요청을 여러번해도 삭제된 결과는 같다.
☑️ POST
: 멱등이 아니다
☑️ 자동복구 매커니즘
☑️ 서버가 timeout
등으로 정상응답을 못해주었을 때, 클라이언트가 같은 요청을 다시 해도 되는지 판단의 근거
☑️ 재요청 중간에 다른곳에서 리소스를 변경하면 재요청 결과가 달라질 수 있지만 멱등은 이렇게 외부요인으로 인해 리소스가 변경되는것까지 고려하지 않는다.
[재요청 사이에 다른곳에서의 요청으로 리소스 변경]
- 사용자1 : GET ➡️ username : A, age:20
- 사용자2 : PUT ➡️ username : A, age:30
- 사용자1 : GET ➡️ username : A, age:30
캐시가 가능하다는 것은 캐싱을 이용해 데이터를 효율적으로 빠르게 가져올 수 있다는 것을 의미한다.
☑️ GET
, HEAD
, POST
, PATCH
가 캐시가능하다.
☑️ 실제로는 GET
과 HEAD
정도만 캐시로 사용된다.
POST
와 PATCH
는 본문내용까지 캐시 키로 고려해야하는데 구현이 어렵다.[Reference]
gparkkii.log
Catsbi's Dlog
김영한 - HTTP 웹 기본지식 강의
Mozilla
kyun2da.dev
개발왕 도던