가벼우면서도 강력한 프로그램을 목표로 만들어졌으며, Apache보다 동작이 단순하고 전달 역할만 하기 때문에 동시 접속 처리에 특화되어있다.
정적 파일을 처리하는 HTTP 서버로서의 역할, 응용 프로그램 서버에 요청을 보내는 reverse proxy로서의 역할을 한다. (캐싱, 리다이렉션 등 가능하다.)
reverse proxy❔
- 클라이언트가 데이터를 요청하면 reverse proxy는 요청을 받아서 내부 서버에서 데이터를 받은 후 이 데이터를 클라이언트에 전달하게 된다.
WSGI는 Web Server Gateway Inerface의 약자로서, 웹 서버(nginx)와 파이썬 웹 애플리케이션 사이의 통신을 위한 프로토콜이며, 웹서버와 웹어플리케이션 간의 소통을 정의해 어플리케이션과 서버가 독립적으로 운영될 수 있게 돕는다.
WSGI는 서버와 앱 양단으로 나뉘어져 있다. WSGI 리퀘스트를 처리하려면 서버에서 환경정보와 콜백함수를 앱에 제공해야 하며, 앱은 그 요청을 처리하고 콜백함수를 통해 서버에 응답한다.
Flask, django와 같은 프레임워크는 이미 WSGI 표준을 따르고 있기 때문에 바로 웹서버에 연결해 사용할 수 있지만 nginx 웹 서버는 WSGI 스펙을 구현해두지 않았기 때문에 django나 Flask 앱과 직접 통신할 수가 없기 때문에 uWSGI 서버를 중간에 둔다.
uWSGI, gunicorn 등이 middleware 역할을 하며, 어플리케이션의 관점에서는 이 미들웨어를 통해 앱이 실행되므로 앱을 실행시켜주는 어플리케이션 컨테이너(Application Container)라고도 할 수 있다.
uWSGI는 Hosting server에서 full stack 개발이 가능하도록 하기 위해 개발되었다. 다양한 언어와 프로토콜, 프로세스 매니저, 프록시 등을 다양하게 다룰 수 있도록 개발되었다.
uWSGI는 WSGI 스펙을 구현한 서버인 동시에 프로토콜이며, nginx와도 통신할 수 있다.
정해진 시간에 명령을 실행할 수 있고(cron), 접속자가 없을 때 프로세스를 종료하는 cheap mode를 이용할 수 있다.( cheap 옵션은 첫번째 요청이 들어올 때까지 worker 프로세스를 실행하지 않도록 해준다. (master 프로세스는 항상 실행되어 있다) )
✔️ 확장성이 뛰어나며 강력하고 다양한 언어 위에서 작동하지만 너무 무거울 수 있다.
UNIX에서 사용하기 위해 만들어졌으며 상대적으로 빠르고 가볍고 사용이 용이하다.
Gunicorn팀은 HTTP proxy server로 Nginx를 쓰길 권장한다. (Gunicorn은 localhost 8000번을 사용하는데 Nginx는 전형적으로 reverse proxy server를 이용한다.)
✔️ 속도가 빠르며 가벼움 그리고 django에서 자동으로 돌아간다.
웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠를 제공한다.
HTTP 프로토콜을 기반으로 클라이언트의 요청을 서비스 한다.
DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application server
web server의 기능들을 구조적으로 분리하여 처리하고자 하는 목적으로 제시되었으며, 분산 트랜잭션, 보안, 메시징, 쓰레드 처리 등의 기능을 처리하는 분산 환경에서 사용된다.
주요 기능으로는 프로그램 실행 환경과 DB접속 기능, 여러개의 트랜잭션 관리 기능, 비즈니스 로직 수행 등이 있다.
기능을 분리하여 서버 부하 방지
물리적으로 분리하여 보안 강화
여러 대의 WAS를 연결 가능
여러 웹 어플리케이션 서비스 가능
접근 허용 IP 관리, 2대 이상의 서버에서의 세션 관리 등도 Web Server에서 처리하면 효율적이다.
즉, 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성 을 위해 Web Server와 WAS를 분리한다.
Nginx 이해하기 및 기본 환경 설정 셋팅하기
NGINX + HTTPS 적용하기
WSGI에 대한 설명, WSGI란 무엇인가?
python개발자 uwsgi를 버리고 gunicorn(지-유니콘)으로 갈아타다.
uWSGI의 고급 기능들