18. 웹 호스팅

이 장에서는 다음의 내용을 포함한다.

  • 웹 호스팅이 뭔지 (간략하게)

  • 웹 호스팅 중 가상 호스팅 기법, 그리고 이 기법의 문제점 (자세히)

  • 그 외 이슈 조금

웹 호스팅이란?

웹 사이트를 통해 공유할 수 있는 모든 컨텐츠 리소스의 저장, 중개, 관리를 망라하는 일

  • 저장 : (텍스트, 이미지, 동영상, 그 외 웹 어플리케이션 등 컨텐츠로 표현하기 위해 필요한 재료) 리소스를 저장매체에 보관한다. 미러링(복제되어 다른 위치에 보관)될 수 있다.

  • 중개 : 클라이언트가 원하는 컨텐츠를 표현하기 위해 리소스를 반환한다. 리소스는 캐싱(원 서버를 거치기 전에 반환)될 수 도 있다.

  • 관리 : 저장, 중개를 위해 항상 켜져있는 서버가 필요하다. 이 서버의 관리를 말한다. (로그에 접근하거나, 설정 값을 변경하거나, 등...)

호스팅 업체

웹 호스팅을 대신 해주는 업체.

장점

경제적, 일반적으로 믿을 수 있음, 좋은 성능을 쉽게 얻을 수 있음.

단점

저장, 중개, 관리에 제약이 따름. 모든 것을 관리하는 데 필요한 자원(기술, 돈, 시간)을 줄일 수 있다.

웹 호스팅의 예시

전용 호스팅 (1:1)

가상 호스팅 (多:1)

가상 호스팅은 컴퓨팅 파워를 효율적으로 사용하기 위해 여러 고객의 컨텐츠를 하나의 장비가 호스팅한다.

가상 호스팅 문제 : 호스트 식별 문제

현대에는 거의 대부분의 브라우저가 HTTP/1.1 이상을 사용함으로써 모두 해소되었다. (클라이언트 구현시 HTTP/1.1 스펙 중 호스트 관련 스펙만 따라준다면 문제가 해소된다.)

HTTP/1.0 요청은 호스트명을 제외시킨다.

DNS를 통해 IP를 받아 커넥션을 맺은 후 동일한 호스트명을 사용한다는 가정하에 API 요청을 하기 때문.

그러나 가상 호스팅은 커넥션을 맺은 장비가 여러 웹 서비스를 호스팅할 수 있다.

이 문제는 대리 서버 (리버스 프록시), 인터셉터 프록시에도 똑같은 영향을 준다.

해결 방법

1. URL 경로를 통한 가상 호스팅 (잘 안 쓰임)

URL 경로에 가상 호스팅임을 명시적으로 표현하는 것.

예시

a라는 서비스와 b라는 서비스가 같은 공용 서버를 사용한다고 생각한다면 다음과 같이 URL 을 구성한다.

https://a-web.com/a-web/index.html

https://b-web.com/b-web/index.html

만약 위 두 URL 에 대해 GET 요청을 하게 된다면 다음과 같은 요청이 만들어진다.

GET /a-web/index.html

GET /b-web/index.html

이로써 가장 상위에 정의된 URL을 가상호스팅 정보로 사용하면 공용 서버는 클라이언트가 원하는 컨텐츠를 제공할 수 있다.

문제점

2. 포트번호를 통한 가상 호스팅 (잘 안 쓰임)

a-web 에는 81 포트

b-web 에는 82 포트를 부여한다.

문제점

  • 유저가 URL + 포트 번호 까지 기억해서 사용해야 함.

  • 포트번호는 원래 지저분해서 잘 안 쓰임. 누구나 80포트를 쓰고 싶어함.

3. IP 주소를 통한 가상 호스팅 (대체로 쓰였었음)

각 가상 웹 사이트에 IP를 한 개 이상 부여하고 모든 IP 들을 공용 서버에 연결 시킨다.

공용 서버는 요청 헤더에 명시된 목적지 IP 주소(가상 IP)를 읽어서 적절한 컨텐츠를 반환할 수 있다.

