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

tiki·2021년 6월 22일
41

CS

목록 보기
3/3

⁉️ GET, POST, PUT, DELETE?

평소에 코딩을 하면서 서버와 클라이언트가 소통을 하기 위해서 보통 Http를 이용을 하게 되었습니다. 그런데 GET, POST, PUT, DELETE 등 여러가지의 Http Method 가 존재하는데 명확하게 사용하고 있을까? 라는 궁금증으로 관련 자료를 찾아보게 되었습니다.

🔧 REST

Http Method에 대해서 알기 위해서, 먼저 정의되는 것이 REST 이다.

REST의 탄생

  • REST는 Representational State Transfer라는 용어의 약자로서 2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개되었습니다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 합니다.

사실.. 제대로 명확하게 사용하자!! 라고 발표했지만, 명확한 REST의 규칙이 어렵기 때문에 편안한.. 개발을 위해서 대부분의 사람들이 정밀하게 지키지는 않는 것 같습니다.
얼마나 어렵기에.. REST의 정확한 규칙에 대해서는 다음 포스팅에서 다뤄보도록 하겠습니다!!

REST란?

Representational State Transfer의 약자이며, 다음과 같습니다.

  • 자원(Resource): URI
  • 행위(Verb): HTTP Method
  • 표현(Representations)

여기서 이번 포스팅에서 다룰 주제인 HTTP Method가 나오게 됩니다. 즉, REST를 지키면서 행위를 전달하는 방법이다 라고 생각하면 될 것 같습니다.

💁 HTTP Method

HTTP Method는 크게 GET, POST, PUT, DELETE가 대표적입니다.
보통 CRUD에서 다음과 같이 이용합니다.
조회: GET
등록: POST
수정: PUT
삭제: DELETE

전체 종류

메소드는 총 8개가 존재하며 아래와 같습니다.

GET: 서버로 부터 데이터를 취득
POST: 서버에 데이터를 추가, 작성 등
PUT: 서버의 데이터를 갱신, 작성 등
DELETE: 서버의 데이터를 삭제
HEAD: 서버 리소스의 헤더(메타 데이터의 취득)
OPTIONS: 리소스가 지원하고 있는 메소드의 취득
PATCH: 리소스의 일부분을 수정
CONNECT: 프록시 동작의 터널 접속을 변경

멱등성(Idempotence)이란?

우선, HTTP Method에 대한 자료를 찾아보면, idempotent라는 말이 나온다. 한국어로는 멱등성이라고 한다. 처음들어봤다.🙁

멱등성이란 여러번 수행해도 결과가 같음을 의미한다. 즉, 호출로 인하여 데이터가 변형이 되지 않는다는 것을 의미한다.

1. GET

정의

GET 메소드는 주로 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 메소드이다. 만약에 GET요청이 성공적으로 이루어진다면 XML이나 JSON과 함께 200 (Ok) HTTP 응답 코드를 리턴한다. 에러가 발생하면 주로 404 (Not found) 에러나 400 (Bad request) 에러가 발생한다.

  • HTTP 명세에 의하면 GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다.
  • GET 요청은 idempotent 하다.
  • 같은 요청을 여러 번 하더라도 변함없이 항상 같은 응답을 받을 수 있다.
  • 데이터를 변경하는 연산에 사용하면 안된다.

예시

GET /user/1

데이터를 조회하는 것이기 때문에 요청시에 Body 값과 Content-Type 가 비워져있다. 조회할 데이터에 대한 정보는 URL을 통해서 파라메터를 받고 있는 모습을 볼 수 있다.

데이터 조회에 성공한다면 Body 값에 데이터 값을 저장하여 성공 응답을 보낸다.

GET은 캐싱이 가능하여 같은 데이터를 한번 더 조회할 경우에 저장한 값을 사용하여 조회 속도가 빨라진다.

2. POST

정의

