본문 바로가기

CS/네트워크

GET 과 POST의 차이

반응형

이전 까지 GET 방식과 POST 방식의 차이점을 설명해 보라는 요청이 있었을 때 나는 다음과 같이 대답했다 

"GET은 URL에 정보를 담아 보내고 POST는 body에 정보를 담아 보내는 것입니다!"

물론 아예 틀린 말은 아니지만 뭔가 허접하고 두루뭉실 하게 알고 있는 것 같은 인상을 준다.

그래서 이번 기회에 GET / POST에 대한 개념을 확실히 정리하고자 글을 쓰게 됬습니다 .

먼저 GET / POST에 대한 차이점을 알기 위해서 이게 정확히 뭐고 왜 그 둘을 비교 하고 있는지에 대해 알아야 할 것 같습니다.

GET / POST를 먼저 설명하기 전에 HTTP 에 대한 개념을 알아야 합니다.

  • HTTP란?


HTTP란 HyperText(HTML) Transfer Protocol의 약자로 웹 상에서 네트워크로 서버끼리 통신을 할 때 어떠한 형식으로 서로 통신을 하자고 규정해 놓은 "통신 형식" 혹은 "통신 구조"를 말합니다.

비유를 하자면 업체간 거래시 물건은 A박스로 포장하고 포장비는 2000원으로 하며 물건은 2kg이 넘으면 안돼 라는 규칙을 정하는 상황  과 같은 개념으로 이해하시면 될 것 같습니다 .

HTTP에 대한 개념은 이제 좀 잡힌 것 같고 그럼 HTTP는 서버간의 통신 방식을 규정해 놓았다고 하니, HTTP의 통신은 어떤 방식으로 이루어 지는지 알아 봐야겠죠?

  • HTTP 통신 방식


HTTP의 통신 방식을 한 줄로 설명 하자면 다음과 같습니다.

 

"클라이언트와 서버간의 요청과 응답"


간단히 말해 클라이언트 측에서 요청(Request)을 보내면 서버에서 응답(Response)을 하는 방식입니다

예를 들어 크롬에서 www.naver.com을 을 딱 치면 네이버 홈페이지로 이동해 홈페이지 화면을 보여 주겠죠?

이때 www.naver.com 에 접속해 특정 URL을 네이버 서버에 보내는 걸 "요청(Request)" 이라고 하고 네이버 서버로 부터 네이버 홈페이지에 해당되는 html 등을 보여주는 걸 '응답(Response)'라고 합니다.

뭐.. 통신 방식은 어렵지 않게 이해할 수 있지만 한가지 알아야 할 개념이 있습니다.


"HTTP는 Stateless이다."

Stateless라는 의미는 State(상태) 를 저장하지 않는다는 의미입니다. 이게 뭔말 이냐.. 만약 내가 www.naver.com 을 요청했다면 응답 해야 한다는겁니다.
아니 당연한거 아니야? 라고 생각하겠지만 이전에도 www.naver.com 을 요청했고 새로고침을 해 또 www.naver.com 을 요청 했다면 둘은 각각 독립적인 요청과 응답이라는 겁니다.
이제 Stateless라는 말의 의미를 어느정도 이해할 것 같습니다.


HTTP 의 통신 방식을 알았기 때문에 이제는 그래서 Request는 어떤 구조로 보내고 Response는 또 어떤 구조로 보내는지 그 "구조"에 대한 정리가 필요 할 것 같습니다.

 

HTTP Requset는 "URL + 요청 메서드" 구성으로 서버로 보내고 HTTP Response는 "상태 코드 + 응답 Body" 구성으로 브라우저로 보낸다.

HTTP Response 상태코드에 대한 자세한 정리는 이후에 새 포스터에 해 두겠습니다.

  • HTTP Request / Response의 구조

HTTP Request의 구조는 크게 3가지로 구성 되어있습니다.

  • Start Line
  • header
  • body

 

1. Start Line

먼저 Start Line은 말 그대로 Request의 첫 라인이라고 생각하면 될것 같습니다. 그래도 추상적이니 구체적 예시를 들어 보겠습니다.


예시) GET / search HTTP / 1.1


앞에서 부터 HTTP Method / Request target / HTTP version 을 의미합니다.

여기서 우리가 알고 싶어 했던 "GET"이라는게 나오는데 이게 HTTP Method를 의미한다네요. 구체적인 설명은 뒤에서 하겠습니다 .

HTTP Method는 해당 request가 의도한 행동을 정의한 부분으로 GET / POST / PUT / DELETE 등이 있습니다.
Request target은 해당 request가 전송 되는 목표 URI를 의미합니다.
마지막으로 HTTP version은 말그대로 HTTP 버전을 의미합니다

2. Header


HTTP 헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해준다.

 

예시를 들어 보겠습니다.

