본문 바로가기
TTL/13주차 ~ 16주차 TIL (11.21 ~ 12.16)

2022-11-21 TIL (gunicorn, nginx)

by dev_junseok 2022. 11. 21.

WSGI 란?

파이썬 애플리케이션이(파이썬 스크립트) 웹 서버와 통신하기 위한 인터페이스이다. 웹서버에서의 요청을 해석하여 파이썬 애플리케이션 쪽으로 던지는 역할을 수행한다.

 

nginx 란?

Nginx는 경량 웹 서버입니다.
클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고,
Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 합니다.

 

gunicorn 이란?

Gunicorn은 Python WSGI로 WEB Server(Nginx)로부터 서버사이드 요청을 받으면 WSGI를 통해 서버 애플리케이션(Django)로 전달해주는 역할을 수행한다. Django의 runserver 역시도 똑같은 역할을 수행하지만 보안적으로나 성능적으로 검증이 되지 않았기 때문에 production 환경에서는 사용할 수 없다.(개발용으로는 유용하다)

 

웹 서버를 별도로 운영하는 이유?

웹서버를 별도로 운영하는 이유는 WAS의 부담을 줄여주기 위함입니다. 생각해보면 이미지, html, css 등 웹 사이트 운영을 함에 있어서 기본적으로 변하지 않는 파일들은 굳이 동적인 처리를 하는 WAS에서 담당할 필요가 없겠죠. 다시 말해 클라이언트의 요청 중 웹서버가 처리할 수 있다면 WAS까지 굳이 전달하지 않으면서 WAS의 업무 비중을 줄여주는 것입니다.

 

gunicorn 과 nginx를 같이 연동해서 배포하는 이유?

 

- Gunicorn이 WSGI middleware로서 웹서버 역할을 수행하므로 Gunicorn만 써도 되지만, Nginx가 제공하는 추가적 혜택을 받지 못합니다.

- Django는 WSGI interface를 이미 어느 정도 구현했기 때문에 Nginx만 써도 되지만, seesion / cookie / routing / authentication 등의 기능을 수행하는 middleware가 없어서 하드코딩 해야 합니다.