일반적으로 사용자들은 웹페이지에 접속할 때, 브라우저의 주소창에 URL을 입력한다. 이때, 브라우저는 사용자가 입력한 URL을 분석해서 어디로 가야할 지 길을 찾는다. 그리고는 서버에 도달하게 되는데, 사용자가 URL을 통해서 무언가 보여달라! 라고 하는 것을 Request(요청) 이라고 하며, 서버는 그 Request를 읽고 분석하고 예쁘게 가공해서 다시 브라우저에게 보내주는 것을 Response(응답) 이라고 표현한다.

위와 같이 사용자가 Request를 하는 방법에는 여러 방식이 있지만, 오늘은 가장 많이 사용하면서 가장 근본이 되는 GET과 POST를 살펴보고자 한다.

GET

GET은 주로 서버로부터 정보를 조회하기 위해 설계된 메소드이다. GET은 Request를 할 때, 필요한 데이터를 쿼리 스트링에 담아서 전송한다. 쿼리 스트링 이란, URL의 끝에 ? 다음으로 Key와 Value로 이루워진 파라미터를 의미한다. 다양한 파라미터를 전송하기 위해서는 &로 연결하면 된다.

GET 방식의 장점은 특정 데이터를 직접 조회할 수 있기 때문에 브라우저의 즐겨찾기에 담아 놓고 즉시 접근 할 수 있다는 장점이 있다. 그리고 캐싱을 사용하여 POST방식 보다는 빠르게 데이터에 접근 할 수도 있다. 하지만 GET 방식은 전송하는 길이의 제한이 있기 때문에, 이럴 경우에는 POST 방식으로 사용하기도 한다.

GET방식의 특징

  • URL에 데이터를 포함시켜 요청한다.
  • 데이터를 Header에 포함하여 전송한다.
  • URL에 데이터가 노출되어 보안에 취약하다.
  • 전송하는 길이에 제한이 있다.
  • 캐싱을 할 수 있다.

POST

POST는 주로 리소스를 생성/변경하기 위해 설계된 메소드이다. 글을 작성하거나, 댓글을 달거나, form에 작성한 내용들을 등록할 때 주로 사용한다. 로그인할 때도 마찬가지다. POST 방식은 길이 제한이 없기 때문에 많은 데이터를 전송할 수 있으며, GET 방식 처럼 URL에 데이터를 담아서 전송하는 것이 아니라, BODY에 데이터를 담아서 보내게 된다. URL에 데이터가 보이지 않는다고 안전해 보이지만, 사실 크롬 개발자 도구를 통해서 열어보면 넘긴 데이터를 한눈에 볼 수 있다.

POST방식의 특징

  • URL에 데이터를 노출하지 않고 요청한다.
  • 데이터를 Body에 포함시킨다.
  • URL에 데이터가 노출되지 않아서 기본적인 보안은 되어있다.
  • 전송하는 길이에 제한이 없다.
  • 캐싱을 할 수 없다.