HTTP 메서드 - GET, POST

개발로 쓰는 개발 노트·2023년 5월 21일
0

HTTP 메서드 종류

  • GET : 리소스 조회
    -> 나에게 리소스를 가져다 줘(목록을 조회할 때 주로 sql에서 select함수 라고 생각하면 됨)
  • POST : 요청 데이터 처리 주로 등록에 사용
    -> (거의 대부분의 요청데이터는 POST가 처리하는데 insert, update를 동시에 사용한다고 생각하면 된다.)
  • PUT : 리소스를 대체한다. 해당 리소스가 없다면 생성한다.
    -> (개발자 스럽게 표현하자면 if(resource==none){insert}else{update}이다.)
  • PATCH : 리소스 부분 변경
    -> 리소스를 일부 변경할 때 쓰인다.(특정 필드를 바꿀 때 예를 들어 특정 회원의 이름만 바꿀 때 쓰임)
  • DELETE : 리소스 삭제
    ->(원하는 만큼의 데이터를 삭제할 때 쓰이며 sql에서는 delete라고 보면 된다.)

HTTP 메서드 종류(기타 메서드)

  • HEAD : GET과 동일하지만 메시지 부분을 제외하고 상태 줄과 헤더만 반환한다.
  • OPTION : 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명(주로 CORS에서 사용한다.)
  • CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
  • TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

기타 메서드는 거의 보이지 않는다.(설명 생략)


GET

  • 리소스 조회
  • 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달
  • 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음.

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

  • 요청 데이터 처리
  • 메시지 바디를 통해 서버로 요청 데이터 전달
  • 서버는 요청 데이터를 처리
    - 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
  • 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용

POST는 대부분의 요청을 처리해준다.
같은 url로 /members를 보내도 우리가 POST형식으로 보내는지, GET형식으로 보내는지에 따라
함수가 다르게 실행되어진다. 즉 우리가 스프링부트로 예를 들면
@getmapping과 @postmapping을 사용하여 같은 url을 지정해도 다른 형식의 함수가 실행되도록 할 수 있는 것이다.

GET 방식과 유사하게 실행되지만 위에서 200 OK로 응답했던것이 주로 201 Created나
Location: /members/100 이런식으로 하나가 더 추가되어 응답한다.
Location은 리소스가 추가된 경로를 의미한다.

POST의 요청 데이터 처리 방식

  • POST는 단순히 데이터를 생성하는 것이 아니라 대상 리소스가 리소스의 고유한 의미 체계에 따라 요청에 포함 된 표현을 처리하도록 요청한다.

필자가 이해한 POST는 다양하게 리소스를 처리할 수 있다. 능력이 많은 메서드인데 그렇기 때문에 POST에게 개발자가 어떤식으로 작동하라고 미리 정해두고 POST가 메서드로 처리할 수 있게 만들어주면 대부분 개발자가 원했던 방식으로 처리할 수 있다. 라고 이해했다. 단순 리소스를 생성함에 그치지 않고 리소스를 변경하거나 상태를 변경하는 등 다양한 요청을 처리할 수 있으며 김영한 강사님께서도 애매하면 POST를 써서 설계하라고 할 정도였으니 POST의 쓰임새는 어마어마하게 많다고 볼 수 있겠다.

POST의 결과로 새로운 리소스가 생성되지 않을 수도 있다는 점도 꼭 알아두면 좋을것 같다.

POST/orders/{orderId}/start-delivery(컨트롤 URI) 같은 형식

GET, POST 정리

  • 조회할 때는 GET을 쓰는것이 좋다.(select)
  • POST는 팔방미인이다. 그 외에는 대부분 POST를 쓰면 좋지만 개발자가 원하는 방식으로 메서드를 명명해주어야 원하는 방식의 POST가 작동할 것이다.

내일은 PUT, PATCH, DELETE를 알아볼 생각이다!
잡설을 하나 덧붙이면 6월 10일에 열리는 sqld 시험을 준비하고 있어서 조만간에 HTTP 정리를 잠시 멈추고 SQLD공부를 정리하는 시리즈를 출간해볼 생각이다..

출처 : 모든 개발자를 위한 HTTP 웹 기본 지식(김영한 강사님 인프런 강의)

profile
비전공자 개발초보입니다!

0개의 댓글