본문 바로가기
컴퓨터사이언스

구니콘 (Gunicorn) + Nginx + 장고(Django) Part 1

by 괴짜코더 2022. 4. 17.

Gunicorn 사용 이유

Django의 내장 서버 (runserver)는 실서비스에 부적합하다. Django에는 개발용으로 runserver라는 내장 서버를 탑재하고 있다. 실제 서비스를 하기 전에 개발을 하면서 이용하게 되는 테스트 서버이다. 특징 중 하나는 소스코드의 수정이 이루어지면 이를 detect 하여 바뀐 것이 있을 경우 서버를 reload 하게 된다. 하지만 실제 서비스를 하기엔 성능상의 한계, 보안 등 다양한 문제점이 존재해 wsgi + Nginx + Gunicorn을 사용하게 된다.

Django.core.servers.basehttp 파일

```
DON'T USE IT FOR PRODUCTION USE!
```

위의 파일에 아래와 같은 문구가 주석으로 담겨져 있다. 즉 실제 서비스에 runserver를 이용하면 안 된다는 뜻을 내 표하고 있다. 이러한 이유로 사용할 수 없는 것이며, gunicorn을 가상 환경에 설치한다.

Gunicorn 설치

$(venv) $ pip install gunicorn # gunicorn 설치

Gunicorn 실행

$(venv) $ gunicorn --bind 0:8000 yourapp.wsgi:application
# 포트와 앱이름을 설정하여 위의 명령으로 구니콘을 실행할 수 있다.
# python manage.py runserver 0:8000 의 명령어를 대체한 셈이다.

Gunicorn 서비스 등록하기

systemd에 서비스 파일을 등록하여 서버가 재시작할때 Gunicorn도 실행되도록 설정한다.

$(venv) $ sudo systemctl daemon-relaod
# 서비스를 새로 등록하거나 수정할 경우 데몬을 리로드 해주어야 한다.

서비스 실행하고 등록하기

# start -> enable -> status 과정을 거치고 나면 Gunicorn이 실행되는것을 확인할수 있다.

$(venv) $ sudo systemctl start gunicorn # 작성한 서비스 실행하기
$(venv) $ sudo systemctl enable gunicorn # 서버 재시작시 자동으로 실행
$(venv) $ sudo systemctl status gunicorn.service # 실행한 서비스 상태 보기
$(venv) $ sudo systemctl stop gunicorn # 서비스 중지
$(venv) $ sudo systemctl restart gunicorn # 서비스 재시작

Gunicorn 실행 확인

# 실행 상태 확인
$(venv) $ sudo systemctl status gunicorn-django.service

runserver 를 실행하였을 때와 마찬가지로 해당 링크 http://127.0.0.1:8000에 접속해보면 정상적으로 장고 기본 페이지를 볼 수 있다. 여기까지 완료했다면 Django와 Gunicorn을 연동한 것이다.

댓글