Gunicorn과 Nginx 사용하기
Posted on 2021-08-25 by GKSRUDTN99
Django로 웹사이트 만들기
장고
개발 중에는 장고가 기본적으로 제공하는 runserver를 이용해도 큰 문제가 없지만, 실제로 운영할 때 방문자가 많아지면, 성능 보안상의 문제가 있을 수 있다.
이런 상황에 대비하기 위해 Nginx, Apache 등의 웹 서버 소프트웨어를 사용한다.
웹 서버 소프트웨어를 사용하는 이유
1. 더 빠른 응답
2. 많은 사용자가 동시에 접속했을 때 여러 대의 서버로 요청을 분산시키는 로드 밸런싱
3. 장고가 꼭 필요한 요청에 대해서만 장고를 이용해 자원을 효율적으로 사용할 수 있다.
Gunicorn 적용하기
Gunicorn은 웹 서버 소프트웨어와 장고를 연결하는 WSGI 중 하나이다.
Guniconr을 사용해 서버를 실행하기 위해 docker-compose.yml 파일의 web 컨테이너를 다음과 같이 수정한다.
# docker-compose.yml
version: '3'
services:
web:
build: .
command: gunicorn do_it_django_prj.wsgi:application --bind 0.0.0.0:8000
volumes:
- ./:/usr/src/app/
ports:
- 8000:8000
env_file:
- ./.env.dev
depends_on:
- db
db:
image: postgres:12.0-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=do_it_django_db_user
- POSTGRES_PASSWORD=do_it_django_db_password
- POSTGRES_DB=do_it_django_dev
volumes:
postgres_data:
pip install gunicorn
으로 설치한 뒤, pip freeze > requirements.txt
로 이미지에 반영한다.
docker-compose up --build -d 로 빌드와 실행을 한번에 명령한다.
정적 파일 서비스하기
Gunicorn을 사용하며 더 이상 앱 폴더의 static 폴더에서 직접 파일을 연결하지 않았기 때문이다.
settings.py에 STATIC_ROOT의 경로를 지정해준다.
# settings.py
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, '_media')
STATIC_ROOT = os.path.join(BASE_DIR, '_static')
STATIC_URL이 프로젝트의 urls.py 단에서도 처리가 되도록 urls.py에 한 줄 추가한다.
# urls.py
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)