웹서버란 무엇인가

정은경·2020년 5월 27일
6

1. 웹서버란?

웹 브라우저와 같은 클라이언트로부터
HTTP 프로토콜로 요청을 받아,
HTML 문서 등과 같은 정적 웹 페이지를 응답해주는 소프트웨어

하드웨어/소프트웨어적 웹서버

  • 하드웨어 측면:
    • 웹사이트의 컴포넌트 파일들을 저장하는 컴퓨터
    • 컴포넌트 파일에는 html 문서/images/css stylesheets/JavaScript 파일 등
    • 이 컴포넌트 파일들을 최종 소비자의 디바이스에 전달함
    • 웹 서버는 인터넷에 연결되어 있고, 도메인 이름을 통해 접속될 수 있음
  • 소프트웨어 측면:
    • 웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리
    • HTTP 서버는 URL(Web address)과 HTTP의 소프트웨어 일부임


브라우저가 웹 서버에서 불려진 파일을 필요로 할때,
브라우저는 HTTP를 통해 파일을 요청함
요청이 올바른 웹 서버(하드웨어)에 도달하였을 때,
HTTP 서버(software)는 요청된 문서를 HTTP를 이용해 보내줌

웹 사이트를 공개하기 위해서는, 당신은 정적 혹은 동적 웹서버가 필요함

  • 정적 웹 서버
    • HTTP 서버(소프트웨어)가 있는 컴퓨터(하드웨어)로 구성되어 있음
    • 서버가 그 불려질 파일을 당신의 브라우저에게 전송하기 때문에, "정적"이라고 부름
  • 동적 웹 서버
    • 동적 웹 서버는 정적 웹 서버와 추가적인 소프트웨어(대부분 일반적인 애플리케이션 서버와 데이터베이스)로 구성되어 있음
    • 애플리케이션 서버가 HTTP 서버를 통해 당신의 브라우저에게 불려진 파일들을 전송하기 전에, 애플리케이션 서버가 업데이트하기 때문에 우리는 이것을 동저이라고 부름
    • 사용자가 브라우저에서 보는 최종 웹페이지들을 생성하기 위해, 애플리케이션 서버는 아마 데이터베이스로 온 켄텐츠들로 이루어진 html 템플릿을 채울지 모름.

호스팅 파일들

웹 서버는 처음에 html 문서라고 불리는 웹 사이트의 파일들과 이미지, CSS 스타일시트, JavaScript 파일, 폰트, 비디오를 포함한 관련된 것들을 저장해야 함

기술적으로, 컴퓨터에 있는 그 파일들을 불러올 수 있지만,
그것들을 전담하는 웹 서버에 저장하는 것이 훨씬 던 편리함

전담 웹서버는:

  • 항상 실행 중
  • 항상 인터넷과 연결되어있음
  • 항상 같은 IP 주소를 가지고 있음
  • 제 3자에 의해 유지보수 됨

좋은 호스팅 제공자를 찾는 것은 웹사이트를 구축하는 것의 핵심부분
웹 호스팅 솔루션을 설정했다면, 그저 웹 서버에 파일들을 업로드하면 됨!

HTTP를 이용해 통신하기

웹서버는 HTTP(HyperText Transfer Protocol)를 지원함
HTTP는 어떻게 두 컴퓨터 간의 hypertext를 전송하는지를 서술함

프로토콜은 두 컴퓨터간의 통신을 위한 규칙의 집합
HTTP는 문자로된, 독립적인 프로토콜

  • Textual (문자로 된)
    • 모든 명령어들은 기본 문자이며 사람들이 읽을 수 있음
  • Stateless (독립적인)
    • 서버 혹은 클라이언트는 이전의 통신을 기억하지 않음
    • HTTP에만 의존하면, 서버는 당신이 입력한 비밀번호 혹 당신이 처리한 단계를 기억하지 못함
    • 당신은 그러한 일들을 위한 애플리케이션 서버가 필요함!

HTTP는 어떻게 클라이언트와 서버가 통신을 하는지 명확한 규칙을 제공함

  • 오직 클라이언트만 HTTP 요청을 만들 수 있으며, 서버에게만 보낼 수 있음. 서버는 오직 클라이언트의 HTTP 요청에 응답할 수 있음
  • HTTP를 통해 파일을 요청할때, 클라이언트는 반드시 URL 파일들을 제공해햐 함
  • 웹 서버는 반드시 최소한의 에러 메시지를 포함하여 모든 HTTP 요청에 응답해야 함

웹 서버에서 HTTP 서버는 들어오는 요청들에 대해 응답하고 처리해야 함
1. 요청을 받으면 HTTP 서버는 먼저 요청받는 URL이 존재하는 파일과 매칭이되는지를 확인
2. 만약 매칭된다면, 웹서버는 그 파일내용을 브라우저에게 되돌려줌. 만약 그렇지 않다면, 애플리케이션 서버는 필요한 파일을 구축함
3. 만약 위 둘의 과정이 불가능하다면, 웹서버는 브라우저에게 에러 메시지를 반환함. 대부분의 에러 메시지는 "404 Not Found"임

