[HTTP_NETWORK] HTTP와 연계하는 웹 서버

업데이트:

이번 시간에는 HTTP와 연계하는 웹서버에 대해 알아보자.


1. 멀티 도메인을 가능하게 하는 가상호스트

웹서버는 1대의 서버에서 멀티 도메인으로 웹사이트를 실행하거나 중계 서버를 두어 통신 효율을 올릴 수 있다.

HTTP/1.1 에서는 하나의 HTTP 서버에 여러 개의 웹 사이트를 실행할 수 있다. 예를 들어 웹 호스팅을 제공하는 사업자는 1대의 서버에 여러 고객의 웹 사이트를 넣을 수 있다. 고객마다 다른 도메인을 가지고 다른 웹 사이트를 실행할 수 있다. 이를 위해 가상 호스트 라는 기능을 사용하고 있다. 가상 호스트를 사용하면 물리적인 서버는 1대지만 가상으로 여러 대가 있는 것처럼 설정이 가능하다.

HTTP를 이용해서 클라이언트가 서버에 액세스 할 때는 1q1w.github.io 와 같은 호스트 명이나 도메인 명이 주로 사용된다. 인터넷에서 도메인명은 DNS에 의해서 IP 주소로 변환되고 난 뒤 액세스하게 된다. 결국 Request가 서버에 도착한 시점에는 IP 주소를 기준으로 액세스하게 된다. 이 때 1대의 서버 안에 여러 도메인이 있는 경우 어떤 도메인에 대한 액세스인지 알 수 없다. 같은 IP 주소에서 다른 호스트명과 도메인명을 가진 여러 웹사이트가 실행되는 가상 호스트 시스템이 있기 때문에, HTTP 리퀘스트를 보내는 경우 호스트명과 도메인명을 완전하기 포함한 URI를 지정하거나, 반드시 Host 헤더 필드에 지정해야 한다.

2. 통신을 중계하는 프록시, 게이트웨이, 터널링

HTTP는 클라이언트와 서버 이외에 프록시, 게이트웨이, 터널링과 같은 통신을 중계하는 프로그램과 서버를 연계하는것도 가능하다. 이러한 프로그램과 서버는 다른 서버에 리퀘스트를 중계하고 서버로부터 받은 리스폰스를 클라이언트에 반환하는 역할을 담당한다.

1) 프록시

  • 서버와 클라이언트 역할을 하는 중계 프로그램
  • 클라이언트로부터 받은 리퀘스트를 다른 서버에 전송
  • 클라이언트로부터 받은 리퀘스트 URI를 변경하지 않고 그 다음 리소스를 가지고 있는 서버에 전송
  • 리소스 본체를 가진 서버를 오리진서버라 한다. 오리진 서버로부터 돌아온 리스폰스는 프록시 서버를 경유해 클라이언트에 반환
  • HTTP 통신을 할 때 여러대의 프록시를 경유하는것도 가능. 중계시에는 via 헤더 필드에 경유한 호스트 주소를 추가해야 한다.
  • 캐시를 이용한 네트워크 대역을 효율적으로 사용하는것, 조직 내에서 특정 웹사이트에 대한 액세스 제한, 액세스 로그를 획득하는 정책을 지키려는 목적으로 주로 사용.
  • 캐싱프록시란 리스폰스를 중계할 때 프록시 서버에 리소스 캐시를 보존하는 방식. 프록시에 다시 동일한 리퀘스트가 오는 경우 오리진 서버와 통신을 하지 않고 캐시를 리스폰스로 되돌려줌
  • 투명프록시란 리퀘스트와 리스폰스 중계시 메시지 변경을 하지 않는 타입을 의미함. 메시지 변경을 가하는 타입은 비투과 프록시라고 한다

2) 게이트웨이

  • 다른 서버를 중계하는 서버로 클라이언트로부터 수신한 리퀘스트를 리소스를 보유한 서버인것처럼 수신. 경우에 따라 클라이언트는 상대가 게이트웨이라는걸 알지 못하는 경우도 있음
  • 프록시와 유사. 클라이언트와 게이트웨이 사이를 암호화하는 등 안전하게 접속해서 통신의 안전성을 높이는 역할
  • 데이터베이스에 접속해 SQL 쿼리를 사용해 데이터를 얻는 곳, 신용카드 결제 시스템 등과 연계할때 사용된다.

3) 터널

  • 서로 떨어진 두 대의 클라이언트와 서버 사이를 중계하며 접속을 주선하는 중계 프로그램
  • 요구에 따라 다른 서버와의 통신 경로를 확립한다.
  • 클라이언트는 SSL과 같은 암호화 통신을 통해 서버와 안전하게 통신할 때 사용
  • 터널은 HTTP 리퀘스트를 해석하려하지 않음. 리퀘스트를 그대로 서버에 전송. 터널은 통신하고있는 양쪽 끝의 접속이 끊어지면 종료된다.

3. 리소스를 보관하는 캐시

캐시는 프록시 서버와 클라이언트의 로컬 디스크에 보관된 리소스의 사본을 말한다. 캐시를 사용하면 리소스를 가진 서버에의 액세스를 줄이는것이 가능하기 때문에 통신량과 통신 시간을 절약할 수 있다. 캐시 서버는 프록시 서버의 하나로 캐싱 프록시로 분류된다. 결국 프록시가 서버로부터 리스폰스를 중계할 때 프록시 서버 상의 리소스 사본을 보관한다. 캐시 서버의 장점은 같은 데이터를 여러번 오리진 서버에 전송할 필요가 없다는 것이다.

캐시를 사용하다 보면 오리진 서버에 있는 원본 리소스가 갱신되는 경우가 있다. 따라서 캐시를 가지고 있더라도 클라이언트의 요구나 캐시의 유효기간 등에 의해 오리진 서버에 리소스의 유효성을 확인하거나 새로운 리소스를 다시 획득하는 경우도 있다.

캐시 서버만 캐시를 가지고있는게 아니라 클라이언트가 사용하는 브라우저에서도 캐시를 가질 수 있다. IE에서 보관하는 캐시는 인터넷 임시파일이라 부른다. 브라우저가 유효한 캐시를 가지고 있는 경우 서버에 액세스하지 않고 로컬 디스크에서 리소스를 불러온다. 캐시 서버와 마찬가지로 리소스가 오래된 것으로 판단되는 경우 오리진 서버에 유효성을 확인하거나 새로운 리소스를 획득하러 가는 경우가 있다.