네트워크를 가장 시각적으로 우리에게 와닿는 계층을 뽑자면 단연 응용 계층일것이다.

그 중에서도 가장 많이 사용하는 웹에 관한 HTTP 프로토콜에 대해 이야기 해보자

 

 

0. HTTP 

http란 용어는 한번쯤 모두 접해보았던 용어일 것이다. 웹사이트 주소를 보면 앞에 https:// 와 같은 쉽게 볼 수 있다.

이때에 http가 바로 우리가 웹을 볼 수 있도록 만들어진 프로토콜을 의미한다.

웹 페이지가 우리에게 전달되는데 있어 중요한 것이 object인데 이는 웹페이지를 구성하는 다양한 종류와 크기의 객체를 의미하는데 사진, html 파일 등 하이퍼 텍스트를 통칭한다. 이 object가 어떻게 우리에게 전달되는지, 전달 방법이 http 프로토콜의 핵심이다.

 

 

http는 먼저 persistent 와 non-persistent로 나누어진다. 

http 프로토콜이 동작하기 이전에 클라이언트-서버 간에 tcp 커넥션이 먼저 이루어져야 한다.

non-persistent는 connection 하나당 하나의 object를 전송한다. 하나의 웹페이지를 전송하기 위해 connection의 맺고 끊음이 여러번 반복되어야 한다. 이것이 HTTP 1.0 이다. 반면 persistent는 이런 tcp connection을 한번만 맺고 그 connection을 통해 다중 object를 전송한다. 이건 HTTP 1.1 버전이다.

 

 

누가 봐도 persistent가 효율적이라는 것을 단번에 알 수 있을 것이다.

 

 

 


1. HTTP 2.0

HTTP 2.0부터는 훨씬 클라이언트에게 효율적인 방식으로 바뀌었다.

이전에는 용량이 큰 object가 전송이 첫번째이면 뒤에 용량이 작은 object는 전송되지 못하고 대기하고 있는 HOL(head of line) block이 발생된다. 클라이언트 입장에서는 어떠한 컨텐츠도 보지 못하고 용량이 큰 object이 전송되기만을 기다려야만 한다.

 

이를 극복하고자 2.0에서는 object를 더 작은 단위인 frame으로 나누어 모든 object가 순서에 공평하게 하나의 frame씩 전송할 수 있게 한다. 이렇게 된다면 용량이 적은 object는 얼마되지 않은 frame이 금방 전송되기에 클라이언트는 이전과는 다르게 웹페이지에 컨텐츠를 더 빠르게 볼 수 있게 된다. 아래 그림이 위 설명을 나타내준다.

 

당연하게도 총 전송 시간은 다르지 않다.

 


2. HTTP 3.0

3.0버전은 아직 크게 널리 사용되지 않고 있다고 들었다. 그래서 간단하게 설명하고 넘어가겠다.

특이하게도 3.0은 UDP 방식으로 통신한다. 또한 객체별 에러 검출 및 혼잡 제어등의 기능이 더 추가되었다고 한다.

 

 

개발을 하다보면 프론트와 통신하는 과정에서 CS지식이 실제로 많이 필요하고 사용되는 것을 느낄 수 있다.

기본이 중요하다는 것을 잊지 말고 모든 일에 임하자!

돌_멩