웹 브라우저와 같은 클라이언트로부터
HTTP 프로토콜로 요청을 받아,
HTML 문서 등과 같은 정적 웹 페이지를 응답해주는 소프트웨어
브라우저가 웹 서버에서 불려진 파일을 필요로 할때,
브라우저는 HTTP를 통해 파일을 요청함
요청이 올바른 웹 서버(하드웨어)에 도달하였을 때,
HTTP 서버(software)는 요청된 문서를 HTTP를 이용해 보내줌
웹 사이트를 공개하기 위해서는, 당신은 정적 혹은 동적 웹서버가 필요함
웹 서버는 처음에 html 문서라고 불리는 웹 사이트의 파일들과 이미지, CSS 스타일시트, JavaScript 파일, 폰트, 비디오를 포함한 관련된 것들을 저장해야 함
기술적으로, 컴퓨터에 있는 그 파일들을 불러올 수 있지만,
그것들을 전담하는 웹 서버에 저장하는 것이 훨씬 던 편리함
전담 웹서버는:
좋은 호스팅 제공자를 찾는 것은 웹사이트를 구축하는 것의 핵심부분
웹 호스팅 솔루션을 설정했다면, 그저 웹 서버에 파일들을 업로드하면 됨!
웹서버는 HTTP(HyperText Transfer Protocol)를 지원함
HTTP는 어떻게 두 컴퓨터 간의 hypertext를 전송하는지를 서술함
프로토콜은 두 컴퓨터간의 통신을 위한 규칙의 집합
HTTP는 문자로된, 독립적인 프로토콜
HTTP는 어떻게 클라이언트와 서버가 통신을 하는지 명확한 규칙을 제공함
웹 서버에서 HTTP 서버는 들어오는 요청들에 대해 응답하고 처리해야 함
1. 요청을 받으면 HTTP 서버는 먼저 요청받는 URL이 존재하는 파일과 매칭이되는지를 확인
2. 만약 매칭된다면, 웹서버는 그 파일내용을 브라우저에게 되돌려줌. 만약 그렇지 않다면, 애플리케이션 서버는 필요한 파일을 구축함
3. 만약 위 둘의 과정이 불가능하다면, 웹서버는 브라우저에게 에러 메시지를 반환함. 대부분의 에러 메시지는 "404 Not Found"임
대략적으로 말하자면, 서버는 정적 혹은 동적 컨텐츠를 모두 제공할 수 있음
(1) 오픈 소스
Nginx와 Apache의 관계
- 아파치는 오픈소스, 1996년 이래 계속 1등
- nginx는 새로운 시대의 요청에 부응해서 만들어진 웹서버, 개발의 모든 목적이 "높은 성능"에 맞춰져 있음!
웹서버와 파이썬을 사용한 웹 애플리케이션 개발환경 간의 인터페이스에 대한 표준 규칙
파이썬의 웹 어플리케이션 서버임!
파이썬으로 선택할 수 있는 웹 프레임워크에서 사용할 수 있는 기존 웹서버는 CGI, FastCGI, mod_python, 또는 커스텀으로 만들어진 api 등으로 상당히 제한되어 있음
반대로 웹서버는 선택하는 것이 파이썬 웹개발환경을 제한하기도함
그래서! 표준으로 나온 것이 WSGI임!
WSGI는 웹서버와 웹 어플리케이션(또는 프레임워크) 간에 호환성있는 웹 어플리케이션 개발환경을 만들기 위해 로우레벨 인터페이스로 만들어짐!
WSGI는 보통 서버사이드와 게이트웨이 사이드 (nginx, apache 등)를 가짐
wsgi는 어플리케이션 또는 프레임워크 사이드와 통신함!
wsgi 요청을 처리하기 위해서 서버사이드 어플리케이션을 실행하고 환경정보를 제공하며, 콜백함수를 어플리케이션 사이드에 전달
그러면 어플리케이션은 요청을 실행하고 전달받은 콜백함수를 통하여 응답을 서버사이드에 넘겨줌
서버와 어플리케이션 사이에, 양방향의 api를 실행할 수 있는 wsgi 미들웨어가 사용되기도 함
서버는 클라이언트의 요청을 받아 wsgi 미들웨어에게 넘겨줌
미들웨어가 요청을 처리한 후에는 요청을 어플리케이션어 보냄
어플리케이션에서 나온 응답은 다시 미들웨어를 통해 서버와 궁극적으로 클라이언트 측에 전달됨
wsgi 친화적인 어플리케이션에서는 이러한 미들웨어 여러 개가 스택을 이루어 사용될 수 있음!
was만 쓰면 되지 어째서 웹서버를 따로 쓰냐는 의문이 생길 수 있다.
그 이유는 목적이 다르기 때문!
웹서버는 정적인 데이터만 처리하는 서버
was는 동적인 데이터를 처리하는 서버