Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

봄디의 개발일지

[HTTP] HTTP 메서드 (GET, POST, PUT, PATCH, DELETE) 본문

HTTP

[HTTP] HTTP 메서드 (GET, POST, PUT, PATCH, DELETE)

bomdy 2024. 9. 29. 18:21

1️⃣ HTTP 메서드 종류

  • GET : 리소스 조회
  • POST : 요청 데이터 처리, 주로 등록에 사용
  • PUT : 리소스를 대체, 해당 리소스가 없으면 생성
  • PATCH : 리소스 부분 변경
  • DELETE : 리소스 삭제

2️⃣ GET (리소스 조회)

GET /search?q=hello&hl=ko HTTP/1.1
HOST: www.google.com

 

GET 메서드는 리소스를 조회할 때 사용하며,

서버에 전달하고 싶은 데이터는 쿼리 파라미터, 쿼리 스트링을 통해서 전달합니다. 

메시지 바디를 사용해서 데이터를 전달할 수 있지만, 권장하는 방법은 아닙니다. 

 

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 메서드는 요청 데이터를 처리하는 메서드 입니다. 

메시지 바디를 통해서 서버로 요청 데이터를 전달하고, 서버는 요청 데이터를 처리합니다. 

주로 전달된 데이터로 신규 리소스를 등록하거나, 프로세스 처리에 사용합니다. 

 

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 메서드로 내용 부분 변경

 

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 메소드를 통해 리소스 제거

 

 

위의 그림과 같이 클라이언트에서 DELETE 메소드와 함께 /members/100 이라고 전달 할 경우, 

해당 /members/100 에 있는 리소스는 제거됩니다. 


 

🔍 참고글

인프런 김영한 강사님의  [모든 개발자를 위한 HTTP 웹 기본 지식] 섹션 5. HTTP 메서드 강의를 참고하여 작성했습니다.