TIL(2020.11.19)

Awesome·2020년 11월 19일
0

TIL

목록 보기
42/46
post-custom-banner

5부. 콘텐츠 발행 및 배포

17장. 내용 협상과 트랜스코딩 준수님 노션
21장. 로깅과 사용추적 환일님 블로그

18장. 웹 호스팅

리소스를 공용 웹 서버에 올려놓으면 인터넷을 통해 이용할 수 있다. 콘텐츠 리소스를 저장, 중개, 관리하는 일을 통틀어 웹 호스팅이라고 한다. 호스팅 업체는 서버와 웹 사이트 관리 프로그램을 대여해주고 다양한 등급의 보안, 리포트, 사용 편의를 제공한다.

이 장에서는 웹 호스팅 서비스의 가장 중요한 속성 몇 가지와 그것들이 어떻게 HTTP 와 상호작용하는지 다룬다.

  • 여러 웹 사이트를 같은 서버에 가상 호스팅 하는 방법. 그리고 그것이 HTTP에 끼치는 영향
  • 트래픽이 많은 상황에서 안정적인 사이트를 구축하는 방법
  • 웹 사이트 로딩을 더 빠르게 하는 방법

18.1 호스팅 서비스

WWW 초기에는 각 회사가 자체 하드웨어를 구매하고 망을 구축하여 웹 서버 소프트웨어를 관리했다. 웹이 대세가 되면서 많은 이들이 자체 서버를 구축 및 관리할 사람을 필요로 했지만 그리 많지 않았다. 이를 대신 전문적으로 관리하는 웹 서비스 호스팅 업체들이 생겨났다.

18.1.1 전용 호스팅

ISP(Internet Service Provider) 로부터 서버를 임대하여 전용의 네트워크와 물리적인 서버를 사용하는 것을 말한다.

18.2 가상 호스팅

트래픽이 많지 않아도 서버를 사용하고 싶은 사람들에게 전용 서버는 너무 비싸다. 이들에게 저렴하게 웹 서버를 제공하기 위해 컴퓨터 한 대를 여러 고객이 공유하게끔 한 것을 가상 호스팅이라고 한다. 실제로는 PC 한 대에 1000개의 웹 사이트를 구축한다는 것이 아니라, 서버 팜이라고 부르는 복제 서버 더미를 통해 부하를 분산한다.

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

HTTP/1.0 명세에는 공용 웹 서버가 호스팅하고 있는 가상 웹 사이트에 누가 접근하고 있는지 식별하는 기능이 제공되지 않는다. 만약 A 사이트와 B 사이트가 공용 웹 서버 위에서 돌고 있다면, 두 사이트에 각각 접근하는 클라이언트들은 모두 동일하게 공용 서버로 GET /index.html 요청을 보내기 때문에 구분이 어렵다.

18.2.2 가상 호스팅 동작하게 하기

HTTP 설계자들이 가상 호스팅을 고려하지 않았기 때문에 위와 같은 문제가 발생했다. HTTP/1.1 에서는 아래의 네 가지 기술을 통해서 이를 해결한다.

  • URL 경로를 통한 가상 호스팅 : URL에 특별한 경로 컴포넌트를 추가
  • 포트번호를 통한 가상 호스팅 : 각 사이트에 다른 포트번호를 할당
  • IP 주소를 통한 가상 호스팅 : 각 사이트에 별도의 IP 주소 할당하고 모든 IP 를 장비 하나에 연결한다.
  • Host 헤더를 통한 가상 호스팅 : Host 요청 헤더 정의

1) URL 경로를 통한 가상 호스팅
www.example.com/joe/index.html -> GET /joe/index.html
www.test.com/marry/index.html -> GET /marry/index.html

위와 같이 URL을 통해서 구분한다. 하지만 불필요한 접두어가 붙고 .com 으로 끝나는 일반적인 사이트에서는 적용되지 않는다. 좋지 않은 방법이라 거의 사용되지 않는다.

2) 포트번호를 통한 가상 호스팅
각각 비표준 포트 번호를 할당하는 것이다. 82, 85 이런 식이다. 역시 좋은 방법은 아니다. 클라이언트는 URL에 비표준 포트를 쓰지 않고서도 리소스에 접근하길 원한다.

3) IP주소를 통한 가상 호스팅
가상 IP를 부여하고 이는 공용 서버와 연결되어 있다. 나쁘지 않은 방법이지만 규모가 큰 호스팅 업자에게는 문제가 있다.

  • 컴퓨터 시스템에 연결할 수 있는 장비의 IP 개수에 제한이 있다.
  • IP 주소는 희소 상품이다.
  • 호스팅 업자가 용량을 늘리기 위해 서버를 복제하는 경우에는 그만큼의 IP 주소가 더 필요해진다.

