Django에서 Nginx와 Gunicorn 설정하기: 완벽 가이드
Django 애플리케이션을 프로덕션 환경에 배포할 때는 단순히 python manage.py runserver
명령어를 사용하는 것만으로는 부족합니다. 개발 서버는 높은 트래픽을 처리하거나 보안과 안정성을 보장하도록 설계되지 않았기 때문입니다.
현업에서는 Gunicorn이라는 WSGI 서버와 Nginx라는 고성능 리버스 프록시를 함께 사용하는 것이 일반적입니다. 이 가이드에서는 Django를 Gunicorn으로 실행하고 Nginx를 통해 안정적으로 제공하는 전체 과정을 단계별로 자세히 설명합니다.
서론: 왜 Gunicorn과 Nginx를 사용할까?
Gunicorn(Green Unicorn의 줄임말)은 Python WSGI 애플리케이션을 위한 서버로, 여러 개의 워커 프로세스를 생성하여 동시에 들어오는 요청을 처리할 수 있게 합니다.
반면, Nginx는 클라이언트의 HTTP(S) 요청을 먼저 받아서 Gunicorn에 전달하는 리버스 프록시 역할을 합니다. 또한 정적 파일 제공, SSL 연결 관리, 압축 및 캐싱 등의 기능도 지원합니다.
두 서버를 함께 사용하면 다음과 같은 이점이 있습니다:
- 향상된 성능
- SSL 및 방화벽을 통한 보안 강화
- 트래픽 증가 및 부하 처리 능력
- 역할 분리로 구성과 관리가 쉬움
1단계: Gunicorn 설치 및 로컬 테스트
pip install gunicorn
gunicorn yourproject.wsgi:application
기본적으로 127.0.0.1:8000
에서 Django 앱이 실행됩니다.
2단계: Gunicorn을 systemd 서비스로 등록
sudo nano /etc/systemd/system/gunicorn.service
아래 설정을 입력하세요:
[Unit]
Description=Gunicorn daemon for Django project
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/yourproject
ExecStart=/home/ubuntu/yourenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/yourproject/gunicorn.sock yourproject.wsgi:application
[Install]
WantedBy=multi-user.target
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn
3단계: Nginx 설치 및 리버스 프록시 구성
sudo apt install nginx
sudo nano /etc/nginx/sites-available/yourproject
설정 예시:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/ubuntu/yourproject;
}
location /media/ {
root /home/ubuntu/yourproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/yourproject/gunicorn.sock;
}
}
sudo ln -s /etc/nginx/sites-available/yourproject /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
4단계: 정적 및 미디어 파일 설정
python manage.py collectstatic
settings.py
에 추가:
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'static'
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
5단계: HTTPS 설정 (Let’s Encrypt 추천)
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
sudo certbot renew --dry-run
보너스 팁: 성능 및 보안 강화
- Gzip 압축 활성화
- 정적 파일 캐싱 헤더 추가
- Gunicorn 워커 수:
2 * CPU 수 + 1
- fail2ban, ufw 등 보안 도구 활용
- 로그 모니터링:
/var/log/nginx
,journalctl -u gunicorn
마치며
Gunicorn과 Nginx를 결합하면 Django 애플리케이션을 위한 강력하고 안정적인 프로덕션 환경을 구축할 수 있습니다. Gunicorn은 애플리케이션 로직을 효율적으로 실행하고, Nginx는 외부 요청을 안정적으로 처리하면서 정적 자원과 SSL까지 담당합니다.
설정 과정에서 어려웠던 점이나 궁금한 점이 있다면 댓글로 공유해 주세요—함께 더 나은 배포 환경을 만들어 갑시다!
Django 모델링: 데이터베이스 설계의 핵심
강력한 웹 애플리케이션은 모두 잘 구조화된 데이터베이스 위에 구축됩니다. Django 세계에서는 데이터를 제대로 모델링하는 것이 모든 것의 출발점입니다—사용자 인터랙션부터 백엔드 처리까
bigadmin.org
댓글