본문 바로가기
CS/Network

[HTTP] GET, POST, PUT, PATCH에 대해 알아보자

by 진꿈청 2024. 3. 24.

우선, HTTP MethodREST API와 아주 관련이 깊다.

 

간단하게 REST API HTTP URI로 리소스를 명시하고 HTTP Method를 이용해

해당 리소스에 관한 CRUD 오퍼레이션을 적용하여 클라이언트/서버 사이의 요청과 응답을 처리한다.

 

HTTP API REST API는 거의 유사한 의미로 사용된다.

하지만, HTTP는 좀 더 넓은 의미로 사용되며 REST는 HTTP(웹)의 장점을 최대한 활용할 수 있는
아키텍처로 HTTP API에 제약조건이 추가되어있는 형태라고 생각하면 된다.

 


HTTP Method
의 종류는 총 9가지이며 GET, POST, PUT, PATCH는 비교적 많이 사용되는 메소드들이다.

 

HTTP Method: GET, POST, PUT, PATCH, DELETE, HEAD, CONNECT, OPTIONS, TRACE

 

해당 Method에 대한 차이점을 비롯하여 여러 정보를 알아보자.

 

우선, 가장 자주 사용되는 GET, POST부터 설명한다.

 

GET과 POST란?

 

참고 블로그 사진

 

차이점

차이점부터 간단히 정리하면,

GET은 주로 리소스를 조회할 때,

사용되며 전송할 데이터를 쿼리스트링을 통해 전송하고 멱등이다.

 

POST는 주로 리소스를 생성할 때 사용하며 전송할 데이터를 HTTP 메시지의 Body에 담아 전송한다.

그리고 POST는 멱등이 아니다.

 

GET은 클라이언트가 서버에 리소스를 요청하는 메소드이며 주로 조회할 때 사용한다.

POST는 요청한 리소스를 생성하기 위해 사용하는 메소드이며 주로 등록할 때 사용한다.

 

GET은 캐싱이 가능하지만,

POST는 URL에 데이터가 노출되지 않으므로 캐싱이 불가능하다.(가능하지만 구현이 어렵다고 한다)

 

GET은 브라우저 히스토리에 남고

POST는 브라우저 히스토리에 남지 않음

 

HTTP 응답 코드GET은 200(ok), POST는 201(created)

 

쿼리스트링(QueryString)이란?

URL 뒤에 전달하는 파라미터를 말한다.

 

쿼리스트링 사용시 데이터가 노출되고 보안에 취약하다.

따라서, 중요한 정보를 사용할 때는 GET을 사용하면 안된다.
(GET은 쿼리스트링으로 데이터를 전송하기 때문)

 

또한, URL 길이가 제한되기 때문에 데이터 길이 제한이 있다.

쿼리스트링에서 '/', '&', '='등의 문자를 값으로 사용할 때는 인코딩을 해야 한다.

www.test.com/items?id=3&name=han

 

HTTP Request Message Body란?

HTTP Request Message 구조는 Start Line, Headers, Body로 구성된다.

이 중에서 Body는 전송하는 리소스를 담고있는 부분이다.

 

GET일 경우에는 Body가 없으며 POST일 경우 Body가 존재한다.

(GET의 경우 Body를 지원하는 브라우저도 있다. 하지만, 쿼리스트링을 사용하는 것이 좋다고 한다.)

 

단순하게 쿼리스트링보다 Body로 전송하는 것이 안전하다고 생각할 수도 있겠지만

Body에 있는 값은 개발자 도구를 통해 확인이 가능하다.

따라서, 중요한 정보는 반드시 암호화하여 전송하는 것이 좋다.(비밀번호 -> Bcrypt 암호화)

 

또한, Body는 길이 제한없이 데이터를 전송할 수 있다.

 

 

POST는 요청 Header의 Content-Type에 요청 데이터의 타입을 표시해야 한다.

  • application/x-www-form-urlencoded
  • multipart/form-data
  • application/json

GET은 요청할 때 Body 부분이 비어있고 Header에는 Body의 컨텐츠 타입을 명시하는

Content-Type Header 필드도 비워놓는다.

 

멱등(Idempotence)이란?

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

즉, HTTP에서는 여러 번 요청했을 때 항상 응답이 같은 것을 의미한다.

 

GET은 같은 요청을 여러 번 했을 때 항상 동일한 응답을 하기에 멱등하다고 한다.

POST는 같은 요청을 여러 번 했을 때 항상 응답이 다를 수 있기 때문에 멱등하지 않다고 한다.

 

 

GET과 POST의 차이점을 간략히 나타낸 표

 

HTTP Method GET 방식 POST 방식
사용하는 방식 리소스 요청(불러오기) 리소스 추가 또는 생성
URL 예시 http://localhost:3000/login?id=admin&pw=1234 http://localhost:3000/login
데이터가 담기는 곳 HTTP 패킷 Header HTTP 패킷 Body
리소스 전달 방식 쿼리스트링 HTTP Body
HTTP 응답 코드 200 201
URL에 데이터 노출 여부 O X
캐싱 가능 여부 O X
브라우저 기록 O X
북마크 추가 O X
데이터 길이 제한 O X
멱등성(idempotent) O X

 

POST와 PUT, PATCH의 차이점

PUT 메서드

HTTP PUT 메서드는 요청 페이로드(Payload, 사용에 있어서 전송되는 데이터)를 사용해
새로운 리소스를 생성하거나, 대상 리소스를 나타내는 데이터를 대체한다.(주로 Update기능에 사용)

PUT과 POST의 차이는 멱등성으로, PUT 메서드는 멱등성을 가진다. 
즉, PUT은 같은 객체를 여러 번 보내도 한 번만 생성되거나 계속해서 같은 값을 보내준다.
(POST 메서드의 경우는 새로운 객체가 보낼 때마다 생성된다.)

생성한 URL 개체의 이름을 명시적으로 지정한 경우에는 PUT을 사용한다.

만약, 서버가 결정하도록 한다면 POST를 사용하는 게 더 낫다.

 

PATCH 메서드

HTTP PUT 메서드는 문서 전체의 완전한 교체만을 허용하지만, 
PATCH 메서드 PUT 메서드와 달리 부분적인 교체를 할 때 사용하는 메서드이다.


또한, PUT은 새로운 자원을 생성한다.

그러나, PATCH는 새로운 자원을 생성하진 않는다.

 

 

 

참고 블로그

https://velog.io/@dyunge_100/Spring-Thread-Pool

 

[HTTP] GET, POST, PUT, PATCH 차이

.

velog.io

https://cherry-forest.tistory.com/26

 

GET, POST 차이

차이점 결론부터 말하면, GET은 주로 리소스를 조회할때 사용하며 전송할 데이터를 쿼리스트링을 통해 전송하고 멱등이다. POST는 주로 리소스를 생성할 때 사용하며 전송할 데이터를 HTTP 메시지

cherry-forest.tistory.com

 

'CS > Network' 카테고리의 다른 글

[HTTP] OPTIONS 헤더, Preflight, CORS  (0) 2024.03.05
[HTTP] Cross Origin Resource Sharing, CORS  (0) 2024.03.05