Link Search Menu Expand Document

GET vs POST

HTTP

웹 상에서 클라이언트와 서버간에 메시지를 주고받을 수 있는 프로토콜이다. 클라이언트가 HTTP로 서버에게 request를 보내면, 서버는 요청에 맞는 response를 클라이언트에게 전송한다. HTTP 요청에 포함되는 HTTP 메소드는 서버가 요청을 수행하기 위해 해야할 행동을 표시하는 용도로 사용한다. 이 HTTP 메소드 중 GET과 POST에 대한 차이를 살펴보자

GET

  • 서버로 부터 정보를 조회하기 위해 설계된 메소드이다.
  • 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리스트링을 통해 전송한다.
    (URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터를 쿼리스트링이라고 한다.)
  • 불필요한 요청을 제한하기 위해서 request가 캐시[^1] 될 수 있다.
  • 멱등성(Idempotent) : 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타난다.
  • 주로 조회를 할 때에 많이 사용

POST

  • 리소스를 생성/변경하기 위해 설계 됨
  • 전송해야할 데이터를 HTTP 메시지의 Body에 담아 전송
  • Body는 길이 제한이 없으므로 대용량 데이터 전송 가능
  • POST 방식은 Conent-type에다가 인코딩, 디코딩하는데 시간이 걸려서 GET방식 보다 약간 느림
  • 데이터가 Body로 전송되고 내용이 눈에 보이지 않으므로 GET보다는 비교적 안정적
  • 비멱등성(Non-Idempotent) : 서버에게 동일한 요청을 여러번 전송해도 응답은 항상 다를 수 있다.
  • 서버의 상태나 데이터를 변경시킬 때 사용하게 된다.
  • 생성, 수정, 삭제에 사용할 수 있다.
    생성 POST, 수정 PUT또는 PATCH, 삭제 DELETE가 더 용도에 맞는 메소드

[^1] 캐시 JS, CSS, 이미지 같은 정정 컨텐츠는 데이터양이 크고, 변경될 일이 적어서 반복해서 동일한 요청을 보낼 필요가 없다. 정적인 컨테츠를 요청하고 나면 브라우저에서는 요청을 캐시해두고, 동일한 요청이 발생하였을때 서버로 보내지 않고 캐시된 데이터를 사용한다. 프론트 엔드 개발시 컨텐츠를 변경해도 내용이 바뀌지 않는 이유이다. 정적 컨텐츠가 캐시 되어있기 때문이었다! 이 때는 브라우저의 캐시를 지워주면 다시 컨텐츠를 조회하기 위해 서버로 요청을 보내게 된다.

  • 정정 콘텐츠(static) : 변화가 없는 콘텐츠를 말한다. 보통 HTML, CSS, JS와 같이 미리 서버에 저장해두고 서버가 요청을 받으면 그저 응답만 해주면 되는 것들로 구성된다. 어느 사용자에게든지 동일한 결과값을 보여주게 된다.

  • 동적 콘텐츠(dynamic) : 누가, 언제, 어떻게 서버에 요청했는지에 따라 결과값을 다르게 보여주는 형식이다. 즉, 사용자에게 맞춤형 콘텐츠를 제공하게 되는 것이다. Youtube, Netfflix의 추천영상이 이에 해당한다.

Reference

https://hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/