녕지의 개발 블로그
Published 2023. 1. 4. 16:01
GET과 POST의 차이 CS

HTTP 메소드 - GET/POST

브라우저가 서버에 요청하는 것

 

GET 방식

GET은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리 스트링을 통해 전송한다.

쿼리 스트링이란?
URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터
만약, 요청 파라미터가 여러 개이면 &으로 연결한다.

ex) www.hyeonjis.tistory.com/example?name=shj&age=27  
여기에서 요청 파라미터명은 name, age이고
각각의 파라미터는 shj, 27으로 서버에 요청을 보내게 된다

 

쿼리 스트링을 사용하게 되면 URL에 조회 조건을 표시하기 때문에 특정 페이지를 링크하거나 북마크할 수 있다.

그리고 GET은 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다.

 

js, css, 이미지 같은 정적 컨텐츠는 데이터 양이 크고, 변경될 일이 적어서 반복해서 동일한 요청을 보낼 필요가 없다. 정적 콘텐츠를 요청하고 나면 브라우저에서는 요청을 캐시해 두고, 동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시된 데이터를 사용한다.

 

종종 프론트엔드 요소를 변경해도 반영이 안 되는 경우가 있는데, 이때 브라우저의 캐시를 지워 주면 다시 컨텐츠를 조회하기 위해 서버로 요청을 보내게 된다.

 

  • GET 요청은 캐시가 가능하다
  • GET 요청은 브라우저 히스토리에 남는다.
  • GET 요청은 길이 제한이 있다.
  • GET 요청은 중요한 정보를 다루면 안 된다.

 

POST 방식

POST 방식은 리소스를 생성/변경하기 위해 설계되었기 때문에 GET과 달리 전송해야 될 데이터를 HTTP 메시지 Body에 담아서 서버로 보낸다. (body의 타입은 Content-Type 헤더에 따라 결정된다)

 

GET에서 쿼리 스트링으로 보냈던 게 body에 담겨 보내진다고 생각하면 된다.

 

POST로 데이터를 보낼 때는 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나 외부적으로 데이터를 드러내지 않기 때문에 보안이 필요한 부분에 많이 사용된다. (데이터를 암호화하지 않으면 body의 데이터를 볼 수 있다)

 

POST를 통한 데이터 전송은 보통 html form을 통해 서버로 전송된다.

 

  • POST 요청은 캐시되지 않는다.
  • POST 요청은 브라우저 히스토리에 남지 않는다.
  • POST 요청은 북마크되지 않는다.
  • POST 요청은 데이터 길이에 제한이 없다.

GET과 POST의 차이점

  • 사용 목적
    • GET: 서버의 리소스에서 데이터를 요청할 때 사용한다.
    • POST: 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
    • DB로 따지면 GET은 SELECT에 가깝고, POST는 CREATE에 가깝다고 본다.
  • 요청에 Body 유무
    • GET: 쿼리 스트링으로 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 Body가 없다.
    • POST: body에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 Body가 존재한다.
  • 멱등
    • GET:  멱등
    • POST: 멱등 x
멱등이란?
사전적 정의로는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.
GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같다.
POST는 리소스를 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니라고 볼 수 있다.

참고 자료

https://noahlogs.tistory.com/35

'CS' 카테고리의 다른 글

브라우저와 작동 원리  (0) 2023.01.06
CI/CD  (0) 2022.12.27
HTTP란?  (0) 2022.12.25
인터넷의 작동 원리  (2) 2022.12.23
profile

녕지의 개발 블로그

@녕지

주니어 개발자가 쓰는 IT에서 살아남기 . . .