
위코드 2차때 한번 경험해본 적이 있는 gunicorn. 그런데 발표당일 gunicorn이 돌아가지 않아 진땀을 흘린 경험이 있다. 회사에서도 적용하는 개념이라서 이번에 한번 제대로 사용해보았다.
Gunicorn(구니콘)은 웹 서버 게이트웨이 인터페이스(WSGI)에서 가장 인기있는 오픈소스이다. 
WSGI(Web Server Gateway Interface) : 파이썬에서 어플리케이션, 즉 파이썬 스크립트(웹 어플리케이션)가 웹 서버와 통신하기 위한 인터페이스 이다.
즉 runserver처럼 일시적인 서버 통신이 아닌 지속적으로 통신이 가능하게 해주는 인터페이스!
#설치
pip install gunicorn
#잘되는지 확인(manage.py 가 있는 파일)
gunicorn --bind 0:8000 config.wsgi:application
#gunicorn 실행
$ nohup gunicorn --bind=0.0.0.0:8000 ncnc.wsgi
$ gunicorn --bind=0.0.0.0:8000 ncnc.wsgi (--daemon --reload)
--daemon: 데몬 프로세스로 실행
--reload: 소스 변경시 재구동
#gunicorn 종료
$ pkill -f gunicorn
Gunicorn을 호출하는데 사용되는 설정방법은 여러방법이 존재한다. 공식문서에 따르면
1.Framework Settings
2.Configuration File
3.Command Line
순으로 먼저 참고가 된다고 한다.
다양한 설정 방법이 존재하지만 나는 프로젝트 파일에서 manage.py가 있는 디렉토리에 config.py를 만들고 거기에 gunicorn을 설정해두었다.
보통은 gunicorn service 등록스크립트라는 걸 특정경로에 맞추는 작업을 하고 해당 스크립트를 등록하는 작업을 하지만 이번에는 config.py로 진행했다.
#프로젝트파일(manage.py가 있는 위치)에서 config.py를 생성
import multiprocessing
  
bind = '127.0.0.1:8000'
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = 'sync'
raw_env = ['DJANGO_SETTINGS_MODULE=settings파일이 위치한 경로']
pidfile = '/home/ubuntu/gunicorn_main.pid'
timeout = 30
이런식으로 지정해주면 된다
그리고 해당파일에 대한 경로를 구니콘에게 알려주기위해 구성파일 경로를 지정하자
gunicorn -c [config.py]