GET
은 클라이언트가 서버로부터 어떠한 리소스를 요청하고 단순히 가져오는 것으로 이해하였었고,
POST
는 말 그대로 리소스를 처리하거나 게시하는 메서드라고 이해를 했었다. 그 밖에도 PUT
메서드나 PATCH
메서드에 대해서도 정확한 차이를 짚고 넘어가는 것이 좋을 것 같아 정리하게 되었다.
HTTP GET
메서드는 서버로부터 특정한 리소스를 가져오도록 요청해주는 메서드이다. 오로지 데이터를 가져올 때만 사용해야 하는 것이다. (데이터의 변형이 없다.)
GET
요청을 할 때는 Body 부분이 비어있고 Header에는 Body의 컨텐츠 타입을 명시하는 Content-Type
Header 필드도 비워 놓는다. 아래와 같이 URL 뒤에 쿼리 스트링(Query String, Key
와 Value
가 붙어 있는 String
)을 붙이고, HTTP 패킷의 Header에 Key
와 Value
를 포함시켜 서버에 데이터를 요청하게 된다.
http://localhost:3000/login?id=admin&pw=1234
URL의 "?" 뒷부분은 쿼리 스트링으로 데이터를 표현하는 것이기 때문에 ID, Password와 같은 민감한 정보들에 GET방식을 사용하면 보안에 취약해진다. 따라서 주로 게시물이나 목록 조회와 같이 간단한 데이터 요청을 할 때 적합하다.
브라우저 히스토리에 기록이 남으며, 캐싱이 가능하다. 그리고 POST
방식보다 상대적으로 전송 속도가 더 빠르다.
HTTP POST
메서드는 서버로 데이터를 전송하여 리소스를 추가하거나 생성하기 위해 사용하는 메서드이다. GET
메서드와 반대로 요청 Header의 Content-Type
에 컨텐츠 타입을 명시하며, HTTP 패킷의 Body에는 데이터를 담아 서버로 전송한다. (보통 웹에서는 JSON 형식으로)
http://localhost:3000/login
POST
메서드는 GET
메서드와 다르게 데이터들이 URL에 표시되지 않아 상대적으로 보안성이 높지만, 결국엔 개발자 도구와 같은 툴로 요청 메시지 body안의 데이터를 확인할 수 있기 때문에 꼭 암호화를 해줘야 한다. (따라서 비밀번호와 같은 경우는 Bcrypt와 같은 암호화 알고리즘을 통해 암호화를 진행해준다.) 브라우저 히스토리에도 기록이 남지 않는 특징이 있다.
POST
메서드는 가벼운 GET
메서드와 다르게 보내는 데이터의 양에 제한이 없어 대용량 데이터를 보내기 적합하지만 요청을 받는 시간이 존재한다. 또 URL에 데이터가 노출되지 않으므로 캐싱이 불가능하다.
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
메서드는 수행할 때 결과가 달라지므로 멱등성이 지켜지지 않는다.
HTTP PUT
메서드는 요청 페이로드(Payload, 사용에 있어서 전송되는 데이터)를 사용해 새로운 리소스를 생성하거나, 대상 리소스를 나타내는 데이터를 대체한다.(주로 Update기능에 사용)
PUT
과 POST
의 차이는 멱등성으로, PUT
메서드는 멱등성을 가진다. 즉, PUT
은 같은 객체를 여러 번 보내도 한 번만 생성되거나 계속해서 같은 값을 보내줄 것이다. (POST
메서드의 경우는 새로운 객체가 보낼 때마다 생성된다.)
또한 생성한 URL 개체의 이름을 명시적으로 지정한 경우에는 PUT
을 사용하고, 서버가 결정하도록 한다면 POST
를 사용하는 게 더 낫다.
HTTP PUT
메서드는 문서 전체의 완전한 교체만을 허용하지만, PATCH
메서드는 PUT
메서드와 달리 부분적인 교체를 할 때 사용하는 메서드이다. 또한 PUT
은 새로운 자원을 생성하지만, PATCH는 새로운 자원을 생성하진 않는다.
Link
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