GET vs POST

fromzoo·2021년 1월 18일
1
post-custom-banner

GET메서드 POST메서드란?

  • 웹 서비스 개발에 주로 사용하는 메서드.
  • 사용자가 URL을 브라우저 주소창에 작성하고 엔터를 누르면 원하는 웹페이지가 나온다. 사용자는 웹페이지를 보기위해 단순한 일을 한 것이지만, 특정 웹페이지를 사용자 웹브라우저에게 보여주기 위해서는 내부적인 처리들이 있다.
  • 내부적인 처리에서, 클라이언트가 서버에게 웹페이지를 보여달라고 말하는 것 -> 요청
  • 서버가 클라이언트에게 요청받은 것에 대한 대답으로, 웹페이지 내용을 표현하기 위해 html문서로 주는 것 -> 응답

[GET]

데이터를 조회

[POST]

데이터를 서버로 제출해서 생성 또는 수정

HTTP 패킷

  • 클라이언트가 서버로 요청을 했을때, 보내는 데이터를 HTTP패킷이라고 표현한다.
  • HTTP 프로토콜을 쓰므로, 앞에 HTTP가 붙고 인터넷을 통해 보내는 데이터를 패킷이라고 표현하므로, HTTP 패킷이라고 부른다.
  • HTTP패킷 구조는 크게 헤더바디로 나누어진다.
    - 헤더에는 7가지 HTTP메서드 방식중 무엇을 썼는지, 클라이언트의 정보, 브라우저 정보, 접속할 URL 등등 클라이언트 정보를 담는다.
    - 바디는 보통 비어있지만 특정 데이터를 담아서 서버에게 요청을 보낼 수 있다.
  • 이러한 웹 개념 아래, 우리는 GET메서드와 POST메서드를 통해서 요청을 할 수 있다.

GET방식 vs POST 방식

  • 두 방식 모두, 서버에 요청을 하는 메서드.
  • 클라이언트가 서버에 요청할 때 제공해야하는 자원이 있다고하자.
  • 예를 들면 어떤 홈페이지의 로그인 페이지에서 로그인을 하는 경우
    - 아이디와 패스워드는 클라이언트가 작성한후 그 정보를 서버에 요청하여 클라이언트가 작성한 아이디와 패스워드가 올바른 것인지 검사해야한다.
    - 위의 예시에서 보듯, 요청에는 자원을 보내야하는 경우가 존재한다.

GET 방식으로 데이터를 보내기

  • 클라이언트의 데이터를 URL뒤에 붙여서 보낸다. 위에서 쓴 예시처럼 아이디 패쓰워드를 보낸다고 하면,
www.example.com?id=jjj&pass=123

이런식으로 보낸다. URL뒤에 '?'마크를 통해 URL의 끝을 알리면서, 데이터 표현의 시작점을 알린다.

  • 데이터는 key와 value 쌍으로 넣어야 한다.
  • 중간에 & 마크는 구분자이다. 2개 이상의 key-value 쌍 데이터를 보낼때는 &마크로 구분한다.
  • URL에 붙이므로 HTTP 패킷의 헤더에 포함되어 서버에 요청
  • 바디에는 특별한 내용을 넣을 것이 없으므로 BODY가 빈상태로 보내진다.
    - 그러므로 헤더의 내용중 BODY 데이터를 설명하는 Content-Type이라는 헤더필드는 들어가지 않는다.
  • URL형태로 표현되므로, 특정 페이지를 다른사람에게 접속하게 할 수 있다.
  • 또한 간단한 데이터를 넣도록 설계되어 데이터를 보내는 양의 한계가 있다.

POST방식으로 데이터를 보내기

  • POST방식은 GET방식과 달리, 데이터 전송을 기반으로 한 요청 메서드
  • GET방식은 URL에 데이터를 붙여서 보내는 반면, POST방식은 BODY에다가 데이터를 넣어서 보낸다.
  • 따라서 헤더필드중 BODY의 데이터를 설명하는 Content-Type이라는 헤더필드가 들어가고 어떤 데이터 타입인지 명시한다.
  • 컨텐츠 타입으로는 여러가지가 있지만, 몇가지를 적자면
1. application/x-www-form-urlencoded
2. text/plain
3. multipart/form-data

등이 있다.

  • 따라서 POST방식으로 데이터를 보낼때는 위와 같이 컨텐츠 타입을 꼭 명시해줘야하고, 작성하지 않은 경우 1번의 컨텐츠 타입으로 셋팅된다.

GET방식과 POST방식에 대한 상식

  • POST방식이 GET방식보다 보안 측면에서 더 좋다?
    - POST든 GET이든 보내는 데이터는 전부 클라이언트 측에서 볼 수 있다. 단지 GET방식은 URL데이터가 표시되어 별다른 노력없이 볼 수 있어서지, 두 방식 전부 보안을 생각한다면 암호화 해야한다.
  • GET방식이 POST방식보다 속도가 빠르다?
    - 빠른건 맞다. 하지만 왜 빠른지 알아야 하는데, 이유는 GET방식의 요청은 캐싱(한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓는다.) 때문에 빠른 것.

캐싱이란?

데이터에 한번 접근 후, 또 요청할때 빠르게 접근하기 위해서 레지스터에 저장해놓는 것.

요약

  • 클라이언트가 서버에 데이터를 요청하는 방식인 http메소드에서 GET과 POST의 차이점
  • 클라이언트가 서버에게 요청할때, 보내는 데이터 => http 패킷
  • HTTP 프로토콜 방식을 따르는 데이터(=패킷)
  • HTTP패킷은 헤더와 바디 구조로 되어있음
  • 헤더 => 클라이언트 정보, 브라우저URL 등이 담겨져 있고,
  • 바디 => 보통 비어있지만, 데이터를 담아서 서버에 요청할때 사용한다.

GET
어떠한 정보를 조회하기 위해서 사용되는 방식

  1. URL에 데이터 정보를 담아서 서버에 요청한다.
  2. URL에 데이터가 노출되어 있기때문에 보안에 취약
  3. 캐싱할 수 있다.
  4. 데이터를 헤더에 포함하여 전송한다.
  5. 전송길이에 제한이 있다.

POST
데이터를 서버로 제출하여 생성하거나 수정하기 위해서 사용

  1. Body에 데이터를 담아서 서버에 전송한다.
  2. 캐싱할 수 없다,
  3. URL에 데이터가 노출되지 않기 때문에 기본적인 보안은 되어있다.
  4. 전송길이에 제한이 없다.

출처

profile
프론트엔드 주니어 개발자 🚀
post-custom-banner

0개의 댓글