Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[5부 18장] 웹 호스팅 #17

Open
qkrqudcks7 opened this issue Oct 9, 2022 · 0 comments
Open

[5부 18장] 웹 호스팅 #17

qkrqudcks7 opened this issue Oct 9, 2022 · 0 comments

Comments

@qkrqudcks7
Copy link

qkrqudcks7 commented Oct 9, 2022

18장 웹호스팅

알아보기

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

18.1 호스팅 서비스

  • 웹 초기에 자체 컴퓨터 하드웨어를 구매하고 자체 망을 구축하여 직접 웹 서버를 관리했다.
  • 웹이 대세가 되면서 많은 사람들이 웹 서버를 원했지만, 서버실과 네트워크를 관리할 수 있는 사람은 많지 않았다.
  • 그 때문에 전문적으로 호스팅 서비스를 제공하는 사업이 만들어졌다.

18.1.1 간단한 예 : 전용 호스팅

  • ISP에서 서버를 구매하여 전용 웹 서버를 임대하는 것

18.2 가상 호스팅

  • 보통 사람들에게 전용 웹 서버를 사용하는 것은 낭비다(비용적인 부분에서)
  • 호스팅 업체들은 효율적으로 호스팅을 하기 위해 가상 호스팅을 사용했다.
  • 가상 호스팅이란 서버 한 대에서 여러 사람들에게 동시에 호스팅하는 것이다. (실제로는 하나의 서버가 아니라 서버팜이라 불리는 서버 그룹들이 수백개, 수천개의 웹사이트를 호스팅함)
  • VPS(Vitual Private Server)의 약자로 VPS 뜻은 물리적인 서버 컴퓨터를 가상으로 쪼갠 ‘가상 서버 컴퓨터’를 의미한다.
  • 물리적인 웹호스팅 서버를 여러 단위로 공간을 나눠 파는 것이 VPS 서비스

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

  • HTTP/1.0 에는 공용 웹 서버가 호스팅하고 있는 가상 웹 사이트에 누가 접근하고 있는지 식별하는 기능이 없다.
  • 단순히 GET/index.html이라 요청을 해서, 호스팅된 여러 웹 중 어떤 것을 원하는지 명확히 알 수 없다.

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

  • 호스트 정보를 HTTP 요청 명세에 넣지 않은 것은, 각 웹 서버가 정확히 한 웹 사이트만 호스팅할 것이라고 잘못 예측한 HTTP 명세의 실수였다(가상 호스팅을 고려하지 않은 것).
  • 이를 해결하기 위한 4가지 방법이 나왔는데

URL 경로를 통한 가상 호스팅

  • URL 사이에 특별한 경로 컴포넌트를 넣는 것

http://www.joes-hardware.com/joe/index.html , "joe" 를 넣어서 인식
http://www.mary-antiques.com/mary/index.html , "mary" 를 넣어서 인식

  • 서버에 요청이 도착하면

"GET/joe/index.html"
"GET/mary/index.html" 이렇게 인식 가능

  • 그러나 불필요한 접두어를 사용하기 때문에 혼란스러워서 사용 안 함.

포트번호를 통한 가상 호스팅

  • 각각 다른 포트번호를 할당하는 방법
  • 사용자는 URL에 비표준 포트(사용자 지정 포트)를 쓰지 않고 리소스를 찾기 원하기 때문에 사용 안 함.

IP 주소를 통한 가상 호스팅

  • 가상 웹 사이트마다 유일한 IP 주소를 할당하는 방법.
  • 모든 가상 서버의 IP 주소는 같은 공용 서버에 연결되어 있다.
  • 서버는 HTTP 커넥션의 목적지 IP 주소를 통해 클라이언트가 어떤 웹 사이트에 접근했는지 명확히 알 수 있다.
  • 그러나 연결할 수 있는 IP 개수 제한이 있다.
  • 수천개의 IP 주소를 관리하는데 비용이 크다.

Host 헤더를 통한 가상 호스팅

image

  • 브라우저 대부분이 URL의 경로 컴포넌트만 서버에 전달하므로, 중요한 가상 호스트 명 정보는 받지 못한다.
  • 그래서 모든 요청에 호스트 명을 Host 확장 헤더에 기술해서 전달하도록 했다.
  • Host 헤더는 HTTP/1.0+에서 처음 소개가 되었고 HTTP/1.1 명세에 추가되었다.