정적 vs. 동적 컨텐츠

대략적으로 말하자면, 서버는 정적 혹은 동적 컨텐츠를 모두 제공할 수 있음

정적

  • "정적"은 있는 그대로 제공되는 것(served as-is)를 의미

동적

  • "동적"은 서버가 컨텐츠를 처리하는 것
  • 심지어는 컨텐츠를 데이터베이스로부터 생성하는 것을 의미
  • 이 방법은 더 많은 유연성을 제공하지만, 기술적 스택이 더 다루기 힘들어지고, 웹사이트를 구축하는 것이 훨씬 복잡해짐

웹서버의 동작과정

웹 서버의 종류

(1) 오픈 소스

  • 아파치
  • IIS
  • Nginx
    : 차세대 웹 서버로 불림
    더 적은 자원으로 더 빠르게 데이터를 서비스 할 수 있음!
    (2) 상용 소프트웨어
    Web Tier, WebToB

Nginx와 Apache의 관계

  • 아파치는 오픈소스, 1996년 이래 계속 1등
  • nginx는 새로운 시대의 요청에 부응해서 만들어진 웹서버, 개발의 모든 목적이 "높은 성능"에 맞춰져 있음!

2. 장고의 웹서버

Django는 웹서버인가?

  • 장고는 장고만의 웹서버를 사용
  • 개발 목적으로 python으로 짜여진 가벼운 WSGI(Web Server Gateway Interface)를 사용!
  • 장고 자체는 웹 프레임워크이고, runserver를 통해 웹서버와 웹 애플리케이션 서버 역할을 하는 것임!
  • 프로덕션 레벨에는 다른 웹서버를 사용할 것!

WAS(Web Application Server)는 뭔가?

  • 간단하게 말해서 웹 서버 위에 서버 애플리케이션을 얹은 것
  • 동적 리소스 처리를 위해 사용
  • 웹서버(nginx)와 웹 애플리케이션(django)간의 연결을 중계(nginx에서 받은 요청을 django에서 처리하기 위한 중계인 역할)
  • nginx는 파이썬을 모름
  • 그래서 uWSGI는 http 요청을 python으로 바꿔주고
  • django로 부터 받은 응답을 nginx가 알 수 있도록 변환해줌!

WSGI(Web Server Gateway Inteface)는 뭔가?

  • 웹서버와 파이썬을 사용한 웹 애플리케이션 개발환경 간의 인터페이스에 대한 표준 규칙

  • 파이썬의 웹 어플리케이션 서버임!

  • 파이썬으로 선택할 수 있는 웹 프레임워크에서 사용할 수 있는 기존 웹서버는 CGI, FastCGI, mod_python, 또는 커스텀으로 만들어진 api 등으로 상당히 제한되어 있음

  • 반대로 웹서버는 선택하는 것이 파이썬 웹개발환경을 제한하기도함

  • 그래서! 표준으로 나온 것이 WSGI임!

  • WSGI는 웹서버와 웹 어플리케이션(또는 프레임워크) 간에 호환성있는 웹 어플리케이션 개발환경을 만들기 위해 로우레벨 인터페이스로 만들어짐!

  • WSGI는 보통 서버사이드와 게이트웨이 사이드 (nginx, apache 등)를 가짐

  • wsgi는 어플리케이션 또는 프레임워크 사이드와 통신함!

  • wsgi 요청을 처리하기 위해서 서버사이드 어플리케이션을 실행하고 환경정보를 제공하며, 콜백함수를 어플리케이션 사이드에 전달

  • 그러면 어플리케이션은 요청을 실행하고 전달받은 콜백함수를 통하여 응답을 서버사이드에 넘겨줌

  • 서버와 어플리케이션 사이에, 양방향의 api를 실행할 수 있는 wsgi 미들웨어가 사용되기도 함

  • 서버는 클라이언트의 요청을 받아 wsgi 미들웨어에게 넘겨줌

  • 미들웨어가 요청을 처리한 후에는 요청을 어플리케이션어 보냄

  • 어플리케이션에서 나온 응답은 다시 미들웨어를 통해 서버와 궁극적으로 클라이언트 측에 전달됨

  • wsgi 친화적인 어플리케이션에서는 이러한 미들웨어 여러 개가 스택을 이루어 사용될 수 있음!

  • was만 쓰면 되지 어째서 웹서버를 따로 쓰냐는 의문이 생길 수 있다.

  • 그 이유는 목적이 다르기 때문!

  • 웹서버는 정적인 데이터만 처리하는 서버

  • was는 동적인 데이터를 처리하는 서버

Reference

더 살펴볼 자료

목표

  • 웹 페이지/웹사이트/웹서버/검색 엔진의 차이를 말할 수 있다.

Reference

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글