- 콘텐츠 리소스를 저장, 중개, 관리하는 일을 통틀어 웹 호스팅이라 함.
- 각 조직이 가지고 있는 다양한 종류의 리소스를 웹 사이트에 편하게 배포하거나, 적절한 가격에 좋은 성능을 가진 웹 서버에 배치하는 것은 매우 중요함.
호스팅 서비스
- 간단한 예 : 전용 호스팅
- 죠의 컴퓨터 가게 온라인과 메리의 골동품 경매를 크기가 큰 웹 사이트라고 가정해보자.
- 죠와 메리가 직접 자체 서버를 구매하고 서버 소프트웨어를 직접 유지보수하는 대신, 죠와 메리에게 대여할 수 있는 고성능 웹 서버들로 구성된 랙을 아이린의 ISP가 가지고 있음.
- 죠는 아이린의 ISP가 구매해 유지보수하고 있는 전용 웹 서버를 임대함. 아이린 ISP는 대량으로 서버 장비를 구매할 수 있으며 안정적이고 검증되었으며 비용이 저렴한 장비를 선택할 수 있음.
- 여기서의 포인트는 죠와 메리가 운영하고 있는 서버의 IP 주소는 서로 다르다는 것임.
가상 호스팅
- 하지만 대부분의 웹 공간은 놀고 있는 시간이 존재함.
- 때문에 이들에게 많은 비용이 드는 전용 웹 서버를 제공하는 것은 낭비임.
- 많은 호스팅 업자는 컴퓨터 한 대를 여러 고객이 공유하게 해서 저렴한 웹 호스팅 서비스를 제공함.
- 이를
공유 호스팅
또는가상 호스팅
이라 부름.
- 각 웹 사이트는 다른 서버에서 호스팅하는 것처럼 보이겠지만, 사실은 물리적으로 같은 서버에서 호스팅 됨.


- 안타깝게도 HTTP/1.0 명세는 공용 웹 서버가 호스팅하고 있는 가상 웹 사이트가 누가 접근하는지 식별하는 기능을 제공하지 않음.
- 만약
http://www.joes-hardware.com/index.html
을 요청하면, 브라우저는www.joes-hardware.com/
에 연결을 하지만, HTTP/1.0 요청은 호스트 명에 대해 별다른 언급없이 "GET/index.html"서버가 여러 개의 사이트를 가상 호스팅하고 있음. 이는 사용자가 어떤 가상 웹 사이트로 접근하려고 하는 것인지 아는 데 필요한 정보가 충분하지 않음.

