봄디의 개발일지
[HTTP] HTTP 메서드 (GET, POST, PUT, PATCH, DELETE) 본문
1️⃣ HTTP 메서드 종류
- GET : 리소스 조회
- POST : 요청 데이터 처리, 주로 등록에 사용
- PUT : 리소스를 대체, 해당 리소스가 없으면 생성
- PATCH : 리소스 부분 변경
- DELETE : 리소스 삭제
2️⃣ GET (리소스 조회)
GET /search?q=hello&hl=ko HTTP/1.1
HOST: www.google.com
GET 메서드는 리소스를 조회할 때 사용하며,
서버에 전달하고 싶은 데이터는 쿼리 파라미터, 쿼리 스트링을 통해서 전달합니다.
메시지 바디를 사용해서 데이터를 전달할 수 있지만, 권장하는 방법은 아닙니다.
클라이언트에서 /members/100 에 있는 내용을 달라고 GET 메소드를 통해서 서버에 전달하면,
서버에서 /members/100 에 있는 { "username":"young", "age":20 } 의 JSON 형태의 내용과
HTTP 버전 (HTTP/1.1), 상태코드(200 OK), Content-Type (application/json) 과 Content-Length (길이) 를 포함한
응답 메시지를 만들어서 클라이언트로 전송합니다.
클라이언트는 응답 메시지를 기반으로 애플리케이션에서 무언가를 하거나, HTML 이면 웹 브라우저가 읽어서 데이터를 그리도록 합니다.
3️⃣ POST ( 요청 데이터 처리, 주로 등록에 사용 )
POST /members HTTP/1.1
Content-Type: application/json
{
"username": "hello",
"age": 20
}
POST 메서드는 요청 데이터를 처리하는 메서드 입니다.
메시지 바디를 통해서 서버로 요청 데이터를 전달하고, 서버는 요청 데이터를 처리합니다.
주로 전달된 데이터로 신규 리소스를 등록하거나, 프로세스 처리에 사용합니다.
/members 라고 POST 메서드로 요청이 오면, 신규로 등록한다고 가정을 하겠습니다.
클라이언트에서 POST 메서드를 서버로 보내면, 서버에서는 해당 메시지를 보고 신규 리소스 식별자를 생성합니다.
위의 그림에서는 /members/100 번을 생성했습니다.
서버에서 클라이언트로 신규 리소스를 생성했다고 201 Created 상태코드와, 자원이 생성된 경로, 등록된 자원에 대한 데이터를 포함한 응답 데이터를 만들어서 클라이언트로 전송합니다.
POST 는 HTML 양식에 입력 된 필드와 같은 데이터 블록을 데이터 처리 프로세스에 제공, 게시판, 뉴스 그룹, 블로그에 메시지 게시, 서버가 아직 식별하지 않은 새 리소스 생성, 기존 자원에 데이터 추가 등등 많은 기능에 사용이 되기 때문에
리소스 URI 에 POST 요청이 오면 요청 데이터를 어떻게 처리할 지 리소스마다 따로 정해야 합니다.
보통 다른 메서드로 처리하기 애매한 경우에는 대부분 POST 를 사용해서 처리합니다.
4️⃣ PUT ( 리소스를 대체, 해당 리소스가 없으면 생성 )
PUT /members/100 HTTP/1.1
Content-Type: application/json
{
"username": "hello",
"age": 20
}
PUT 메서드는 리소스를 대체하는 메서드 입니다.
리소스가 있으면 완전히 대체하고, 리소스가 없으면 생성합니다.
중요한 점은 클라이언트가 리소스를 식별합니다. (즉, 리소스 위치를 알고 URI 를 지정한다는 점이 POST 와의 차이점입니다.)
✅ 리소스가 있는 경우
위의 그림에서는 클라이언트가 PUT 메서드를 통해서 { "username" : "old" , "age" : 50 } 이라는 데이터로
/members/100 위치에 대체를 서버로 요청하고 있습니다.
PUT 메서드는 내용을 완전히 대체하기 때문에 기존 /members/100 에 있는 내용인
{ "username" : "young" , "age" : 20} 이 {"username" : "old" , "age" : 50} 으로 대체된 것을 확인할 수 있습니다.
클라이언트에서 {"age" :50} 이라는 메시지만을 PUT 메서드를 통해서 전달을 해도, 완전히 내용이 대체되기 때문에
기존 /members/100 에 있는 내용이 {"username" : "young" , "age" : 20} 이었어도, {"age":50} 으로 변경되고,
username 필드는 삭제될 것입니다.
✅ 리소스가 없는 경우
클라이언트가 /members/100 을 { "username":"old" , "age":50 } 으로 대체하려고 하는데,
/members/100 에 리소스가 없는 경우에는 해당 내용을 가지고 신규 리소스를 생성합니다.
5️⃣ PATCH ( 리소스 부분 변경 )
PATCH /members/100 HTTP/1.1
Content-Type: application/json
{
"age":50
}
PATCH 메소드는 리소스를 부분 변경합니다.
PATCH 메소드를 통해서 서버로 전달할 때, 기존 /members/100 에는 username 과 age 가 둘 다 있는데,
전송하는 내용에는 age 밖에 없습니다.
이럴 경우, PATCH 메서드를 사용했기 때문에 /members/100 은 { "username" : "young" , "age" : 50} 으로 바뀌게 됩니다.
6️⃣ DELETE (리소스 삭제)
DELETE /members/100 HTTP/1.1
Host:localhost:8080
DELETE 메소드는 리소스를 제거하는 메소드입니다.
위의 그림과 같이 클라이언트에서 DELETE 메소드와 함께 /members/100 이라고 전달 할 경우,
해당 /members/100 에 있는 리소스는 제거됩니다.
🔍 참고글
인프런 김영한 강사님의 [모든 개발자를 위한 HTTP 웹 기본 지식] 섹션 5. HTTP 메서드 강의를 참고하여 작성했습니다.
'HTTP' 카테고리의 다른 글
[HTTP] HTTP 메서드 활용 (2) | 2024.09.29 |
---|---|
[HTTP] HTTP 상태코드 (100~500대 상태코드 총정리) (0) | 2024.09.29 |
[HTTP] HTTP 란 ? (0) | 2024.09.22 |
[HTTP] URI 와 웹 브라우저 요청 흐름 (0) | 2024.09.15 |
[HTTP] 인터넷 네트워크 (IP, TCP/UDP, DNS) (2) | 2024.09.15 |