# 18. Web Hosting

* **웹호스팅: 콘텐츠 리소스를 저장, 중개, 관리하는일을 통틀어 웹 호스팅이라고한다.**
* 호스팅은 웹서버의 가장 중요한 기능 중 하나이다.
  * 콘텐츠를 저장해서 제공하고
  * 관련 로그에 직접 접근하거나
  * 이를 관리하는 데 서버가 필요하다.
* 필요한 하드웨어, 소프트웨어를 직접 관리하기 어렵다면 호스팅 서비스나 호스팅 업체가 필요할 것이다.
* 호스팅 업체는 서버와 웹사이트 관리 프로그램을 대여해주고 다양한 등급의 보안, 리포트, 사용편의를 제공한다. 보통 호스팅 업체는 경제적이면서 믿을수 있고 성능 좋은 웹사이트를 제공하기 위해 잘 손상되지 않는 공용 웹 서버에 올린다.

## 1) 호스팅 서비스

* WWW 초기에는 각 회사가 자체 컴퓨터 하드웨어를 구매하고, 자체 망을 구축하여, 자체 네트워크 연결을 확보하고, 자체 웹 서버 소프트웨어를 관리했었다.
* 웹이 대세가 되면서 모든 사람드이 웹 사이트를 원했으나, 냉난방 장치가 있는 서버실을 짓고 도메인 이름을 등록하고 네트워크 대역폭을 구매할 기술과 시간을 가진 사람은 드물었다. 이 시간을 줄이기 위해 전문적으로 관리하는 웹 호스팅 서비스를 제공하는 여러 신사업이 만들어졌다.
* 물리적 장비 관리(공간, 냉난방, 연결)에서부터, 고객이 직접 콘텐츠를 제공할 수 있는 총체적 웹 호스팅까지 다양한 종류의 서비스들이 있다.
* 앞으로 호스팅 웹 서버가 무엇을 제공하는지 초점을 맞춰보자.

## 2) 가상 호스팅

* 많은 사람이 트래픽이 높은 사이트는 아니더라도 웹 공간을 가지고 싶어한다. 이런 사람들의 웹 공간은 대부분의 시간 동안에는 놀고 있을 것이기 때문에, 이들에게 한달에 수백 달러라는 비용이 드는 전용 웹 서버를 제공하는 것은 낭비다.
* 많은 웹 호스팅 업자는 컴퓨터 한대를 여러 고객이 공유하게 해서 저렴한 웹 호스팅 서비스를 제공한다. 이를 공유 호스팅 혹은 가상 호스팅이라고 부른다.
* 이 웹 사이트는 다른 서버에서 호스팅하는 것처럼 보이겠지만, 사실은 물리적으로 같은 서버에서 호스팅되는 것이다.
* 최종 사용자 관점에서 가상 호스팅에 있는 웹 사이트는 물리적으로 분리된 전용서버에서 호스팅하는 사이트와 구분할 수 없어야한다.
* 가상 호스팅은 비용,공간, 관리의 이점이 있으므로 가상호스팅을 제공하는 업체는 한 서버에 수십, 수백, 수천개의 웹 사이트를 호스팅하려고 한다. (PC 한대에 웹사이트를 1000개 구축한다는 뜻은 아님)
* 복제 서버 더미(=서버 팜)를 만들고, 부하를 분산시킨다. 팜에 있는 각 서버는 다른 서버를 복제한 것.

### ① 호스트 정보가 없는 가상 서버 요청

* HTTP/1.0 명세는 공용 웹 서버가 호스팅하고 있는 가상 웹사이트에 누가 접근하고 있는지 식별하는 기능을 제공하지 않는다.
* 서버가 여러개의 사이트를 가상 호스팅하고 있으면, 사용자가 어떤 가상 웹 사이트로 접근하려고 하는것인지 아는 데 필요한 정보가 충분하지 않다.
* 두 요청이 (서로 다른 웹 사이트에) 완전히 다른 문서를 요청하더라도 요청 자체가 똑같이 생겼다. 문제는, 웹사이트 호스트 정보가 요청에서 제거된다는 것이다.
* HTTP 대리서버(리버스 프락시), 인터셉트 프락시 또한 어떤 사이트를 요청하는지에 관한 정보가 필요하다.
* HTTP/1.1 은 이 문제를 해결하기 위해 Host 헤더를 지원한다.

### ② 가상 호스팅 동작하게 하기

* 호스트 정보를 HTTP 요청 명세에 넣지 않은 것은 각 웹 서버가 정확히 한 웹사이트만 호스팅할것이라고 잘못예측한 HTTP 명세의 실수였다. (공유 서버인 가상 호스팅을 고려하지 않았다.)
* 그래서 URL에 있는 호스트명 정보는 필요 없는 것으로 여겨 명세에서 제외하고 단순히 경로 컴포넌트만 전송하도록 설게했다.
* 이를 해결하기 위해서, HTTP 요청 메세지에완전한 URL도 포함해서 보내게 해서 간단히 해결하였다.
* HTTP/1.1 을 지원하는 서버는 HTTP 요청 메시지에 있는 전체 URL을 처리할 수 있어야한다.
* 하지만 기존에 있던 모든 애플리케이션이 명세에 맞추어 업그레이드하기까지 오랜 시간이 걸릴 것이고, 그래서 4가지 기술이 나타났다.
  * **URL경로를 통한 가상 호스팅**: 공유 서버에 있는 각 사이트에 서로 다른 URL 경로를 할당해서 각각을 강제로 구분할 수 있다. 일반적으로 거의 사용되지는 않는다.
  * **포트번호를 통한 가상 호스팅**: 경로명 변경 대신 웹서버 별로 다른 포트를 할당한다. 단, 사용자는 URL에 비표준 포트를 쓰지 않고도 리소스를 찾기 원한다.
  * I**P 주소를 통한 가상 호스팅**: 가상 IP를 할당. 각 가상 웹사이트에 유일한 IP 주소를 한 개 이상 부여. IP 호스팅은 같은 IP 주소 부족 문제가 생길 수 있음에도 불구하고 널리 쓰인다.
  * **Host 헤더를 통한 가상호스팅**: 모든 요청에 호스트명(그리고 포트)을 Host 확장 헤더에 기술해서 전달.(HTTP/1.1 명세를 따르려면 반드시 기술해야한다.) `Host = "Host" ":" 호스트 [ ":" 포트]`

