WSGI 와 Gunicorn이 무엇인지?
Gunicorn 설치 과정까지 작성하겠다.
WSGI는 Web Server Gateway Interface의 약자
python application(python script)이 Web Server와 통신하기 위한 표준 Interface이며 Python Framework이다.
WSGI는 CGI(Common Gateway Interface)의 일종으로 CGI는 정적인 웹에서 동적인 웹으로 발전함에 따라 각기 다른 프로그래밍 언어가 사용되어 "공통적인 형태"로 주고받기 위해 만든 규약(specification)입니다.
다시 말해 여러 언어 사용자들의 다양한 요청을 이해할 수 있도록 이를 공통된 규칙으로 변환하는 관문 역할을 하는 것입니다.
따라서 웹서버가 클라이언트 요청을 받으면 CGI에 의해 일관된 형태로 해석되어 이를 WAS에서 처리할 수 있는 것이죠.
CGI 기본 동작 과정
1. input으로 HttpRequest를 받음
2. 요청에 대한 정보를 환경변수 형식으로 만들어 파이썬 스크립트의 stdin 형식의 input으로 받음
3. 스크립트가 print와 같은 stdout 형식으로 응답하면 HTTP 형식으로 변환
WSGI는 위스키라고 읽는다.
WSGI 서버는 웹 서버와 WSGI 애플리케이션 중간에 위치한다. 그래서 WSGI 서버는 WSGI 미들웨어(middleware) 또는 WSGI 컨테이너(container)라고도 한다.
gunicorn은 Python WSGI HTTP Server
웹 서버에 동적 페이지 요청이 들어오면 웹 서버는 파이썬 프로그램을 호출해야 한다. 하지만 웹 서버는 파이썬 프로그램을 호출할 수 있는 기능이 없다.
이러한 이유로 파이썬 프로그램을 호출하는 WSGI(web server gateway interface) 서버가 반드시 필요하다.
즉 웹 서버에 동적 요청이 발생하면 웹 서버가 WSGI 서버를 호출하고, WSGI 서버는 파이썬 프로그램을 호출하여 동적 페이지 요청을 대신 처리하는 것이다.
Django의 내장 서버는 웹 서버와 WSGI 서버의 기능을 모두 포함하고 있다. 다만 내장 서버는 기능이 단순하고 '대량 요청'이나 '동시 요청'을 효율적으로 처리하지 못하므로 운영 환경에는 적합하지 않다.
runserver는 개발용이고 배포용이 아니기 때문에 안정적인 배포를 위해 Gunicorn 서버를 Django와 연결해야 한다.
웹서버에 동적 페이지 요청이 발생하면 웹 서버는 WSGI 서버를 호출하고 WSGI 서버는 다시 WSGI 애플리케이션을 호출한다. 여기서 알수 있는 중요한 사실은 실제 동적 페이지 요청은 결국 WSGI 애플리케이션이 처리한다는 점이다.
WSGI 애플리케이션에는 장고(Django), 플라스크(Flask), 토네이도(Tornado) 등이 있다.
요청 Flow
gunicorn 설치
$ pip install gunicorn
gunicorn 으로 서버 구동
$ gunicorn --bind 0.0.0.0:8888 장고프로젝트이름.wsgi:application
systemd 에 서비스 파일을 등록하여 서버가 재시작할때 gunicorn도 실행되도록 설정
$ sudo vi /etc/systemd/system/gunicorn.service
시스템 데몬 재시작
$ sudo systemctl daemon-reload
$ sudo systemctl start gunicorn
# 서비스 실행 하기$ sudo systemctl enable gunicorn
#서버 재시작시 자동으로 실행$ sudo systemctl status gunicorn
#서비스 상태 보기$ sudo systemctl stop gunicorn
#서비스 중지$sudo systemctl restart gunicorn
#서비스 재시작참고
https://wikidocs.net/75556
https://moondol-ai.tistory.com/467
https://leffept.tistory.com/282?category=950490