- 호스트 정보를 HTTP 요청 명세에 넣지 않은 것은, 각 웹 서버가 정확히 한 웹사이트만 호스팅할 것이라고 잘못 예측한 HTTP 명세의 실수임 (단순히 경로 컴포넌트만 전송하도록 설계).
- 가상 호스팅을 지원하기 위해 4가지 기술이 생김.
URL 경로를 통한 가상 호스팅
- 서버가 어떤 사이트를 요청하는 것인지 알 수 있게 URL에 특별한 경로 컴포넌트를 추가함.
- ex) 죠의 컴퓨터 가게 http://www.joes-hardware.com/joe/index.html, 메리의 골동품 가게 http://www.marys-antiques.com/mary/index.html라 했을 때 요청을 GET /joe/index.html, GET /mary/index.html이라 보냄.
- 다만 각 도메인 접두어가 불필요하게 붙어 거의 사용하지 않음.
포트번호를 통한 가상 호스팅
- 각 사이트에 다른 포트번호를 할당하여, 분리된 웹 서버의 인스턴스가 요청을 처리함.
- ex) 80 포트 대신 죠는 82, 메리는 83으로 할 수 있음.
- 하지만 URL에 비표준 포트를 써야 한다는 단점이 있음.
ip주소를 통한 가상 호스팅
- 각 가상 사이트에 별도 IP 주소를 할당하고 모든 IP 주소를 장비 하나에 연결하고 웹 서버는 IP 주소로 사이트 이름을 식별함.
- 클라는 http://www.joes-hardware.com/index.html로 요청함.
- 클라는 www.joes-hardware.com의 IP 주소를 요청해 209.172.34.3을 얻음.
- 클라는 209.172.34.3에 있는 공용 웹 서버에 TCP 커넥션을 맺음.
- 클라는 GET /index.html HTTP/1.0 요청을 보냄.
- 웹 서버가 응답을 전송하기에 앞서, 실제 목적지 IP 주소를 기록하고, 이것이 죠의 웹 사이트에 대한 가상 IP 주소라는 것을 판단하고, /joe 하위디렉터리에서 요청을 처리함.
- /joe/index.html 페이지를 반환함.
- 다만 규모가 아주 큰 호스팅 업자의 경우 모든 웹 사이트에 할당할 IP 주소를 얻지 못할 수 있다는 문제가 있음. 이는 호스팅 업자가 용량을 늘리려고 서버를 복제하면 각 복제된 서버에 IP 주소를 부여해야 하므로 더 심각한 문제가 발생함.
- 가상 IP 호스팅은 위와 같은 IP 주소 부족 문제가 생길 수 있음에도 널리 쓰이는 방식임.
HOST 헤더를 통한 가상 호스팅
- 브라우저와 서버 개발자들은 서버가 원 호스트명을 받아 볼수있게 HTTP를 확장함.
- 모든 요청에 호스트명(그리고 포트)을 Host 확장 헤더에 기술해서 전달함.
- 현재는 거의 모든 브라우저가 Host 헤더를 지원함.
- Host 헤더에는 원본 URL에 있는 요청 리소스에 대한 인터넷 호스트와 포트번호를 기술함.
HTTP/1.1 Host 헤더
Host = "Host" ":" 호스트[":"포트] // 예시 GET http://www.joes-hardware.com/index.html HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/4.51 [en] (X11; U; IRIX 6.2 IP22) Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, `*/*` Accept-Encoding: gzip Accept-Language: en Host: www.joes-hardware.com
- 웹 클라는 모든 요청 메시지에 Host 헤더를 기술해야 함.
- Host 헤더에 포트가 기술되어 있지 않으면, 해당 스킴의 기본 포트를 사용함.
- 클라가 특정 프락시 서버를 사용하더라도 Host 헤더에는 프락시 서버가 아닌 원 서버의 호스트 명과 포트를 기술해야 함.
- Host 헤더 필드가 없는 HTTP/1.1 요청을 받으면 400으로 응답함.
- HTTP 요청 메시지에 전체 URL이 기술되어 있으면, Host 헤더에 있는 값은 무시하고 URL을 사용한다.
- HTTP 요청 메시지에 있는 URL 에 호스트 명이 기술되어 있지 않고 요청에 Host헤더가 있으면, 호스트 명과 포트를 Host 헤더에서 가져온다.
- 1단계나 2단계에서 호스트를 결정할 수 없으면 클라이언트에 400 Bad Request 응답을 반환한다.
안정적인 웹 사이트 만들기
- 웹 사이트에 장애가 생기는 경우는 서버 다운, 트래픽 폭증, 네트워크 장애 또는 손실 등이 있음.
이런 문제를 예측하고 대응하는 방법을 알아보자.
- 미러링 된 서버 팜
- 호스팅 업자는 복제 서버 더비(서버 팜)를 만들고 서버 팜에 부하를 분산할 수 있음.
- 서버 팜은 서로 대신할 수 있고 식별할 수 있게 설정된 웹 서버들의 집합임. 서버팜의 서버에 있는 콘텐츠들은 한 곳에 문제가 생기면 다른 한 곳에서 대신 전달할 수 있게 미러링할 수 있음.
- 미러링된 서버 팜에서, 마스터 원 서버는 복제 원 서버에 콘텐츠를 보낼 책임이 있음.
- 미러링 된 웹 서버에는 다른 위치에 있는 콘텐츠와 정확히 같은 복제본이 있음.
- 마스터 서버는 클라이언트에게 콘텐츠를 제공하면서 복제 서버들에게 콘텐츠를 퍼트리는 일을 함.
- 클라이언트의 요청이 특정 서버로 가는 두 가지 방법
- HTTP 리다이렉션 - 콘텐츠에 대한 URL은 마스터 서버의 IP를 가리키고, 마스터 서버는 요청을 받는 즉시 복제 서버로 리다이렉트 시킴.
- DNS 리다이렉션 - 콘텐츠의 URL은 네 개의 IP주소를 가리킬 수 있고, DNS 서버는 클라이언트에게 전송할 IP주소를 선택할 수 있음.

- 콘텐츠 분산 네트워크(CDN)
- 콘텐츠 분산 네트워크는 특정 콘텐츠의 분산을 목적으로 하는 단순한 네트워크임.
- 네트워크의 노드는 서버, 대리서버, 혹은 프락시 서버가 될 수 있음.
- CDN의 대리 캐시
- 대리 캐시는 복제 원 서버를 대신해 사용될 수 있음.
- 대리서버는 리버스 프락시라고도 불리며, 웹 서버처럼 콘텐츠에 대한 요청을 받음.
- 대리 서버는 보통 수요에 따라서 동작함.
- 대리 서버는 원 서버의 전체 콘텐츠를 복사하지 않음.
- CDN이 대리 서버보다 캐시를 계층화하기 더 어려움.
- CDN의 프락시 캐시
- 프락시 캐시는 어떤 웹 서버 요청이든지 다 받을 수 있음.
- 프락시 캐시의 콘텐츠는 요청이 있을 때만 저장될 것이고 원본 서버 콘텐츠를 정확히 복제한다는 보장이 없음.
- 레이어2 혹은 레이어3 장비가 중간에서 웹 트래픽을 가로채 처리하기도 함.
- 가로채기 설정은, 클라이언트와 서버 사이의 모든 HTTP 요청이 물리적으로 캐시를 거치게 네트워크 설정을 할 수 있는지에 따라 달라짐.

웹 사이트 빠르게 만들기
- 앞서 언급한 내용들은 웹 사이트를 더 빠르게 하는 데 도움 됨.
- 서버 팜이나 분산 캐시 프락시 캐시나 대리 서버는 혼잡을 조절하고 네트워크 트래픽을 분산시킴.
- 콘텐츠를 분산시키면, 그 콘텐츠를 사용자에게 더 가깝게 만들어 주므로 콘텐츠를 서버에서 클라로 전송하는 시간이 단축됨.
- 리소스 로딩 속도를 좌우하는 핵심 요소는, 어떻게 요청과 응답이 클라와 서버 사이에서 연결을 맺고 인터넷을 가로질러 데이터를 전송하는지임.
- 또 다른 방법은 콘텐츠를 인코딩하는 것임.