GET은 메시지로
GET /members/100 HTTP/1.1
HOST: localhost:8080
위와 같이 보낸다. 그러면 서버에서는
{
"username":"young",
"age":20
}
위와 같이 응답한다. 회원번호 100번의 리소스를 요청하였고 서버에서는 json 형식으로 응답한것이다.
이제 이 응답 데이터를 클라이언트에
HTTP/1.1 200OK
Content-Type:application/json
Content-Length:34
{
"username":"young",
"age":20
}
이런 형식으로 패킷을 해서 응답메시지를 보내는 것이다.
그럼 응답 받은 클라이언트는 위의 메시지를 읽고 username과 age를 조회할 수 있게 된다!
우리가 SQL을 배울때 select 구문을 쓰는 것과 굉장히 유사하다.
POST는 대부분의 요청을 처리해준다.
같은 url로 /members를 보내도 우리가 POST형식으로 보내는지, GET형식으로 보내는지에 따라
함수가 다르게 실행되어진다. 즉 우리가 스프링부트로 예를 들면
@getmapping과 @postmapping을 사용하여 같은 url을 지정해도 다른 형식의 함수가 실행되도록 할 수 있는 것이다.
GET 방식과 유사하게 실행되지만 위에서 200 OK로 응답했던것이 주로 201 Created나
Location: /members/100 이런식으로 하나가 더 추가되어 응답한다.
Location은 리소스가 추가된 경로를 의미한다.
필자가 이해한 POST는 다양하게 리소스를 처리할 수 있다. 능력이 많은 메서드인데 그렇기 때문에 POST에게 개발자가 어떤식으로 작동하라고 미리 정해두고 POST가 메서드로 처리할 수 있게 만들어주면 대부분 개발자가 원했던 방식으로 처리할 수 있다. 라고 이해했다. 단순 리소스를 생성함에 그치지 않고 리소스를 변경하거나 상태를 변경하는 등 다양한 요청을 처리할 수 있으며 김영한 강사님께서도 애매하면 POST를 써서 설계하라고 할 정도였으니 POST의 쓰임새는 어마어마하게 많다고 볼 수 있겠다.
POST의 결과로 새로운 리소스가 생성되지 않을 수도 있다는 점도 꼭 알아두면 좋을것 같다.
POST/orders/{orderId}/start-delivery(컨트롤 URI) 같은 형식
내일은 PUT, PATCH, DELETE를 알아볼 생각이다!
잡설을 하나 덧붙이면 6월 10일에 열리는 sqld 시험을 준비하고 있어서 조만간에 HTTP 정리를 잠시 멈추고 SQLD공부를 정리하는 시리즈를 출간해볼 생각이다..
출처 : 모든 개발자를 위한 HTTP 웹 기본 지식(김영한 강사님 인프런 강의)