18.2.3 HTTP/1.1 Host 헤더

  • Host 헤더에 포트가 기술되어 있지 않으면, 해당 스킴의 기본 포트를 사용한다.
  • URL에 IP 주소가 있으면, Host 헤더는 같은 주소를 포함해야 한다.
  • URL에 호스트 명이 기술되어 있으면, Host 헤더는 같은 호스트 명을 포함해야 한다.
  • URL에 호스트 명이 기술되어 있으면, Host 헤더는 URL의 호스트명이 가리키는 IP 주소를 포함해서는 안 된다.
  • 클라이언트가 특정 프락시 서버를 사용한다면, Host 헤더에 프락시 서버가 아닌 원 서버의 호스트명과 포트를 기술해야 한다.
  • 웹 클라이언트는 모든 요청 메시지에 Host 헤더를 기술해야 한다. HTTP 요청이 Host 헤더를 포함하지 않으면 에러를 응답이 반환된다.

Host 헤더 해석하기

  • 가상 호스팅을 사용하지 않거나 지원하지 않는 서버에서는 리소스가 달라지기 때문에 Host 헤더 값을 무시할 것이다.
  • 만약 Host 헤더에 값이 있다면, 다음의 절차대로 값을 얻어낸다.
  1. HTTP 요청 메시지에 전체 URL이 기술되어 있다면, Host 헤더에 값을 무시하고 전체 URL을 사용한다.
  2. HTTP 요청 메시지에 있는 URL에 호스트명이 기술되어 있지 않다면 Host 헤더에서 가져온다.
  3. 호스트명을 가져올 수 없다면 400 Bad Request 에러를 발생.

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

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

18.3.1 미러링 된 서버 팜

image

  • 서버 팜은 서로 대신할 수 있고 식별할 수 있게 설정된 웹 서버들의 집합이다.
  • 미러링 된 서버는 원본 콘텐츠를 갖는 마스터 원 서버와 복제 원서버로 구성된다.
  • 네트워크 스위치를 통해 분산 요청을 보내게 된다.
  • 부하의 분산은 HTTP 리다이렉션방식과 DNS 리다이렉션 방식이 있다.

Is AWS a server farm?
AWS services are delivered to customers via a network of AWS server farms located throughout the world.

Where are Amazon server farms?
Amazon Web Services (AWS) operates data centers in the following regions: US East (Ohio), US West (Oregon), US West (Northern California), and US East (Northern Virginia)

HTTP 리다이렉션

  • 콘텐츠에 대한 URL은 마스터 서버의 IP를 가리키고, 마스터 서버는 요청을 받은 즉시 복제 서버로 리다이렉트 한다.

DNS 리다이렉션

  • 콘텐츠의 URL은 네 개의 IP 주소를 가리킬 수 있고, DNS 서버는 클라이언트에게 전송할 IP 주소를 선택할 수 있다.

18.3.2 콘텐츠 분산 네트워크

image

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

CDN vs Load Balancers : https://as-you-say.tistory.com/110

18.3.3 CDN의 대리 캐시

  • 대리 캐시는 복제 원 서버를 대신해 사용될 수 있다.
  • 대리 캐시는 리버스 프락시라고도 불리는데, 미러링 된 웹 서버처럼 콘텐츠에 대한 요청을 받아 처리한다.
  • 특정 대리 캐시는 특정 원 서버와 연결이 되어 원 서버에 요청을 일부 처리하게 된다.
  • 미러링 된 원 서버와 대리 서버의 차이점은 미러링 된 원 서버처럼 콘텐츠의 전체를 복제하지 않고, 캐싱된 일부분을 가지고 있다는 점이다.
  • 일부 대리 캐시 서버는 요청하지도 않은 콘텐츠를 미리 가져오는 기능을 제공하기도 한다.

18.3.4 CDN의 프락시 캐시

image

  • 프락시 캐시는 대리 캐시와 다르게 별도의 연동이나 IP 주소 합의등이 필요없다. 따라서 어떤 웹 서버 요청이든 다 받을 수 있다.
  • 대리 서버를 사용하면 프락시 캐시는 요청이 있을 때만 저장되기 때문에, 원 서버의 최신의 콘텐츠를 가지고 있다는 확신이 없다.
  • 요청이 있을 때만 저장하는 프락시 서버는 레이어2 혹은 레이어3 장비 중간에서 웹 트래픽을 가로채 처리하기도 한다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant