웹서버의 기본적인 역할은 정적(static)인 파일을 그대로 보내주는 것입니다. 그 말인즉슨, 뭔가 별도의 처리를 거치지 않고 존재하는 파일을 그대로 보내주는 역할을 합니다.
CGI(Common Gateway Interface)
웹서버에서 어플리케이션을 작동시키기 위한 인터페이스로서, 정적인 웹서버를 동적으로 기능하게 하기 위해서 등장하였습니다. 기존에는 외부프로그램이 필요한 리퀘스트가 들어오면 CGI를 통해 따로 프로세스를 fork하고 외부프로그램을 실행시켜 처리하였지만, 요즘에는 웹서버에 인터프리터를 내장시켜 내부적으로 처리한다. CGI Programming이란, Perl, C/C++를 사용하여 웹서버가 실행할 수 있는 프로그램을 작성하는 것이다.
WAS(Web Application Server)
웹서버가 동적으로 기능하면 WAS이다. 즉, Web Server + CGI가 WAS이다.
WSGI Server(middleware)
Web server와 WSGI를 지원하는 Web Application사이에서 동작하며 아래와 같은 일을 한다
- 환경변수가 바뀌면 타겟 URL에 따라서 리퀘스트 경로를 지정해줌
- 같은 프로세스에서 여러 어플리케이션과 프레임워크가 실행됨
WSGI vs CGI
CGI는 리퀘스트가 들어오면 CGI 프로토콜에 따라서 스크립트를 실행시킵니다. 서브프로세스를 fork하여 서브프로세스가 response를 작성하고 이를 웹서버로 보내면 웹서버가 이 response를 브라우저로 보냅니다. 대부분 CGI는 모든 리퀘스트마다 서브프로세스를 fork합니다.
WSGI는CGI 디자인 패턴에 기반한 인터페이스입니다. 가장 큰 차이점은 WSGI는 모든 리퀘스트마다 fork를 통해 서브프로세스를 띄우지 않으므로 느리지 않습니다.
https://brownbears.tistory.com/350">https://brownbears.tistory.com/350
왜 WSGI가 중요한가?
전통적인 Web Server는 파이썬 어플리케이션들을 이해하거나 실행시킬 수가 없다. 그래서 처음 Apache와 함께 사용하기 위해 mod_python이라는 모듈이 개발되었지만, 시간이 지남에 따라 보안 이슈와 개발 지연등의 이유로 새로운 방법이 필요하게 되었다. 따라서 파이썬 커뮤니티는 WSGI라는 모듈과 컨테이너들이 도입할 수 있는 표준 인터페이스를 작성하게 되었다.
WSGI의 목적
왜 Web server가 직접 application으로 포워딩하지 않고 WSGI를 거쳐야될까?
- 유연성
개발자는 웹서버를 바꿔도 웹 어플리케이션의 코드를 수정할 필요가 없다.
또, WSGI를 중간에 바꾸더라도 상관이 없다(Green Unicorn -> uWSGI)
즉, 사용자가 상황에 맞는 스택으로 쉽게 쉽게 바꿀 수 있다.
- 확장성
수천 건의 request를 처리하는 것은 framework의 역할이 아니라 WSGI server의 역할이다. WSGI 서버들은 request들을 어떻게 framework에 보낼지를 결정한다. 역할 분담은 확장성에 매우 중요하다.
https://www.fullstackpython.com/wsgi-servers.html">https://www.fullstackpython.com/wsgi-servers.html
'백엔드' 카테고리의 다른 글
[Django 공식문서 번역] Class-based Views - 1. Introduction (0) | 2020.03.18 |
---|---|
[Web Server 이해하기] Apache vs Nginx (0) | 2020.03.18 |
[Web Server 이해하기] Gunicorn과 Nginx 역할분배 (0) | 2020.03.18 |
[Web Server 이해하기] Nginx Configuration 설정법 (0) | 2020.03.18 |
[Docker 이해하기] Docker Configuration 설정법 (0) | 2020.03.18 |