진짜 개발자
본문 바로가기

Web/Web

Web - HTTP 커넥션 관리(성능 향상을 위한)

728x90
TCP 성능에 대한 고려

HTTP 커넥션 관리 (성능 향상을 위한)

TCP 성능에 대한 고려

https://galid1.tistory.com/618

HTTP 프로토콜의 경우 TCP프로토콜 상위에서 동작하기 때문에, TCP 성능에 영향을 받을 수 밖에 없습니다. 따라서 고성능의 HTTP 어플리케이션을 구축하고자 하는 분은 위의 링크로 이동하여 TCP 성능에 영향을 미치는 요소를 파악하시기 바랍니다.

 

 

 

1. HTTP 성능에 영향을 미치는 요인

DNS 이름분석 시간

클라이언트는 URI에서 웹서버의 IP 주소와 Port 번호를 알아내야 합니다. 최근에 방문한 적이 있어 DNS 캐시에 남아있지 않는 이상, DNS 서비스를 통해 Domain을 IP주소로 변환해야 합니다.

 

커넥션 연결 시간

클라이언트와 서버간에 HTTP 프로토콜을 이용해 데이터를 주고 받기 위해서는 TCP 연결이 이루어져야 합니다. TCP 연결 지연시간은 새로운 커넥션을 연결할 때 마다 발생하게 됩니다.

 

Server의 데이터 처리시간

Server에서는 사용자가 요청한 서비스를 수행하기 위한 시간이 소요됩니다.

위 요인들중 특별히 큰 데이터를 주고 받지 않는이상 대부분의 지연은 TCP 커넥션 때문에 발생합니다.

 

 

 

2. HTTP 커넥션 관리의 중요성(성능향상을 위한)

커넥션 관리가 제대로 이루어지지 않는 경우 어플리케이션의 성능이 현저히 떨어질 수 밖에 없습니다. 아래의 아주 간단한 시나리오를 보시죠.

 

시나리오

웹서버에는 Image 3개를 포함하는 HTML 페이지 1개가 존재한다. 클라이언트가 이 웹서버에 HTML 페이지를 요청한다.

위 경우 클라이언트(브라우저)가 웹페이지를 출력하기 위해서는 네 개의 HTTP 트랜잭션이 필요합니다. 1개는 HTML 페이지, 3개는 Image를 얻기위한 트랜잭션입니다. 이 때, 각각의 커넥션들이 모두 새로운 TCP 커넥션을 이용한다면, 각각의 커넥션 마다 커넥션을 위한 지연Slow Start에 의한 지연이 발생할 것입니다.

 

 

 

 

3. 커넥션 성능향상 기술

3.1 병렬 커넥션

병렬 커넥션은 여러개의 TCP 커넥션을 통해 동시에 HTTP 요청을 보내는 기술을 의미합니다. 병렬 커넥션은 다음과 같은 단점들을 가지고 있습니다.

 

병렬 커넥션의 단점

  • 네트워크 대역폭이 좁은 경우 그다지 효율적이지 않다.
  • 서버에서는 다른 사용자들의 요청도 처리해야하기 때문에 많은 수의 연결을 허가하는 경우가 드물다.

 

 

3.2 지속 커넥션

웹 클라이언트는 대부분 같은 웹사이트에 여러개의 커넥션을 맺습니다. 예를들어, 웹페이지에 포함된 대부분의 이미지들은 웹페이지에 포함되어 있으며, 웹페이지 내부의 대부분의 하이퍼링크 역시 같은 웹사이트를 가리키게 됩니다. 이를 사이트 지역성이라고 합니다.

 

이러한 웹사이트의 특성때문에 TCP 커넥션을 유지하여 HTTP 요청에 재사용할 수 있습니다. 이 처럼 처리가 완료된 후에도 계속 연결된 상태를 유지하는 커넥션을 지속커넥션이라고 합니다. 지속커넥션은 커넥션을 맺기 위한 시간을 절약할 수 있으며, TCP의 Slow Start에 의한 지연역시 피할 수 있습니다.

 

지속커넥션 대비 병렬 커넥션의 단점

  • 각 트랜잭션 마다 새로운 연결을 맺고 끊기 때문에 시간이 소요됩니다.
  • 서버에서 연결수를 제한하고 있기 때문에 특정수 이상의 연결이 어렵습니다.
  • 매번 새로운 연결을 하기 때문에 Slow Start에 의한 지연이 발생합니다.

 

 

지속 커넥션의 단점

  • 커넥션을 잘못 관리하는 경우 커넥션이 쌓여 불필요한 리소스가 소모된다.

 

 

 

3.3 파이프라인 커넥션

파이프라인 커넥션은 지속커넥션은 마치 파이프라인 처럼 연결하여 성능향상을 도모한 기술을 의미합니다.