먼저 알아두면 좋은 멱등이란 단어

멱등의 사전적 정의는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.

동일한 요청한 번 보내는 것여러 번 연속으로 보내는 것같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 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 요청 메서드

Http Method 란? (GET, POST, PUT, DELETE)

Get과 Post의 차이를 아시나요?

[ 기술 스터디 ] PUT과 PATCH 차이

[HTTP통신] HTTP 메소드 및 특징