지속 연결&파이프라인화

채재헌·2022년 12월 2일
0
post-thumbnail

🎈 목차

1. 지속 연결로 인한 접속량 절약

2. 쿠키를 사용한 상태 관리


🥇 1. 지속 연결로 인한 접속량 절약


<배경>


HTTP 초기 버전에서는 HTTP 통신을 한 번 할 때마다 TCP에 의해 연결과 종료를 할 필요가 없었다. 초기 당시의 통신에서는 작은 사이즈의 텍스트를 보내는 정도였기 때문에, 어떠한 기능을 구현해도 문제는 없었다. 하지만 HTTP가 널리 보급되어감에 따라, 다량의 이미지를 포함한 문서 등이 늘어났다. 그러므로 현재와 같은 HTML에 여러 이미지가 포함되어 있는 경우 브라우저를 사용하여 리퀘스트를 하면 HTML문서에 포함되어 있는 이미지를 휙득하기 위해서 송신을 하여 리퀘스트를 보낼 때마다 매번 TCP 연결과 종료를 하는 쓸모없는 통신량이 늘어나게 된다.


1-(1) 지속 연결


위와 같이 이미지를 포함한 문서를 리퀘스트를 보낼 때마다 매번 TCP 연결과 종료를 하여 발생한 쓸모없는 통신량을 해결하기 위해서는 지속 연결(Persistent Connections)이라는 방법이 있다. 지속 연결의 특징은 어는 한쪽이 명시적으로 연결을 종료하짖 않는 이상 TCP 연결을 계속 유지한다는 특징을 가지고 있다.

<장점>

1) TCP 커넥션의 연결과 종료를 반복되는오버헤드를 줄여주기 때문에 서버에 대한 과부하가 경감된다.

2) 오버헤드를 줄인 만큼 HTTP 리퀘스트와 리스폰스가 빠르게 완료되기 때문에 웹페이지를 빨리 표시 될 수 있다.

<한계>

이러한 지속연결은 HTTP/1.1에서는 표준 동작이지만 HTTP/1.0에서는 정식 사양이 아니었으며, 일부 서버에서는 사양에 없는기능을 구현해서 지속연결을 가능하게 한 것도 있지만 반드시 지속 연결이 지원되고 있다고 할 수 없다.

1-(2) 파이프라인화


위의 지속연결은 여러 리퀘스트를 보낼 수 있도록 파이프라인화(HTTP pipelining)화를 간으하게 한다. 파이프라인화에 의해서, 이전에는 리퀘스트 송신 후에 리스폰스를 수신할 때까지 기다린 뒤에 리퀘스트를 발행하던것을 리스폰스를 기다리지 않고 바로 다음 리퀘스트를 보낼 수 있게 되었다.


🎉 2. 쿠키를 사용한 상태 관리


<배경>

이전에 잠깐 살펴보았던 "HTTP란 무엇일까?" 라는 단원에서 쿠키라는 개념을 설명했는데, HTTP라는 스테이트리스(stateless) 프로토콜이 과거에 리퀘스트와 리스폰스의 상태를 관리하지 않으므로 과거 상태를 근거로 현재 리퀘스트를 처리한다는 것을 불가능하다고 하였다. 물론 이 스테이리스(stateless)프로토콜에도 상태를 유지하지 않는다는 점에서 서버의 cpu나 메모리 같은 리소스의 소비를 억제할 수 있지만, 이러한 특징을 남겨둔 채 이를 해결 하기 위해 쿠키라는 시스템이 도입되었다.


<쿠키의 기능>

쿠키는 서버에서 리스폰스로 보내진 Set-Cookie라는 헤더 필드에 의해 쿠키를 클라이언트에 보존하게 된다. 다음 번에 클라이언트가 같은 서버로 리퀘스트를 보낼때 자동으로 쿠키 값을 넣어 송신을 하게 된다. 이후 서버는 클라이언트가 쿠키를 확인해서 어느 클라이언트가 접속했는지 체크하고, 서버 상의 기록을 확인해서 이전 상태를 알 수 있도록 한다.


-코드 예시

1.리퀘스트(쿠키를 가지고 있지 않는 상태)

Get/reader/HTTP/1.1
Host:www.youngun.com
*헤더 필드에 쿠키는 없다.

2.리스폰스(서버가 쿠키를 발행)

HTTP/1.1 200 OK
Date:thu, 12 Jul 2012 07:12:20 GMT
Server:Apache
<Set-CookieL sid=134077140226724: path=/:expires=Wed, =>10-Oct-
12 07:12:20 GMT>
Content-Type:text/plain :charset=UTF-8

3.리퀘스트(보관하고 있던 쿠키를 자동 송신)

GET/image/HTTP/1.1
Host: www/youngjin.com
Cookie: sid=134077140226724

느낌점: 이번 시간에 배운 지속연결로 접속량을 절약하는 방법 2가지와 쿠키라는 시스템을 알게 되었다. 먼저 지속연결로 접속량을 절약하는 방법인 지속연결 방법의 기능을 살펴보면서 이전과 같이 명시적으로 연결을 종료하지 않는 이상 TCP 연결을 계속 유지 할 수 있다는 사실을 새로 깨달았고, 이러한 지속 연결을 보충해서 리퀘스트 송신 후에 리스폰스를 기다리지 않고 다음 리퀘스트를 보낼 수 있도록하여 지속연결 시간을 절약하고 빠르게 하는 방법이 있다는것을 보고 되게 신기하였다. 그리고 마지막으로 쿠키라는 시스템 도입으로 인해 우리가 로그인을 하고 다음페이지로 넘어갈때 접속 유지가 된다는 사실을 예시를 통해 잘 이해 하였으며, 클라이언트와 서버 사이의 쿠키를 주고 받는 과정을 살펴보아 이전에 개념과 예시로만 공부했던 캐시를 더 자세히 알게되는 시간이 된것 같다.나는 앞으로 HTTP의 정리한 내용을 바탕으로 웹에 대한 이해를 더 키우고 블로그 업로드중 부족했던 점을 이렇게 계속 보안해 나갈것이며 이렇게 해서 실력이 많이 늘어났으면 좋겠당 ㅎㅎㅎ

📚 관련 서적

그림으로 배우는 HTTP&Network

profile
후회없이 도전적이고, 나의 선택을 믿는 자신이 되자!!!

0개의 댓글