CS_ HTTP와 연계하는 웹 서버

정윤숙·2023년 10월 28일

CS

목록 보기
5/5
post-thumbnail

📒 오늘의 공부

1. 그림으로 배우는 Http & Network

5장 HTTP와 연계하는 웹 서버

1. 1대로 멀티 도메인을 가능하게 하는 가상 호스트

  • HTTP 가상 호스트(Virtual Host) 기능: 웹 서버에서 여러 개의 웹 사이트를 하나의 서버에서 호스팅하기 위한 기술
    • 물리적으로는 서버가 1대지만 각 도메인 또는 호스트 이름에 따라 다른 웹 사이트를 제공하기 때문에 가상으로 여러 대의 서버가 있는 것처럼 설정하는 것이 가능
    • 하나의 서버로 다른 도메인명을 가진 여러 웹 사이트를 운영하는 기업 또는 조직에서 사용하며 각 웹 사이트를 독립적으로 관리할 수 있다.

💡 웹서버

  • 웹 서버(Web Server): 클라이언트로부터 HTTP 요청을 받고, 이러한 요청에 대한 응답을 생성하여 클라이언트에게 제공하는 소프트웨어나 하드웨어
    • 웹 사이트, 웹 애플리케이션, 웹 페이지 등을 인터넷을 통해 공개하고 접근할 수 있게 하는 역할
    • 일반적인 웹 서버 소프트웨어: Apache, Nginx, Microsoft IIS, LiteSpeed
    • 클라우드 서비스 제공 업체는 자체 웹 서버 인프라를 갖고 있다. ex. AWS

  • 여러 개의 웹 사이트가 하나의 IP 주소에서 운영되는 가상 호스트 환경에서 HTTP 리퀘스트를 보낼 때
    • 호스트명과 도메인명을 완전하게 포함한 URI를 지정하거나, 반드시 Host 헤더 필드에 호스트명을 지정해야 한다.
    • 인터넷에서 도메인명은 DNS에 의해서 IP주소로 변환되기 때문에 결국 IP 주소를 기준으로 서버에 액세스 하게 되어 어느 도메인 또는 호스트명의 리소스에 대한 요청인지를 구분하기 어렵다.
    • 호스트명과 도메인명을 포함한 URI 예시
      http://www.example.com/path/to/resource
    • Host 헤더 필드를 사용한 HTTP 요청 헤더 예시
    GET /path/to/resource HTTP/1.1
     Host: www.example.com

💡 DNS(Domain Name System)

  • 인터넷에서 도메인명(Domain Name)을 IP 주소로 해석하거나, 그 반대로 IP 주소를 도메인명으로 변환하는 시스템
    • 인터넷 사용자가 웹 브라우저에서 도메인명을 입력하거나 링크를 클릭할 때, DNS는 해당 도메인명을 해당 웹 서버의 IP 주소로 해석하여 요청된 웹 페이지 또는 서비스로 연결한다.

2. 통신을 중계하는 프로그램: 프록시, 게이트웨이, 터널

  • HTTP는 클라이언트와 서버 이외에 프록시(Proxy), 게이트웨이(Gateway), 터널(Tunnel)과 같은 통신을 중계하는 프로그램과 서버를 연계하는 것도 가능하다.
    • 이러한 중계 역할을 하는 서버들은 HTTP 요청을 받아서 클라이언트에서부터 받은 리퀘스트를 다음 서버로 중계하고, 그 서버로부터 받은 리스폰스를 클라이언트에 반환한다.
    • 중계 서버를 통해 클라이언트와 서버 간의 통신을 중계함으로써 네트워크 관리와 보안을 개선하고, 클라이언트와 서버 간의 직접적인 연결을 줄일 수 있다.