POST 메소드는 주로 새로운 리소스를 생성(create)할 때 사용된다. 조금 더 구체적으로 POST는 하위 리소스(부모 리소스의 하위 리소스)들을 생성하는데 사용된다. 성공적으로 creation을 완료하면 201 (Created) HTTP 응답을 반환한다.

  • POST 요청은 idempotent 하지 않다.
  • 같은 POST 요청을 반복해서 했을 때 항상 같은 결과물이 나오는 것을 보장하지 않는다
  • 두 개의 같은 POST 요청을 보내면 같은 정보를 담은 두 개의 다른 resource를 반환할 가능성이 높다.

예시

POST /user
body : {date : "example"}
Content-Type : "application/json"

데이터를 생성하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야한다. 해당 예시는 JSON을 통해서 작성된 예시이다.

URL을 통해서 데이터를 받지 않고, Body 값을 통해서 받는다.

데이터 조회에 성공한다면 Body 값에 저장한 데이터 값을 저장하여 성공 응답을 보낸다.

3. PUT

정의

PUT는 리소스를 생성 / 업데이트하기 위해 서버로 데이터를 보내는 데 사용됩니다.

  • PUT 요청은 idempotent 합니다.
  • 동일한 PUT 요청을 여러 번 호출하면 항상 동일한 결과가 생성됩니다.

예시

PUT /user/1
body : {date : "update example"}
Content-Type : "application/json"

데이터를 수정하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야한다. 해당 예시는 JSON을 통해서 작성된 예시이다.

URL을 통해서 어떠한 데이터를 수정할지 파라메터를 받는다. 그리고 수정할 데이터 값을 Body 값을 통해서 받는다.

데이터 조회에 성공한다면 Body 값에 저장한 데이터 값을 저장하여 성공 응답을 보낸다.

4. DELETE

정의

DELETE 메서드는 지정된 리소스를 삭제합니다.

예시

DELETE /user/1

데이터를 삭제하는 것이기 때문에 요청시에 Body 값과 Content-Type 값이 비워져있다.

URL을 통해서 어떠한 데이터를 삭제할지 파라메터를 받는다.

데이터 삭제에 성공한다면 Body 값 없이 성공 응답만 보내게 된다.

📙 자주하는 질문❓

POST방식이 GET방식보다 보안측면에서 더 좋다?

  • GET과 비교하여 URL에 데이터의 정보가 들어 있지 않으므로 조금 더 안전하다고 볼 수 있다.

GET방식이 POST방식보다 속도가 빠르다?

  • GET 방식은 캐싱을 하기 때문에 여러번 요청시 저장된 데이터를 활용하므로 조금 더 빠를 수 있다.

POST vs PUT

  • POST와 PUT은 구분해서 사용해야한다. POST는 새로운 데이터를 계속 생성하기 때문에 요청시마다 데이터를 생성하지만, PUT은 사용자가 데이터를 지정하고 수정하는 것이기 때문에 같은 요청을 계속하더라도 데이터가 계속 생성되지는 않는다.

PUT vs PATCH

  • PATCH는 이 포스트에서 다루지 않았지만, 정보를 수정할 수 있는 HTTP Method가 또 있습니다. 하지만 PUT이랑은 조금 다릅니다. PUT은 지정한 데이터를 전부 수정하는 Method이지만 PATCH는 정보의 일부분이 변경되는 방법입니다. 그래서 PUT은 멱등하지만, PATCH는 멱등하다고 볼 수 없습니다.

📎 참고

REST API 제대로 알고 사용하기
[REST API] REST API 규칙/PUT과 POST 차이/PUT과 PATCH 차이
HTTP Request Methods - w3schools

profile
하루하루 조금씩 발전하려는 개발자 입니다.

4개의 댓글

comment-user-thumbnail
2022년 5월 9일

정리를 잘 해주셔서 도움이 되었습니다💯

1개의 답글
comment-user-thumbnail
2023년 8월 8일

정리 감사합니다. 다른 질문인데 이 블로그는 어느 서비스를 이용한건지 알수있을까요?

답글 달기
comment-user-thumbnail
2023년 11월 8일

너무 잘 써주셔서 감사함다 ㅎㅎ 멋져용

답글 달기