웹 호스팅

웹 호스팅

목차

  • 콘텐츠 리소스를 저장, 중개, 관리하는 일을 통틀어 웹 호스팅이라 한다.
  • 필요한 하드웨어나 소프트웨어를 직접 관리하기 어렵다면,
    호스팅 서비스나 호스팅 업체가 필요할 것이다.
  • 호스팅 업체는 서버와 웹 사이트 관리 프로그램을 대여해주고
    다양한 등급의 보안, 리포트, 사용 편의를 제공한다.

1. 호스팅 서비스

  • 웹이 빠르게 대세가 되면서,
    모든 사람이 웹 사이트를 원했지만,
    냉난방 장치가 있는 서버실을 짓고, 도메인 이름을 등록하고, 네트워크 대역폭을 구매할 기술과 시간을 가진 사람은 드물었다.
  • 그 시간을 절약하기 위해, 전문적으로 관리하는 웹 호스팅 서비스를 제공하는 여러 신사업이 만들어졌다.
    • 물리적인 장비관리 ~ 고객이 직접 콘텐츠를 제공할 수 있는 총괄적인 웹 호스팅까지
      다양한 종류의 서비스들이 있다.

1.1 예: 전용 호스팅



2. 가상 호스팅

  • 많은 웹 호스팅 업자는 컴퓨터 한 대
    여러 고객이 공유하게 해서
    저렴한 웹 호스팅 서비스를 제공한다.
    • 이를 공유호스팅 혹은 가상호스팅 이라고 부른다.
    • 각 웹사이트는 다른 서버에서 호스팅하는 것처럼 보이겠지만,
      사실은 물리적으로 같은 서버에서 호스팅되는 것이다.
      • 최종 사용자의 관점에서 가상 호스팅에 있는 웹사이트는,
        물리적으로 분리된 전용 서버에서 호스팅 하는 사이트와 구분할 수 없어야 한다.
  • 가상 호스팅은 비용, 공간, 관리에 이점이 있으므로,
    가상 호스팅을 제공하는 업체는 한 서버에 여러 개의 웹 사이트를 호스팅하려고 한다.
    • 하지만 그것이 PC한대에 웹 사이트 여러 개를 구축한다는 뜻은 아니다.
    • 호스팅 업자는 복제 서버 더미(서버 팜)를 만들고
      서버팜에 부하를 분산할 수 있다.
    • 팜에 있는 각 서버는 다른 서버를 복제한 것이며,
      수많은 가상 웹사이트를 호스팅하고 있기 때문에 관리자는 훨씬 편해진다.

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

    1. HTTP/1.0 명세는 공용 웹 서버가 호스팅하고 있는 가상 웹사이트에
      누가 접근하고 있는지 식별하는 기능을 제공하지 않는다.
    1. HTTPs://feel5ny.github.io/index.html을 요청한다면, HTTP/1.0 요청은 호스트명에 대한 별다른 언급 없이 “GET /index.html”이라는 요청을 한다.
    • 서버가 여러개의 사이트를 가상 호스팅하고 있으면, 사용자가 어떤 가상 웹 사이트로 접근하려고 하는것인지 아는 데 필요한 정보가 충분하지 않다.
    1. HTTP 대리 서버와 인터셉트 프락시 또한
      어떤 사이트를 요청하는지에 관한 정보가 필요하다.

2.2 가상 호스팅 동작하게 하기 VirtualHost

    1. HTTP 설계자들이 공유 서버인 가상 호스팅을 고려하지 않았다.
  • 이를 해결하기 위해서, HTTP 요청 메세지에
    완전한 URL도 포함해서 보내게 해서 간단히 해결하였다.
  1. URL경로를 통한 가상 호스팅
  • 서버가 어떤 사이트를 요청하는 것인지 알 수 있게
    URL에 특별한 경로 컴포넌트를 추가한다.
  • “GET /joy/index.html” 조이 사이트에 대한 요청이다.
    “GET /grey/index.html” 그레이 사이트에 대한 요청이다.
  • 거의 사용하지 않는다.
  1. 포트번호를 통한 가상 호스팅
  • 각 사이트에 다른 포트번호를 할당,
    분리된 웹 서버의 인스턴스가 요청을 처리한다.
  1. IP 주소를 통한 가상 호스팅
  • 각 가상 사이트에 별도의 IP 주소를 할당하고, 모든 IP 주소를 장비 하나에 연결한다.
  • 웹 서버는 IP 주소로 사이트 이름을 식별한다.
  • 각 가상 웹 사이트에 유일한 IP 주소를 한 개 이상 부여한다. 모든 가상 서버의 IP주소는 같은 공용 서버에 연결되어 있다.
    1. 클라A는 http://feel5ny.github.io/index.html을 요청한다.
    2. 클라A는 IP 주소를 요청해 210.89.164.90를 얻는다.
    3. 클라A는 210.89.164.90에 공용 웹서버에 TCP 커넥션을 맺는다.
    4. 클라A는 “GET /index.html HTTP/1.0” 요청을 보낸다.
    5. 실제 목적지 IP 주소를(210.89.164.90) 기록하고,
      이것이 조이의 웹사이트에 대한 가상IP 주소라는 것을 판단하고 요청을 처리한다.
    • 클라B도 유사하게 처리된다.
  • 규모가 큰 호스팅 업자에게는 약간 어려운 문제점이 있다.
    • 컴퓨터 시스템이 연결할 수 있는 장비의 IP 갯수는 제한되어있다.
    • IP주소는 희소 상품이다.
    • IP주소가 부족한 문제는 호스팅 업자가 용량을 늘리려고 서버를 복제하면서 더 심각해진다.
  • 위의 문제점이 있지만 많이 사용되는 방식이다.
  • 참고
  1. Host 헤더를 통한 가상 호스팅
    1. HTTP/1.1에 Host 요청 헤더를 정의했다.
  • 웹 서버는 Host 헤더로 가상 사이트를 식별할 수 있다.
  • 브라우저와 서버 개발자들은 서버가 원 호스트 명을 받아 볼 수 있게 HTTP를 확장했다.
  • 모든 요청에 호스트 명(그리고 포트)를 Host 확장 헤더에 기술해서 전달한다.

2.3 HTTP/1.1 Host 헤더

문법과 사용방법

  • Host 헤더에 포트가 기술되어 있지 않으면, 해당 스킴의 기본 포트를 사용한다.
  • URL에 IP주소가 있으면, Host 헤더는 같은 주소를 포함해야 한다.
  • URL에 호스트 명이 기술되어 있으면,
    • Host 헤더는 같은 호스트 명을 포함해야 한다.
    • Host 헤더는 URL의 호스트명이 가리키는 IP 주소를 포함해서는 안된다.
      • 여러개의 가상 사이트를 한개의 IP주소에 연결한 가상 호스트 서버에서 문제가 될 수 있기 때문
  • 클라가 특정 프락시 서버를 사용한다면
    • Host헤더에는 origin 서버의 호스트명과 포트를 기술해야 한다.
  • 웹 클라는 모든 요청 메세지에 Host헤더를 기술해야 한다.
  • 웹 프락시는 요청을 전달하기 전에 요청 메세지에 Host 헤더를 추가해야 한다
    1. HTTP/1.1 웹 서버는
      Host 헤더 필드가 없는 HTTP/1.1 요청 메세지를 받으면
      400 상태 코드로 응답해야 한다.

Host 헤더 해석하기

  • 호스트를 기준으로 리소스를 구분하는 모든 웹 서버는 HTTP/1.1을 통해 오는 리소스를 결정하려면 다음과 같은 규칙을 사용해야 한다.

    1. HTTP 요청 메세지에
    • 전체 URL이 기술되어 있으면
      Host 헤더에 있는 값은 무시하고
      URL을 사용한다.
    • 전체 URL이 기술되어 있지 않고
      요청에 Host 헤더가 있으면, 호스트 명과 포트를 Host 헤더에서 가져온다.
  • 전체 URL이나 Host 둘다 없을 경우
    클라에게 400 Bad Request 응답을 반환한다.

Host헤더는 누가 자동 셋팅을?

  • Host나 Connection같이, 셋팅하는 코드를 넣지 않았는데
    네트워크 탭에서 보면 종종 request 헤더에 포함되어있는 것을 보았다.
  • 이는 브라우저 엔진 내부에서 자동으로 셋팅해준다.
  • 자동 셋팅해주는 헤더는 어디서 확인 가능할까?
    • 크롬 확장 api중 webRequest API에는 라이프사이클이 존재하는데 onBeforeSendHeaders라는 콜백으로 확인 가능하다.
    • 참고


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

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

  1. 서버다운
  2. 트래픽 폭증
  3. 네트워크 장애나 손실

