- HTTP Method 란 클라이언트-서버 구조에서 요청(req)과 응답(res)이 이루어지는 방식을 의미한다. 서버가 수행해야 할 동작을 지정하여 요청(req)을 보내는 방법
- 즉 리소스와 동작을 분리하기 위해 HTTP 메서드를 사용하는 것이라고 할 수 있다.
HTTP는 다양한 메서드를 정의하고 있다. 적절한 목적에 사용할 수 있도록 각각의 메서드의 특징과 주로 사용되는 상황을 정리해 보자. 메서드는 일종의 약속이라고 할 수 있다. 메서드 그 자체가 기능을 제공하는 것이 아니며, 메서드 이름에 알맞는 내용으로 서버에서 코드를 구현해야 한다.
GET /http://localhost:3000/sign
GET 메서드는 주로 리소스의 조회를 위해 사용한다. 서버에 전달하고 싶은 데이터가 있다면 query(쿼리 파라미터, 쿼리 스트링)에 아래 사진 처럼 담아 보낸다. 서버는 타겟 리소스에 해당하는 representation data를 응답 데이터로 보낸다.
- GET 메서드도 POST 메서드와 같이 데이터를 담을 수 있는 메시지 body가 존재한다. 하지만, GET 메서드의 메시지 바디를 확인하지 않는 서버가 대부분임으로 거의 사용하지 않는다. 왜나하면 GET은 리소스를 요청하기 위해 만들어 졌고, URL의 URI가 자원이 위치한 곳을 나타내기 떄문에 바디에 데이터를 실어야 하는 상황은 거의 없다. 따라서, 일반적인 서버에서는 GET 요청의 메시지 바디를 확인하지 않는다.
POST http://localhost:3000/FutsalGame/SignUp
POST /members HTTP/1.1
Content-Type: application/json
{
"username": "johnDoe",
"age": 30
}
POST 메서드는 요청 데이터의 처리를 목적으로 사용된다. 메시지 body를 통해 서버로 요청 데이터를 전달하면, 서버는 정해진 로직에 따라 요청 데이터를 처리한다. POST 메서드를 사용한다고 특정한 로직이 자동으로 실행되는 것은 아니다. 리소스마다 POST 요청이 오면 어떻게 데이터를 처리할지 로직을 구현해야 한다. POST 매서드는 대상 리소스에 정의된 로직에 따라 고유한 기능을 수행한다. 주로, 전달된 데이터를 이용하여 신규 리소스를 등록하거나 프로세스를 처리한다.
- POST로 조회가 가능하긴 하나, 해당 메서드는 멱등성을 지나지 않으므로, POST메서드를 여러 번 수행할 경우 같은 결과값이 나오는 것을 보장하지 않는다. 참고로 GET메서드는 캐싱을 이용하므로, 조회속도 또한 POST메서드에 비해 우수하다.
- POST 메서드는 아래와 같은 작업을 요청할 때 사용된다.
- HTML 양식으로 입력된 데이터 블록을 리소스 로직에 제공(HTML FORM에 입력한 정보로 회원 가입, 주문 등)
- 게시판, 뉴스 그룹, 메일링 리스트, 블로그 또는 유사한 기사 그룹에 메시지 게시(게시판 글쓰기, 댓글 달기)
- 서버가 아직 식별하지 않은 새 리소스 생성(신규 주문 생성)
- 기존 자원에 데이터 추가(한 문서 끝에 내용 추가하기)
- 단순히 데이터를 생성하거나, 변경하는 것을 넘어서 프로세스를 처리해야 하는 경우
PUT /members/100 HTTP/1.1
Content-Type: application/json
{
"username": "JaneDoe",
"age": 40
}
PUT 메서드는 리소스를 완전히 대체한다. 만약 기존 리소스가 없을 경우 새로 생성한다. 즉, 덮어쓰기를 수행한다고 볼 수 있다. POST와 차이점은 클라이언트가 리소스의 위치를 알고 URI를 명시해야 한다는 점이 있다.
- 리소스가 있는 경우
- 리소스가 없는 경우
리소스를 완전히 대체함 (부분 수정 불가)
PATCH /members/100 HTTP/1.1
Content-Type: application/json
{
"age": 50
}
PATCH 메서드는 PUT과 같이 리소스를 수정하는 역할을 하지만 리소스를 부분 변경한다는 점에서 차이가 있다. 부분 변경이 필요한 상황에서 PATCH를 사용할 수 없다면 POST를 사용할 수 있다.
DELETE /members/100 HTTP/1.1
Host: localhost:3000
DELETE 메서드는 말 그대로 리소스를 제거한다.