프록시(Proxy)

  • 서버와 클라이언트의 양쪽 역할을 하는 중계 프로그램

    • 클라이언트로부터 받은 리퀘스트 URI를 변경하지 않고 리소스 본체를 가진 오리진 서버(Origin Server)에 전송한다.
    • 오리진 서버로부터 되돌아온 리스폰스는 프록시 서버를 경유해서 클라이언트에 돌아온다.
  • 캐싱 프록시(Cashing Proxy)

    • 프록시로 리스폰스를 중계할 때 프록시 서버 상에 리소스 캐시를 보존 해 두는 타입의 프록시
    • 프록시에 다시 같은 리소스에 리퀘스트가 온 경우, 오리진 서버를 통하지 않고 캐시를 리스폰스로서 되돌려 준다.
  • 투명 프록시(Transparent Proxy)

    • 프록시로 리퀘스트와 리스폰스를 중계할 때 HTTP 메시지 변경을 하지 않는 타입의 프록시
    • HTTP 메시지에 변경을 가하는 타입의 프록시 = 비투과 프록시(Non-transparent Proxy)

게이트웨이(Gateway)

  • 다른 서버를 중계하는 서버

    • 동작은 프록시와 유사하나 게이트 웨이의 경우 HTTP 서버 이외의 서비스를 제공하는 서버와 통신하는데 사용
      => 데이터베이스에 접속해 SQL 쿼리를 사용하여 데이터를 가져오는 경우
      => 쇼핑 사이트에서 신용 카드 결제 시스템과 연계하는 경우
  • 클라이언트로부터 수신한 HTTP 리퀘스트를 마치 자체적으로 해당 리소스를 가지고 있는 서버인 것처럼 수신

    • 이로 인해 클라이언트가 게이트웨이가 중계 역할을 한다는 것을 인식하지 못하도록 할 수 있다.

💡 게이트웨이가 중계 역할을 하는 것을 클라이언트가 알지 못하게 하는 이유

  • 클라이언트가 게이트웨이의 존재를 모르면 서버는 더 수월하게 중계 서버를 도입하거나 교체할 수 있다.
  • 네트워크 환경(infrastructure)을 숨길 수 있기 때문에 클라이언트는 네트워크 상의 복잡한 구조를 모른 채로 웹 리소스에 접근 가능하다.

=> 게이트웨이는 중계와 추가 기능을 제공하면서 클라이언트가 이러한 복잡성을 인식하지 않도록 할 수 있다.


  • 클라이언트와 게이트웨이 사이를 암호화하는 방식으로 안전하게 접속함으로써 통신의 안정성을 높이는 역할

터널(Tunnel)

  • 클라이언트와 서버 간의 데이터 통신을 중개하거나 보안된 연결을 통과시키는데 사용되는 중계 프로그램
    • HTTP 메시지를 수정할 수 있는 프록시와 달리 터널 자체는 HTTP 리퀘스트를 해석하려고 하지 않고 리퀘스트를 그대로 다음 서버에 중계한다.
    • 주로 암호화된 연결(예: HTTPS)을 통과시키거나, 클라이언트와 서버 간의 직접적인 연결을 통해 데이터를 전송하는 데 사용된다.

3. 리소스를 보관하는 캐시

  • 캐시(Cache): 프록시 서버와 클라이언트의 로컬 디스크에 보관된 리소스의 사본

    • 캐시를 사용하면 리소스를 가진 서버에의 액세스를 줄일 수 있어 통신량과 통신 시간을 절약할 수 있다.
  • 캐시 서버: 프록시 서버의 하나로 캐싱 프록시로 분류

    • 장점: 캐시를 이용함으로써 같은 데이터를 몇 번이고 오리진 서버에 전송할 필요가 없다. 서버는 같은 리퀘스트를 매번 처리하지 않아도 된다.
  • 캐시의 유효성

    • 오리진 서버에 있는 원래 리소스가 갱신되는 경우, 캐시 서버는 갱신 전의 리소스를 그대로 보내게 되기 때문에 오리진 서버에 캐시의 유효성을 확인하거나 새로운 리소스를 다시 획득하러 가게 되는 경우가 있다.

클라이언트 측에 있는 캐시

  • 브라우저에 클라이언트가 보존하는 캐시 = 인터넷 임시 파일
  • 브라우저가 유효한 캐시를 가지고 있는 경우, 같은 리소스에 대한 요청은 서버에 재액세스하지 않고 캐시된 버전을 로컬 디스크로부터 불러 온다.
  • 캐시 서버와 마찬가지로 리소스가 오래된 것으로 판단된 경우, 오리진 서버에 리소스의 유효성을 확인하거나 새로운 리소스를 다시 획득하러 간다.
profile
프론트엔드 개발자

0개의 댓글