3.1 미러링 된 서버 팜

  • 서버팜은 서로 대신할 수 있고 식별할 수 있게 설정된 웹 서버들의 집합이다.
  • 서버팜의 서버에 있는 콘텐츠들은 한 곳에 문제가 생기면,
    다른 한 곳에서 대신 전달할 수 있게 미러링 할 수 있다.
  • 미러링된 서버는 계층적인 관계에 있다.
    • 한 서버는 (원본 콘텐츠를 가지고 있는) ‘콘텐츠의 원본 제작자’ 같이 행동한다.
      • => 마스터 원 서버라 부른다. Master Origin Server
    • 마스터 원 서버로부터 콘텐츠를 받은 미러링된 서버는
      • => 복제 원 서버라 부른다. Replica Origin Server
  • 서버 팜에 배포하는 간단한 방법 하나는
    **네트워크 스위치**를 사용해서 서버에 분산 요청을 보내는 것이다.
    • 서버에 호스팅 되고 있는
      각 웹사이트의 IP주소는
      스위치의 IP주소가 된다.
  • 마스터 원 서버는 복제 원 서버에 콘텐츠를 보낼 책임이 있다.
    • 외부에서 볼 때, 이 콘텐츠를 가리키는 IP주소는 스위치의 IP주소다.
      스위치는 서버에게 요청을 전송해야 하는 책임이 있다.
    • 미러링된 웹 서버에는 다른 위치에 있는 콘텐츠와 정확히 같은 복제본이 있다.
  • 위 그림의 시나리오에서는, 클라의 요청이 특정 서버로 가는 2가지 방법이 있다.
    1. HTTP 리다이렉션
      : 콘텐츠에 대한 URL은 마스터 서버의 IP를 가리키고,
      마스터 서버는 요청을 받는 즉시 복제 서버로 리다이렉트 시킨다.
    2. DNS 리다이렉션
      : 콘텐츠의 URL은 4개의 IP주소를 가리킬 수 있고,
      DNS 서버는 클라에게 전송할 IP주소를 선택할 수 있다.

3.2 콘텐츠 분산 네트워크 CDN

  • Contents Delivery Network
  • 콘텐츠 분산 네트워크 CDN 은 특정 콘텐츠의 분산을 목적으로 하는 단순한 네트워크이다.
  • 네트워크의 노드는
    1. 서버
    2. 대리 서버
    3. 프락시 서버

가 될 수 있다.

기본적으로 사용자가 원격지에 있는 서버(Origin Server)로 부터 Content(예. Web Object, Video, Music, Image, Document 등)를 다운로드 받을 때 가까이 있는 서버에서 받는 것보다 시간이 오래 걸리므로, 사용자와 가까운 곳에 위치한 Cache Server에 해당 Content를 저장(캐싱)하고 Content 요청시에 Cache Server가 응답을 주는 기술입니다.
참고

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

  • Gateway 캐시: 실제 요청을 담당하는 서버에서 관리되는 캐시
  • == Reverse 프락시 : forward 프락시의 반대 방향
  • 대리 서버는 복제 원 서버를 대신해 사용될 수 있다.
  • 대리 서버는 미러링 된 웹 서버처럼, 콘텐츠에 대한 요청을 받는다.
  • 그들은 특정 원 서버 집합을 대신해 요청을 받는다.
    • 이는 콘텐츠에 대한 IP주소가 알려졌기 때문에 가능하다.
      보통 원 서버와 대리 서버가 연결되며, 대리 서버는 특정 원 서버를 가리키는 요청을 받는다.

      ??

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

3.4 CDN의 프락시 캐시

  • 네트워크 레이어 캐시: ISP, 방화벽에 설치됨. shared cache
  • 전통적인 프락시 캐시는 어떤 웹 서버 요청이든지 다 받을 수 있다.
  • 대리 서버를 사용하면,
    프락시 캐시의 콘텐츠는 요청이 있을 때만 저장될 것이고,
    원본 서버 콘텐츠를 정확히 복제한다는 보장이 없다.
  • 어떤 프락시는 요청이 많이 받는 콘텐츠를 미리 로딩하기도 한다.
  • 요청이 있을 때만 저장하는 프락시 캐시
    • 레이어2 혹은 레이어3 장비(스위치 혹은 라우터)가 중간에 웹 트래픽을 가로채 처리하기도 한다.
    • 가로채기 설정은, 클라와 서버 사이의 모든 HTTP 요청이 물리적으로 캐시를 거치게 네트워크 설정을 할 수 있는지에 따라 달라진다.
    • 콘텐츠는 받는 요청에 따라서 캐시에 분산된다.


4. 웹 사이트 빠르게 만들기

  • 서버 팜이나 분산 크락시 캐시, 대리 서버는 혼잡을 조절하고 네트워크 트래픽을 분산시킨다.

  • 콘텐츠를 분산시키면,
    그 콘텐츠를 사용자에게 더 가깝게 만들어 주므로,
    콘텐츠를 서버에서 클라로의 전송하는 시간이 단축된다.

  • 리소스의 로딩속도를 좌우하는 요소

    1. 리다이렉션
      어떻게 요청과 응답이 클라와 서버 사이에서 연결을 맺고 인터넷을 가로질러 데이터를 전송하는 지.
    2. 인코딩 콘텐츠를 인코딩 하는 것.


참고자료

📚