[웹] HTTP METHOD

sewonK·2022년 4월 12일
0
post-custom-banner

* 본 내용은 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 참조하고 있습니다.

GET과 POST는 모두 HTTP 메서드 종류에 속하며 주로 GET은 리소스를 조회하는 경우, POST는 요청 데이터를 처리하는 경우 사용합니다.

GET

GET은 리소스를 조회할 때 사용하는 HTTP 메서드입니다. 서버에 전달하고자 하는 데이터는 쿼리 파라미터(=쿼리 스트링)을 통해서 전달합니다. 메시지 바디를 사용하여 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아 권장하지는 않습니다.

GET /members/100 HTTP/1.1
Host: localhost:8080

GET 메서드를 사용하여 위와 같이 HTTP 요청 메시지를 보낼 수 있습니다.

POST

요청 데이터를 처리하고, 메시지 바디를 통해 서버로 요청 데이터를 전달할 때 사용합니다. 주로 전달된 데이터를 이용하여 신규 리소스를 등록하거나, 프로세스를 처리하는 경우에 POST 메서드를 사용합니다.

POST /members HTTP/1.1
Content-Type: application/json

{
	"username":"young",
    "age":20
}

POST 메서드를 사용하여 위와 같이 HTTP 요청 메시지를 보낼 수 있습니다.
1) HTML FORM에 입력된 정보와 같은 데이터 블록을 데이터 처리 프로세스에 제공하거나, 서버가 아직 식별하지 않은 새로운 리소스를 생성할 경우
2) 값을 변경하는 것을 넘어서 프로세스를 처리해야 하는 경우
3) 다른 메서드로 처리하기 애매한 경우
POST 메서드를 사용할 수 있습니다.

PUT

PUT은 리소스를 대체하는 메서드입니다. 리소스가 없으면 데이터를 생성하지만, 리소스가 있다면 덮어씌워 대체합니다. POST 메서드와 다른 점은, 클라이언트가 리소스를 식별할 수 있다는 것입니다.

PUT /members/100 HTTP/1.1
Content-Type: application/json

{
	"username":"hello",
    "age":20
}

위와 같은 요청 메세지를 보면, PUT 메서드의 URI가 /members/100으로 상세히 지정되어있다는 것을 확인할 수 있습니다. 클라이언트가 리소스의 위치를 안다는 것이 POST와 PUT의 다른 점이 되겠습니다.

주의할 점은, 리소스를 완전히 대체하기 때문에 기존 리소스가 삭제된다는 것입니다. 리소스를 수정한다기 보다 대체할 때 PUT을 사용합니다. 예를 들어 username과 age 필드 값이 저장된 상태에서 PUT 메서드를 통해 age 값을 변경한다면, 기존에 존재하는 username 필드는 삭제됩니다. 이처럼 대체하는 것이 아닌, 부분적으로 리소스를 변경할 경우에는 PATCH 메서드를 사용합니다.

PATCH

username과 age 필드 값이 저장된 상태에서 PATCH 메서드를 통해 age 값을 변경한다면 username 필드는 그대로 존재한 채로 age 값만 변경되게 됩니다.

PATCH /members/100 HTTP/1.1
Content-Type: application/json

{
	"age" : 50
}

DELETE

리소스를 제거하는 HTTP 메서드입니다.

DELETE /members/100 HTTP/1.1
Host: localhost:8080

HTTP 메서드의 속성

안전

호출해도 리소스를 변경하지 않는 것을 안전하다고 합니다. 안전한 메서드에는 GET, HEAD, OPTION 등이 있습니다.

멱등(Idempotent)

한 번 호출하든 두 번 호출하든 n번 호출하든, 결과는 같다. 멱등 메서드에는 GET, PUT, DELETE가 있습니다. 그러나 POST는 멱등 메서드가 아닙니다. 두 번 호출하면 중복해서 데이터가 발생할 수 있기 때문입니다. 멱등은 외부 요인으로 중간에 리소스가 변경되는 것까지는 고려하지 않습니다.

멱등은 자동 복구 메커니즘에서 활용될 수 있습니다. 서버가 어떠한 이유로 정상 응답을 주지 못했을 때, 클라이언트가 다시 같은 요청을 해도 되는지에 대한 판단 근거가 됩니다.

캐시가능(Cacheable)

응답 결과 리소스를 캐시해서 사용해도 되는지에 대한 속성입니다. GET, HEAD, POST, PATCH 메서드는 캐시가 가능합니다. 그러나 실제로는 GET, HEAD 정도만 캐시로 사용합니다. 캐시를 하려면 키가 맞아야 하는데, POST, PATCH 메서드는 본문 내용까지 캐시 키로 고려하므로 구현하기가 쉽지 않기 때문입니다.

post-custom-banner

0개의 댓글