그럼에도 널리 쓰이는 방식이다.

4) Host 헤더를 통한 가상 호스팅
요청 헤더에 Host 헤더를 보낸다. HTTP/1.1 명세를 따르려면 Host 헤더를 반드시 기술해야 한다.

GET /index.html HTTP/1.1
Host: www.example.com

18.2.3 HTTP/1.1 Host 헤더

Host 헤더는 원본 URL에 있는 요청 리소스에 대한 인터넷 호스트와 포트번호를 기술한다.
Host = "Host" ":" 호스트[":"포트]

  • Host 헤더에 포트가 없으면 해당 스킴의 기본 포트를 사용한다.(HTTP는 80번 포트)
  • URL에 IP주소가 있으면 Host 헤더는 이를 포함해야 한다.
  • URL에 호스트 명이 있으면 Host 헤더는 이를 포함해야 한다.
  • URL에 IP주소, 호스트 명이 둘 다 있으면 IP주소는 포함하면 안된다. 그 이유는 여러 개의 IP 주소를 한 개의 호스트 명에 연결했을 경우 문제가 발생한다.
  • 클라이언트가 특정 프록시 서버를 사용하면, Host 헤더에는 원 서버의 호스트 명과 포트를 기술해야 한다.
  • 클라이언트는 모든 요청에 Host 헤더를 포함해야 한다.
  • Host 헤더가 없으면 400 코드로 응답한다. 기본 페이지로 보내거나 브라우저 업그레이드를 제안하는 에러 페이지를 반환할 수도 있다.
  • 가상 호스팅을 지원하지 않는 경우에는 HTTP 요청 메시지에 스킴과 호스트 컴포넌트를 포함한 전체 URL이 기술되어 있으면 Host 헤더를 무시하고 URL 을 사용한다.

18.3 안정적인 웹 사이트 만들기

아래와 같은 웹 사이트 장애에 대응하는 방법에 대해 알아본다.

  • 서버 다운
  • 트래픽 폭증
  • 네트워크 장애 및 손실

18.3.1 미러링 된 서버 팜

서버 팜은 서로 대신할 수 있고 식별할 수 있게 설정된 웹 서버들의 집합이다. 서버 팜의 서버에 있는 콘텐츠들은 한 곳에 문제가 생기면 다른 곳에서 대신 전달할 수 있게 미러링할 수 있다. 콘텐츠 원본을 가지고 있는 마스터 원 서버와 이로부터 콘텐츠를 받은 미러링 된 서버인 복제 원 서버가 있다.

네트워크 스위치(서버 간 네트워크를 서로 연결하는 통신 장비)를 사용해서 서버에 분산 요청을 보내고, 서버에 호스팅 되고 있는 각 웹 사이트의 IP 주소는 스위치의 IP주소가 된다.

분산 방식은 두 가지다.

  • HTTP 리다이렉션 : 콘텐츠 URL은 마스터 서버의 IP를 가리키고, 마스터 서버가 복제 서버로 리다이렉트시킨다.
  • DNS 리다이렉션 : 콘텐츠 URL은 복제 서버들의 IP를 가리키고, DNS 서버가 그 중 전송할 주소를 선택한다.

18.3.2 콘텐츠 분산 네트워크

콘텐츠 분산 네트워크(CDN)은 특정 콘텐츠의 분산을 목적으로 하는 단순한 네트워크다.

18.3.3 CDN의 대리 캐시

리버스 프록시라고도 부르는 대리 서버는 미러링된 웹 서버처럼 콘텐츠에 대한 요청을 대신 받는다. 미러링된 서버와의 차이점은 원 서버의 콘텐츠를 복사하지 않는다는 점이다. 클라이언트가 요청하는 콘텐츠만 저장할 뿐이다. 따라서 대리 서버의 캐시에 콘텐츠가 분산되는 방식은 클라이언트로부터 받는 요청에 따라 달라진다. 원 서버는 대리 서버에 캐싱된 콘텐츠를 업데이트할 의무는 없다. 많은 요청이 있는 콘텐츠를 빠르게 제공하기 위한 기능을 하기도 한다.

18.3.4 CDN의 프록시 캐시

프락시 캐시는 대리 캐시와 다르게 별도의 연동이나 IP 주소 합의등이 필요없다. 또한 원 서버 콘텐츠를 정확히 복제한다는 보장이 없다. 프락시 서버는 레이어2 혹은 레이어3 장비 중간에서 웹 트래픽을 가로채 처리하기도 한다.

18.4 웹 사이트 빠르게 만들기

  • 서버 팜, 프록시 캐시, 리버스 프록시 등을 통해 네트워크 트래픽 분산
  • 콘텐츠 압축(gzip)
profile
keep calm and carry on
post-custom-banner

0개의 댓글