HTTP의 개념을 쉽게 설명해보자

박경연 (돌진어흥이)·2020년 8월 30일
2

물론 필자가 아는대로 설명한다.

늘 그렇듯 나도 배우고 공부한 만큼만 알거든.

HTTP가 뭔데?

HTTP라는건 Hyper Text Transfer Protocol이다.

Hyper Text라는건 HTML이다. 당신이 개발자라면, 웹페이지 소스를 한번이라도 본적이 있는

<a>something</a>

이렇게 생긴 웹의 기반이되는 언어를 말한다,

Transfer는 전송

Protocol이라는것은 우리나라말로 굳이 해석하자면 규약이라는 뜻이다.

규약이란 또 무엇이냐, 쉽게 말하면 약속이다.

결국 HTTP라는건 HTML이라는 언어로된 문서를 전송할때, 많은 사람들이 이 약속을 지켜서 전송하기로 했다는 말이고

다시말하면 웹에서 혹은 네트워크상에서 HTTP로 통신할때 지켜야할 국룰 이라는 것이다.

HTTP를 왜쓰고 HTTP 통신인지 어떻게 구분하나?

HTTP를 쓰는 용도는 당연히 HTTP 프로토콜을 사용해 HTML문서를 주고받고자 함이다.

이 이야기를 하기 위해 서버 혹은 컴퓨터가 다른 서버 혹은 컴퓨터와 통신하는 방식에 대해서 추상적으로 이해해야한다.

다음은 curl로 구글을 호출한 결과이다.

HTTP/1.1 200 OK
Date: Sun, 30 Aug 2020 13:58:52 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Set-Cookie: 1P_JAR=2020-08-30-13; expires=Tue, 29-Sep-2020 13:58:52 GMT; path=/; domain=.google.com; Secure
Set-Cookie: NID=204=Hyg0MF_qEIcWlMfyocYakM6J2prV76A4A2UnJbmKhtCKXQ5UMbcGykfjaOI2wXHnv_2jxlvApdjdBhTRTBud5t3IyWlSFVBbb5Bz7VKWjALue5U6KGcxQdaiVN1fcQ1M5JwZikztDDbCp0ntoNXboQM0uqGnnwIq_NmahN3ok5k; expires=Mon, 01-Mar-2021 13:58:52 GMT; path=/; domain=.google.com; HttpOnly
Accept-Ranges: none
Vary: Accept-Encoding
Transfer-Encoding: chunked

<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ko"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title><script nonce="F5Lx/dglnQrGAZBU1HlyNg==">(function(){window.google={kEI:'nLBLX6ygELzFmAXWt4LACA',kEXPI:'0,202130,32,

다음은 네이버를 호출한 결과이다

HTTP/1.1 302 Moved Temporarily
Connection: keep-alive
Content-Type: text/html
Date: Sun, 30 Aug 2020 14:07:15 GMT
Location: https://www.naver.com/
Server: NWS
Transfer-Encoding: chunked
Vary: Accept-Encoding,User-Agent

<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center> NWS </center>
</body>
</html>

다만 이 문서들은 우리가 문서의 내용을 보고 알수 있도록 컴퓨터가 알아서 byte단위로 글자들을 파싱하여 내놓은 결과 값이고,
이 문서가 전송될 때에는 당연히 0과 1로된 수많은 bit의 집합체들이 주르르르르르르르르륵 전송될 뿐이다

그럼 컴퓨터는 대체 무슨 재주가 있길래 0과 1로 된 데이터가 HTTP인지 알고 파싱해 주는 것인가?
RTSP / ONVIF / MQTT / FTP등등 수많은 프로토콜이 존재하는데, 무슨 수로 알고?

대답은 생각보다 간단하다.

curl 이나 httpie같은 패키지를 한번이라도 써봤다면, 모든 HTTP 문서의 앞에는 다음과 같은 내용이 오는걸 봤을 것이다

HTTP/1.1 200 OK

이 문서가 HTTP인것을 컴퓨터가 알 수 있는 이유는 HTTP가 그렇게 쓰도록, 즉 모든 HTTP문서의 Response의 첫줄에 HTTP/버전 응답코드 응답상태를 순서대로 적도록 약속되어있기 때문이다.

이런 것 말고도 Header에서 something: something의 형식으로 헤더를 작성하거나,
Header와 Body사이에 구분을 위해 엔터를 두번 치는것 또한 규칙으로 약속되어 있다.

이외에도 HTTP Format / HTTP request Format / HTTP response Format등으로 검색하면, 이러한 포맷에 대한 약속들을 문서나 남이 정리한 정보를 통해 알 수 있다.(HTTP는 너무나도 보편적인 것이라, 심지어 한글자료도 있다)

https://developer.mozilla.org/ko/docs/Web/HTTP/Messages

정리

  1. 프로그래머가 만든 프로그램을 수행하는 컴퓨터, 즉 클라이언트(지금의 경우에는 curl이나 httpie가 설치된 컴퓨터)가, HTTP 형식에 맞도록 사용자의 요구사항을 0과 1로 이루어진 데이터로 변환시킨다.

  2. 네트워크를 통해 통신하고자 하는 서버에 0과 1로 이루어진 데이터가 전송된다.

  3. 서버는 0과 1로 이루어진 데이터를 읽어낸다(이과정을 파싱:Parsing 이라고함).

  4. 서버에서 데이터를 읽어낸 결과, HTTP 요청임을 알고, 주어진 요청에 따라 Response의 내용을 작성한다.

  5. 작성된 데이터는 다시 0과 1로 이루어진 데이터로 변환된다.

  6. 네트워크를 통해 클라이언트로 이 Response데이터가 전송된다.

  7. 클라이언트는 Response 데이터를 받아 다시 파싱해 내고, 사용자의 화면에 출력된다.

profile
Back-end Developer, pursuing to be a steadily improving person.

0개의 댓글