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

DyungE_100·2022년 4월 22일
1

WEB

목록 보기
8/9

1. GET과 POST의 차이

GET은 클라이언트가 서버로부터 어떠한 리소스를 요청하고 단순히 가져오는 것으로 이해하였었고,
POST는 말 그대로 리소스를 처리하거나 게시하는 메서드라고 이해를 했었다. 그 밖에도 PUT 메서드나 PATCH 메서드에 대해서도 정확한 차이를 짚고 넘어가는 것이 좋을 것 같아 정리하게 되었다.

1.1 GET 메서드

HTTP GET 메서드는 서버로부터 특정한 리소스를 가져오도록 요청해주는 메서드이다. 오로지 데이터를 가져올 때만 사용해야 하는 것이다. (데이터의 변형이 없다.)

GET 요청을 할 때는 Body 부분이 비어있고 Header에는 Body의 컨텐츠 타입을 명시하는 Content-Type Header 필드도 비워 놓는다. 아래와 같이 URL 뒤에 쿼리 스트링(Query String, KeyValue가 붙어 있는 String)을 붙이고, HTTP 패킷의 Header에 KeyValue를 포함시켜 서버에 데이터를 요청하게 된다.

http://localhost:3000/login?id=admin&pw=1234

URL의 "?" 뒷부분은 쿼리 스트링으로 데이터를 표현하는 것이기 때문에 ID, Password와 같은 민감한 정보들에 GET방식을 사용하면 보안에 취약해진다. 따라서 주로 게시물이나 목록 조회와 같이 간단한 데이터 요청을 할 때 적합하다.

브라우저 히스토리에 기록이 남으며, 캐싱이 가능하다. 그리고 POST 방식보다 상대적으로 전송 속도가 더 빠르다.

1.2 POST 메서드

HTTP POST 메서드는 서버로 데이터를 전송하여 리소스를 추가하거나 생성하기 위해 사용하는 메서드이다. GET 메서드와 반대로 요청 Header의 Content-Type에 컨텐츠 타입을 명시하며, HTTP 패킷의 Body에는 데이터를 담아 서버로 전송한다. (보통 웹에서는 JSON 형식으로)

http://localhost:3000/login

POST 메서드는 GET 메서드와 다르게 데이터들이 URL에 표시되지 않아 상대적으로 보안성이 높지만, 결국엔 개발자 도구와 같은 툴로 요청 메시지 body안의 데이터를 확인할 수 있기 때문에 꼭 암호화를 해줘야 한다. (따라서 비밀번호와 같은 경우는 Bcrypt와 같은 암호화 알고리즘을 통해 암호화를 진행해준다.) 브라우저 히스토리에도 기록이 남지 않는 특징이 있다.

POST 메서드는 가벼운 GET 메서드와 다르게 보내는 데이터의 양에 제한이 없어 대용량 데이터를 보내기 적합하지만 요청을 받는 시간이 존재한다. 또 URL에 데이터가 노출되지 않으므로 캐싱이 불가능하다.

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

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

참고) 멱등성 : 연산을 여러 번 하였다더라도 결과가 달라지지 않는 성질. POST 메서드는 수행할 때 결과가 달라지므로 멱등성이 지켜지지 않는다.

2. POST와 PUT, PATCH의 차이점

2.1 PUT 메서드

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

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

또한 생성한 URL 개체의 이름을 명시적으로 지정한 경우에는 PUT을 사용하고, 서버가 결정하도록 한다면 POST를 사용하는 게 더 낫다.

2.2 PATCH 메서드

HTTP PUT 메서드는 문서 전체의 완전한 교체만을 허용하지만, PATCH 메서드는 PUT 메서드와 달리 부분적인 교체를 할 때 사용하는 메서드이다. 또한 PUT은 새로운 자원을 생성하지만, PATCH는 새로운 자원을 생성하진 않는다.





https://cocoon1787.tistory.com/526,
https://velog.io/@songyouhyun/Get%EA%B3%BC-Post%EC%9D%98-%EC%B0%A8%EC%9D%B4%EB%A5%BC-%EC%95%84%EC%8B%9C%EB%82%98%EC%9A%94,
https://noahlogs.tistory.com/35,
https://guseowhtjs.tistory.com/entry/HTTP%EC%97%90%EC%84%9C-POST%EC%99%80-PUT%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C,
https://velog.io/@vagabondms/%EA%B8%B0%EC%88%A0-%EC%8A%A4%ED%84%B0%EB%94%94-PUT%EA%B3%BC-PATCH-%EC%B0%A8%EC%9D%B4,
https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/PATCH,
https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/PUT

0개의 댓글