문제점

  • 하나의 컴퓨터가 연결할 수 있는 IP 개수의 제한

  • IP 주소 자체가 희소 상품이라 확보하는 데에 제약이 따름

    • 뿐만 아니라, 서버 복제가 필요하면 복제된 서버 개수만큼 IP는 더 필요해진다

4. Host 헤더를 통한 가상 호스팅 (지금은 거의 이걸 씀)

HTTP/1.0+ 버전 이후부터 새로운 확장 헤더를 만들어 사용한다.

Host 헤더는 호스트가 무엇인지 식별할 수 있다.

HTTP/1.1 의 Host 헤더 스펙

Host = "Host" ":" 호스트[ ":"포트 ]

  • 포트가 없으면 기본 스킴(80, 443)을 따름

  • URL 에 명시된 호스트 또는 IP 를 그대로 포함해야 한다

    • URL 에는 호스트명 / Host 헤더에는 IP 를 포함하면 : 위에서 다룬 가상 호스팅 문제가 발생한다 (하나의 IP가 여러 호스트를 다룰 수 있는데 이를 해결하지 못함)

    • URL 에는 IP / Host 헤더에는 호스트명을 포함하면 : URL 에 IP를 기입하면 호스트명을 알 수 없으므로 발생할 수 가 없다.

    • URL 은 명시되어있지 않을 수 있다. (커넥션 맺은 뒤 HTTP/1.0의 경우)

  • 프록시를 사용하는 경우 Host 헤더에 프록시 정보가 들어가면 안된다.

  • 클라는 모든 요청에 Host 헤더를 추가해야 함

  • 프록시는 모든 요청에 Host 헤더를 추가해야 함 (확장 헤더는 없어지니까 다시 추가함으로써 헤더가 없어지지 않게 방지)

  • 서버는 Host 헤더가 없으면 400을 내린다

Host 헤더의 누락

서버는

  • 기본 웹페이지 또는 브라우저 업그레이드를 요구하는 페이지를 반환하거나

  • 400을 내린다.

서버의 Host 헤더 해석

  • 전체 URL이 명시되어 있다면 Host 헤더를 무시한다.

  • 그렇지 않다면 Host 헤더에서 호스트명과 포트를 가져온다.

  • 어떻게도 호스트 정보를 알 수 없다면 400 Error

안정적인 웹 사이트 만들기

장애의 케이스

  • 서버 다운

  • 트래픽 폭증 (갑작스런 트래픽으로 처리해야할 일이 많아진 서버 컴퓨터가 느려지거나 멈춘다)

  • 네트워크 장애 및 손실

해결 방법

미러링 서버 팜

  • 스위치가 서버인 척 하면서 요청을 분산시킨다.

  • 마스터 원 서버는 복제된 서버들에게 변경된 리소스를 보낸다.

분산 미러링 서버

  • 마스터 서버가 각 지역의 복제된 서버에 리소스를 보내면서

  • 리디렉션 시키거나(HTTP 리디렉션) 리디렉션 되도록 구성(DNS 리디렉션)한다.

HTTP 리디렉션

마스터가 요청을 받는 즉시 리디렉션

DNS 리디렉션

컨텐츠의 URL 이 4개의 IP 주소를 가리킬 수 있고 DNS 가 요청을 분산시킴

컨텐츠 분산 네트워크 (CDN)

특정 컨텐츠를 분산할 목적으로 구성하는 네트워크

리버스 프록시 (대리 캐시) 구성

  • 위에서 다룬 미러링 서버 팜이나 분산 미러링 서버에서의 원 서버에 가기 전에 리버스 프록시를 거치도록 구성한다.

  • 리버스 프록시는 전체 리소스를 복제하는 복제 서버와는 다르게 클라이언트 요청에 따라 선택적으로 복제(캐싱)된 컨텐츠를 반환해준다.

  • 사용자가 요청하기 전에 미리 가져오는 프록시 서버도 있다.

  • 원 서버는 이 프록시에 리소스를 동기화할 의무는 없다

프록시 캐시 구성

  • 스위치가 클라이언트 요청을 가로채 프락시로 보내기도 한다.

Last updated