## 3) 안정적인 웹사이트 만들기

웹사이트에 장애가 생기는 몇 가지 상황 예

* 서버 다운
* 트래픽 폭증: 갑자기 많은사람이 동시에 몰려드는 상황. 갑작스러운 트래픽 폭증은 웹서버에 과부하를 주어 느려지게 하거나 완전히 멈춘다.
* 네트워크 장애 또는 손실

이런 일반적인 문제를 에측하고 대응하는 몇가지 방법을 살펴보기.

### ① 미러링된 서버 팜

* 서버팜이란: 서로 대신할 수 있고, 식별할 수 있게 설정된 웹서버들의 집합
* 서버팜의 서버에 있는 콘텐츠들은 한 곳에 문제가 생기면 다른 한 곳에서 대신 전달할 수 있게 미러링 할 수 있다.
* 보통 미러링 된 서버는 계층적인 관계에 있다.
  * 한 서버는 '콘텐츠의 원본 제작자' 같이 행동한다. (원본 콘텐츠를 가진 서버, **마스터 원서버**)
  * 마스터 원 서버로부터 콘텐츠를 받은 미러링된 서버는 **복제원서버**라고 부른다.
* 서버팜에 배포하는 간단한 방법 하나는, 네트워크 스위치를 사용해서 서버에 분산요청을 보내는 것이다.
  * 서버에 호스팅 되고있는 각 웹사이트의 IP주소는 스위치의 IP주소가 된다.
* 마스터 원서버는 복제 원 서버에 콘텐츠를 보낼 책임이 있다.
  * 외부에서 볼 때, 이 콘텐츠를 가리키는 IP주소는 스위치 IP주소이다.
  * 스위치는 서버에게 요청을 전송해야하는 책임이 있다.
  * 미러링된 웹서버에는 다른 위치에 있는 콘텐츠와 정확히 같은 복제본이 있다.

### ② 콘텐츠 분산 네트워크(CDN)

* 특정 콘텐츠의 분산을 목적으로 하는 단순한 네트워크이다.
* 네트워크의 노드는 서버, 대리서버, 혹은 프락시 서버가 될 수 있다.

### ③ CDN의 대리캐시 (=리버스 프락시)

* 미러링된 웹서버처럼 콘텐츠에 대한 요청을 받는다.
* 대리서버는 수요에 따라 동작을 한다.
* 원서버의 콘텐츠를 복사하지는 않는다. 클라이언트가 요청하는 콘텐츠만 저장할 뿐이다.
* 대리서버의 캐시에 콘텐츠가 분산되는 방식은 그들이 받는 요청에 따라 달라진다.
* 원서버는 콘텐츠를 업데이트 해줄 의무는 없다.
* 많은 요청이 있는 콘텐츠를 빠르게 제공하기위해, 사용자가 요청하기도 전에 미리 가져오기 기능을 가진 대리 서버도 있다.

### ④ CDN의 프락시 캐시

* 레이어2, 레이어3장비가 중간에서 웹트래픽을 가로채 처리하기도 한다.
* 가로채기 설정은 클라이언트와 서버 사이의 모든 HTTP 요청이 물리적으로 캐시를 거치게 네트워크 설정을 할 수 있는지에 따라 달라진다.
* 콘텐츠는 받는 요청에 따라 캐시에 분산된다.

## 4) 웹사이트 빠르게 만들기

* 서버팜, 분산프락시 캐시, 대리서버는 혼잡을 조절하고, 네트워크 트래픽을 분산시킨다.
*   콘텐츠를 분산시키면 그 콘텐츠를 사용자에게 더 가깝게 만들어주므로,&#x20;

    서버에서 클라이언트로 콘텐츠를 전송하는 시간이 단축된다.
* 리소스의 로딩 속도를 좌우하는 핵심요소는 어떻게 요청과 응답이 클라이언트와 서버 사이에서 연결을 맺고 인터넷을 가로질러 데이터를 전송하는지에 달려있다.
*   웹 사이트 속도를 높이는 또다른 접근방법은 콘텐츠를 인코딩하는 것이다.&#x20;

    (클라이언트가 받은 압축을 해제할 수 있다는 가정하에, 콘텐츠를 압축하는 것.)

참조

1. 호스팅: 웹호스팅과 서버 호스팅? [https://www.youtube.com/watch?v=pLCY29axvuo](https://www.youtube.com/watch?v=pLCY29axvuo)
