18장 웹 호스팅
콘텐츠 리소스를 저장, 중개, 관리하는 일을 통틀어 웹 호스팅이라 한다.
호스팅 서비스
- 월드 와이드 웹 초기에는 각 회사가 자신의 웹 서버를 관리 햇다.
- 점차 모든 사람들이 웹 서버를 관리하는 것이 불가능해지자, 호스팅 서비스가 등장했다.
- 호스팅 서비스는 웹 서버를 관리하고, 웹 서버를 공유하는 여러 고객에게 웹 서버를 임대해준다.
간단한 예: 전용 호스팅
- ISP가 사용자에게 웹 서버를 대여해주는 것
가상 호스팅
- 컴퓨터 한 대를 여러 고객이 공유하게 해서 저렴한 웹 호스팅서비스를 이용하는 것, 트래픽이 높지 않은 경우 사용한다.
- 각 웹 사이트는 다른 서버에서 호스팅하는 것처럼 보이겠지만, 사실은 물리적으로 같은 서버에서 호스팅되는 것이다. 최종 사용자 입장에서는 이를 구분할 수 없어야 한다.
- 호스팅 업체는 복제 서버 더미를 만들어서 서버 팜에 부하를 분산할 수 있다.
호스트 정보가 없는 가상 서버 요청
- HTTP/1.0에는 공용 웹 서버가 호스팅하고 있는 가상 웹 사이트에 누가 접근하고 있는지 식별하는 기능을 제공하지 않는다.
- 만약
http://www.joes-hardware.com/index.html
와http://www.janes-software.com/index.html
가 같은 서버에 호스팅되고 있다면, 같은 GET /index.html 요청을 하게 된다. 서버는 어떻게 이를 구분할 수 있을까?
가상 호스팅 동작하게 하기
가상 호스팅을 동작하게 하기 위한 네 가지 기술
- URL 경로를 통한 가상 호스팅
- 서버가 어떤 사이트 요청을 하는 것인지 알 수 있게 URL에 특별한 경로를 추가한다.
http://www.joes-hardware.com/joes/index.html
과http://www.janes-software.com/janes/index.html
처럼 경로에 사이트 이름을 추가한다.- 이렇게 진행하면 GET /joes/index.html 과 GET /janes/index.html 요청을 구분할 수 있다.
- 하지만 URL 기반의 가상 호스팅은 좋지않은 방법이라 사용되지 않는다.
- 포트번호를 통한 가상 호스팅
- 각 사이트에 다른 포트번호를 할당하여, 분리된 웹 서버의 인스턴스가 요청을 처리한다.
- 비표준 프로토콜을 붙여야 하기에 사용되지 않는다.
- IP 주소를 통한 가상 호스팅
- 각 가상 사이트에 별도의 IP 주소를 할당하고 모든 IP 주소를 장비 하나에 연결한다. 웹 서버는 IP주소로 사이트 이름을 식별한다.
- 각 사이트마다 가상 IP를 한 개 이상 할당한다.
- 가상 IP 호스팅은 IP 주소 부족 문제가 생길 수 있지만 널리 쓰인다.
- Host 헤더를 통한 가상 호스팅
- HTTP/1.1은 Host 헤더를 통해 가상 호스팅을 지원한다.
HTTP/1.1 Host 헤더
- HTTP/1.1은 Host 헤더는 RFC 2068에 정의되어 있다.
- 문법은
Host = "Host" ":" host [ ":" port ]
- HTTP 요청 메시지에 전체 URL이 기술되어 있으면 Host 헤더는 URL에 있는 호스트 이름과 포트번호를 사용한다.
- URL에 호스트 이름이 없으면 Host 헤더는 요청 메시지에 있는 호스트 이름과 포트번호를 사용한다.
- HTTP/1.1 웹 서버는 Host 헤더 필드가 없는 HTTP/1.1 요청 메시지에 400 상태 코드를 응답해야한다.
안정적인 웹 사이트 만들기
웹 사이트에 장애가 생기는 상황
- 서버 다운
- 트래픽 폭증
- 네트워크 장애나 손실
미러링 된 서버 팜
서버 팜은 서로 대신할 수 있고 식별할 수 있게 설정된 웹 서버들의 집합이다.
서버 팜의 서버에 있는 콘텐츠들은 한 곳에 문제가 생기면 다른 한 곳에 대신 전달할 수 있게 미러링 할 수 있다.
- 마스터 원 서버 : ‘콘텐츠의 원본 제작자’ 같이 행동함
- 복제 원 서버 : 마스터 원 서버로부터 콘텐츠를 받은 미러링 된 서버
서버 팜에 배포하는 가장 간단한 방법 하나는, 네트워크 스위치를 사용해서 서버에 분산 요청을 보내는 것이다.
서버에 호스팅 되고 있는 각 웹 사이트의 IP주소는 스위치의 IP 주소가 된다.
클라이언트의 요청이 특정 서버로 가는 두 가지 방법
HTTP 리다이렉션
콘텐츠에 대한 URL은 마스터 서버의 IP를 가리키고, 마스터 서버는 요청을 받는 즉시 복제 서버로 리다이렉트시킨다.
DNS 리다이렉션
콘텐츠의 URL은 네 개의 IP 주소를 가리킬 수 있고, DNS서버는 클라이언트에게 전송할 IP 주소를 선택할 수 있다.
콘텐츠 분산 네트워크
CDN : 특정 콘텐츠의 분산을 목적으로 하는 단순한 네트워크, 네트워크의 노드는 서버, 대리서버, 혹은 프락시 서버가 될 수 있다.
CDN의 대리 캐시
대리 캐시는 복제 원 서버를 대신해 사용될 수 있다. 리버스 프락시라고도 불린다.
원 서버 집합을 대신해 요청을 받는다.
- 대리 서버와 미러링 된 서버의 차이점
- 대리 서버는 수요에 따라 동작한다.
- 원 서버의 전체 콘텐츠를 복사하지는 않는다.
- 클라이언트가 요청한 콘텐츠만 저장한다.
CDN의 프락시 캐시
전통적인 프락시 캐시는 어떤 웹 서버 요청이든지 다 받을 수 잇지만, 대리 서버를 사용하면, 프락시 캐시의 콘텐츠는 요청이 있을 때만 저장될 것이다.
이때 프락시 캐시는 레이어2 혹은 레이어3 장비가 중간에서 웹 트래픽을 가로채 처리하기도 한다.
웹 사이트 빠르게 만들기
서버팜, 분산 프락시 캐시, 대리서버는 혼잡을 조절하고 네트워크 트래픽을 분산시킨다.
콘텐츠를 분산시키면 콘텐츠의 위치가 사용자와 더 가깝게 만들어주므로 콘텐츠를 서버에서 클라이언트로 전송하는 시간이 단축된다.
또 다른 웹 사이트 속도를 높이는 방법은 콘텐츠를 인코딩하는 것이다.