:authority: www.facebook.com :method: POST :path: /tr/ :scheme: https accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 accept-encoding: gzip, deflate, br accept-language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7 cache-control: max-age=0 content-length: 3076 content-type: application/x-www-form-urlencoded cookie: fr=0bF74fF135tOcyEeM..Bh3l5o...1.0.Bh3l5o. origin: https://www.top-tier.co.kr referer: https://www.top-tier.co.kr/ sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" sec-fetch-dest: iframe sec-fetch-mode: navigate sec-fetch-site: cross-site upgrade-insecure-requests: 1 user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

헤더의 내용중 "content-type : application/x-www-form-unlencoded" 이런식으로 key : value 형식으로 되어있습니다.

각각의 key에 해당되는 내용을 살펴 보면 'content-type' 같은 경우 MIME type 정보를 알려주고, 'method'는 HTTP Method가 뭔지 , 'user-agent' 는 현재 사용자가 어떤 OS와 브라우저를 이용해 요청을 보냈는지에 대한 정보를 알 수 있습니다.

이처럼 Header에는 요청에 대한 부가 정보를 포함하는 역할을 한다고 이해하면 될것 같습니다.


3. body

바디는 해당 request의 실제 메시지나 내용 등을 담는 부분입니다.

Body는 없는 경우도 많은데 대표적인 예로 GET Method의 일 경우는 body가 없습니다.


그럼 이제 오늘 핵심 적으로 다룰 GET / POST가 어떻게 다른지에 대한 모든 밑작업이 끝났습니다.

이미 GET / POST는 'HTTP Method'의 종류중에 하나이다 라고 소개 되었습니다. 맞습니다. GET 방식과 POST 방식은 HTTP 의 Method 의 종류중 하나입니다. 하지만 이건 사실이고 그 둘의 차이점과 각각 어떤 경우에 사용하는지에 대해 알야 합니다.

 

  • GET 방식

GET 방식은 주로 정보를 조회하는 경우에 많이 사용합니다.

예를 들어 www.naver.com 이라는 링크를 보냈을때 우리는 아무런 데이터의 입력없이 단순히 네이버의 홈페이지를 조회하기 위해 www.naver.com 이라는 URL을 요청했고 이때 사용된 HTTP Method가 GET 방식 입니다 .

GET 방식에 데이터 값을 전달해야 하는 경우가 있다면 URL에 파라미터를 전달해 요청하는 경우가 있을 수 있습니다.
아래의 예시처럼 말이죠

https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=101


위의 예시에서는 mode라는 변수에 LSD라는 파라미터 값을 전달 해 요청 하고 있습니다. 전형적인 GET 방식이라고 볼 수 있습니다.

GET 방식은 이렇게 데이터를 보내는 쪽에서 데이터를 노출 하는 경우가 발생 하므로 보안에 취약합니다.

  • POST 방식

POST 방식은 GET 방식과 다르게 정보를 body에 넣어 보내는 경우에 많이 사용합니다.

예를 들어 우리가 www.naver.com 에 접속해 회원 가입을 하다고 가정해 봅시다. 사용자는 자신의 회원 정보를 입력 하고 네이버 서버로 회원가입을 해달라는 요청을 보낼 겁니다. 만약 위 상황에 GET 방식을 사용하게 된다면 비밀번호 같은 정보들이 URL에 담아 전송되는 말도안되는 상황이 발생 하겠죠 ?

때문에 POST 방식을 사용해 body에 회원정보를 담아 네이버 서버에 전송하게 되는겁니다.

POST 방식은 데이터를 전송할때 body 영역에 데이터 타입을 Header에 Content-Type을 명시해 줘야 합니다. 지금 보내는 데이터의 MIME type을 알아야 Response에서도 해당 MIME 타입을 알고 Response를 보낼 수 있겠죠??

MIME 타입에 대한 설명은 아래의 링크를 참고 해 주세요

 

MIME 의 개념과 사용 목적

MIME이란? MIME은 Multipurpose Internet Mail Extensions의 약자로 간단히 말해 파일 변환을 의미합니다. Internet Mail Extensions라는 이름이 붙은 이유는 원래 MIME은 이메일과 함꼐 동봉할 파일을 텍스트 문..

jminc00.tistory.com


POST가 GET 비해 안전하다고는 하지만 다른 툴을 사용해 POST 영역에 데이터를 확인하는 '스니핑' 해킹 기법을 사용하면 내 정보가 노출 되기 대문에 안심 해서는 안됩니다.



오늘 글에서는 HTTP의 개념과 GET / POST의 차이에 대해 정리 해보았습니다. 이제 어디가서 GET / POST 를 잘 설명할 수 있겠네요

반응형

'CS > 네트워크' 카테고리의 다른 글

[Network] 프로토콜 계층(2)  (0) 2022.10.09
[Network] 프로토콜 계층(1)  (0) 2022.10.02
HTTP 상태 코드  (0) 2022.08.25
HTTP/1.1 과 HTTP/2 의 차이점  (0) 2022.03.06
IP, Gateway,Subnet 이란?  (0) 2022.01.04