brunch

You can make anything
by writing

C.S.Lewis

by 승규 Mar 08. 2022

http 프로토콜의 개요

세상에서 가장 유명한 프로토콜 


들어가며 

서버개발 101에서는 서버개발을 하기 위해 알아야하는 배경지식들을 다룬다. 첫번째로 http이다. http는 약자라서 풀어쓰면 hyper text transfer protocol 이다. 우선 프로토콜이라는 말부터 살펴보자. 프로토콜은 일반적으로 통신규약으로 해석하는데, 전산에서는 컴퓨터간에 데이터를 어떻게 주고 받을지 정의한 것을 말한다. 사람들끼리 대화할 때에 어떤식으로 대화할지 정해놓았다면 그것도 프로토콜이다. 우리가 알고 있는 대표적인 프로토콜이 하나 있다. 다음 대화를 보자.


A : how are you?
B : I'm fine. thank you. And you?

대한민국에서 영어를 배운사람이면 (과장을 좀 섞어서) 99%는 저렇게 대답하게 되어있다. 프로토콜은 이렇게 컴퓨터끼리 어떻게 대화할지 규칙을 정해놓은 것이라고 할 수 있겠다. 이제 http로 다시 돌아가보자. 


http의 상세 스펙에 관하여서는 다루지 않는다.
왜냐하면 http스펙만으도 책을 한권 쓸 수 있을 정도로 해야할 말이 많기 때문이다. 


Hypertext? 

앞서 프로토콜은 컴퓨터끼리 데이터를 어떻게 주고받을지 정하는 것이라고 알아보았다. transper는 물건을 옮긴다는 의미인데, 하이퍼텍스트라는 의미를 알 수 없는 말이있다. Hyper의 기본적인 뜻은 과하다는 뜻인데, 수학에서 Hyper라는 단어는 확장 또는 일반성을 의미한다. 즉 하이퍼텍스트는 일반적인 문서를 더 확장한 문서라는 의미가 된다. 하이퍼텍스트라는 말은 1963년에 테드넬슨 이라는 분이 만든 용어인데, 링크를 가지고 있고, 링크로 서로 연결된 문서에 대한 모델을 의미하는 말이라고 한다. 다음에 나오는 그림을 보면 쉽게 알 수 있을 것이다. 

 

출처 위키페디아 (https://en.wikipedia.org/wiki/Hypertext)

그림에는 문서와 링크만 있지만, 저기에 그림도 넣고, 동영상도 넣고 하면 우리에게 매우 친숙한 HTML이 된다. 이제 http가 무엇을 하는 것인지 느낌이 올것이다. http는 하이퍼텍스트, 즉 HTML을 나르기 위한 프로토콜인 것이다. 다음으로는 http의 간략한 역사에 대해서 알아보자. 


매우 간단히 살펴보는 http의 역사

http는 1990년에 최초로 0.9버전이 나온 후 계속 버전업이 이루어졌다. 0.9버전은 위에서 설명한 HTML문서를 요청하고 가져오는 것만(GET) 하는 매우 간단한 프로토콜이었다. 1996년에 1.0버전이 나왔는데, 0.9버전에 비하여 많은 확장성을 가지도록 변경 되었다. 요청에 버전정보가 추가되고, 상태코드가 추가 되고, 헤더가 추가되었으며 더욱 많은 메서드가 추가되었다. 1997년에는 http1.1 나왔고 20년이 넘은 지금도 표준이다. 1.1버전에서는 커넥션을 재사용할 수 있게해주고, 파이프라이닝을 추가했고, 청크된 응답지원등의 기능이 들어가서 1.0버전에서 모호했던 부분들을 명확하게 하고 많은 개선을 포함하였다. 


2015년 5월에 http2가 공식적으로 표준이 되었는데, http1.1은 한번의 커넥션에 하나의 정보만 가져올 수 있었고 순서대로 데이터를 가져와야 했기때문에 속도가 빠르지 못했다. http2에서는 이부분을 개선하여 하나의 커넥션으로 여러개의 데이터를 가져올 수 있게 변경하였다. 


2020년에 http3의 스펙의 초안이 작성된 상태이고, 주요한 브라우저에서는 이미 적용을 시작한 상태이다. http3는 tcp/ip기반의 프로토콜이 아닌 udp기반의 QUIC프로토콜을 사용한다. 


http의 특징

어플리케이션 레이어(L7)

http는 OSI모델에서 보면 마지막에 있는 7번째 계층인 어플리케이션 레이어이다. OSI모델을 설명하려면 또 시간이 걸리니 계층이 낮아질수록 물리장비(하드웨어)와 가까워지고 낮을 수록 소프트웨어와 가깝다고 생각하면 된다. 즉 http는 하드웨어 보다는 소프트웨어 간에 통신을 주고 받을 때 주로 사용하는 프로토콜이라는 뜻이다. 데이터가 전송될때 하드웨어 장비에서 패킷단위로 전송이 될 텐데, 일반적으로는 http프로토콜을 사용하면서는 고려할 필요가 없다는 얘기이다. 


단순함

HTTP는 단순한 디자인을 가지고 있다. 무슨 의미이냐면 HTTP통신으로 주고 받는 메시지를 사람이 읽을 수 있고, 테스트하기가 쉽다. 


확장성

http헤더는 확장하기가 쉽다. 클라이언트와 서버간에 서로 주고 받을 값을 맞추기만 한다면 추가로 커스텀한 헤더를 만들어서 주고 받을 수 있고 새로운 기능을 추가할 수 있다. 


상태가 없음(stateless)

http는 상태가 없다. 이말은 무슨뜻이냐면 서버가 클라이언트의 이전 상태를 유지하지 않는다는 의미이다. 클라이언트가 연결을 끊으면 이전상태에 대한 것은 알 수가 없다. 다만 세션이나 쿠키등의 장치를 통해서 서버가 클라이언트의 상태를 알도록 할 수 있다. 


마무리 

http를 조사하면 할수록 생각보다 깊이있고 재미있는 주제였다. 20년도 넘은 스펙이 아직 표준이라는 것은 정말로 확장성이 뛰어나고 초심자도 잘 사용할 수 있도록 잘 만들었기 때문이라고 생각한다. http2가 생각보다 잘 지원되지 않는 것은 http1.1보다는 조금 공부를 해야되기 때문일 것이다. 개인적으로는 http2를 제대로 써보지도 못했는데, 나온지가 벌써 7년이라니 반성하게 된다. 모든 스펙을 하나하나 알기는 어렵지만 올해에는 참고자료에 있는 것들을 모두 이해할 수 있도록 해봐야겠다. 


참고 

https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP

https://ykarma1996.tistory.com/86

http://www.yes24.com/Product/Goods/71849916

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari