🗄️
Http Method 란? (GET과 POST DELETE과 PUT 그리고 PATCH)
December 24, 2022
먼저 알아두면 좋은 멱등이란 단어
멱등의 사전적 정의는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
을 의미한다.
동일한 요청
을 한 번 보내는 것
과 여러 번 연속으로 보내는 것
이 같은 효과
를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성
을 가졌다고 말합니다.
각 메소드의 특징
메소드 명 | 메소드 용도 | 정의 | 메소드 특징 |
---|---|---|---|
GET | 데이터 조회 | 서버에 전달하고 싶은 데이터를 query(parameter, query string)을 통해 전달 | Query를 BODY에 담아서 조회가능하나 지원하지 않는 곳도 있기 때문에 권장하지 않는다. |
POST | 다양한 요청 처리 | BODY에 리소스 데이터를 전달 | GET 방식 사용시 전달해야할 데이터가 많다면 POST를 사용하여 BODY에 조회할 데이터를 전달할 수 있지만 POST로 조회시 캐싱하기에 어려운 문제가 있기 때문에 권장하지 않는다.(기술적으로 캐싱은 가능하다.) |
PUT | 데이터 추가 or 덮어쓰기 | 요청한 데이터가 없다면 추가하고 있으면 덮어쓰기 | POST와 PUT은 다르다. POST를 계속 요청하면 데이터가 계속 생성되지만 PUT은 여러번 요청하더라도 결과는 같다.(멱등성) |
PATCH | 데이터 수정 | 전달한 데이터로 수정 | 해당 기능을 지원하지 않는 경우도 있기 때문에 권장하는 방식이 아니다. 수정시에는 POST를 사용한다. |
DELETE | 데이터 삭제 | 특정 리소스의 삭제를 요청하는 데 사용 | - |
GET의 특징
- 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 메서드이다.
캐시
가가능
하다.(GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환하며 HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.)길이 제한
이 있다.(GET 요청의 길이 제한은 표준이 따로 있는건 아니고 브라우저마다 제한이 다르다고 한다.)중요한 정보
를다루면 안된다.
(보안, 파라미터에 다 노출되어 버린다.)- GET을 통한 요청은 URL주소 끝에 파라미터로 포함되어 전송되며, 이 부분을
쿼리 스트링(query string)
이라고 부른다. - 멱등성을 가진다.
POST의 특징
- 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용 되는 메서드다.
캐시되지 않는다
.- POST는 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보낸다. (body의 타입은 Content-Type 헤더에 따라 결정 된다.)
- 데이터를 전송할때 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나 GET처럼 데이터가 외부적으로 드러나는건 아니라서 보안이 필요한 부분에 많이 사용된다.(하지만 데이터를 암호화하지 않으면 body의 데이터도 결국 볼 수 있는건 똑같다.)
- POST를 통한 데이터 전송은 보통 HTML form을 통해 서버로 전송된다.
PUT의 특징
- 요청한 URI에 이미 리소스가 존재한다면 PUT과 같이 전달된 body는 원본 서버에 수정된 버전으로 변경되어야 한다.
- 만일 리소스가 존재하지 않는다면 서버로 요청된 데이터로 새 리소스를 생성할 수 있다.
- 새 리소스가 생성된 경우 201(created) 응답을 사용자에게 알려준다.
- 기존 리소스가 수정된 경우 200(확인) 혹은 204(내용 없음) 응답을 보내야 한다.
- 리소스를 생성할 수 없거나 수정할 수 없는 경우 적절한 오류 응답을 제공해야 한다.
- 멱등성을 가진다.
PATCH의 특징
- 리소스의 부분만을 수정하는 데 쓰인다.
DELETE의 특징
- 데이터 삭제 특정 리소스의 삭제를 요청하는데 사용한다.
- 멱등성을 가진다.
그 외 HEAD∙CONNECT∙OPTIONS∙TRACE 추가적으로 한번 찾아서 보자!
차이점
GET과 POST의 차이점
- 사용목적 :
GET
은 서버의 리소스에서 데이터를 요청할 때,POST
는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다. DB로 따지면GET
은 Select에 가깝고, POST는 Create에 가깝다고 보면 된다. - 요청에 body 유무 :
GET
은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다.POST
는 body 에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다. - 멱등성 (idempotent) :
GET
요청은 멱등이며,POST
는 멱등이 아니다.
POST와 PUT의 차이점
POST
가 두번 실행된다면 리소스는 두개가 생기는 것이고 PUT
이 두번 실행된다면 리소스가 두번 수정되거나 리소스가 하나 생기고 한번 수정되는 것이다.
- POST는 새 리소스를 생성한다.
- PUT은 리소스를 수정 혹은 생성하는 역할을 한다.
PUT과 PATCH의 차이점
PUT
은 요청 페이로드를 사용해 새로운 리소스를 생성하거나, 대상 리소스를 나타내는 데이터를 대체하는 것이고 PATCH
는 리소스의 부분적인 수정을 할 때에 사용됩니다.
PUT
은 가지고 있지 않은 리소스를 보내면 새로운 리소스를 생성하지만, PATCH
는 에러를 유발한다.
- PUT은 리소스의 모든 것을 업데이트 한다.
- POST는 리소스의 일부분을 업데이트 한다.
참고링크
Http Method 란? (GET, POST, PUT, DELETE)