장고 프로젝트를 상용화 하기 위해서는 설정파일 분리가 필수적이다. 설정파일을 분리해야 개발 버전과 프로덕션 버전의 설정을 나눌 수 있다.
이 글은 장고 프로젝트를 2가지 버전으로 나눠서 운영한다고 가정
- dev : 개발용 테스트 서버를 위한 설정
- prod : 실재 상용 서비스 프로덕션 버전을 위한 설정
1. settings 폴더 만들기
가장 먼저 기존 settings.py 가 있는 위치에 settings 라는 폴더를 생성한다
project/config/settings.py 가 있다면 project/config/settings/
2. 설정 파일 생성하기
총 3개의 파일을 생성한다.
project/config/settings/base.py
project/config/settings/dev.py
project/config/settings/prod.py
A) base.py
해당 파일은 공통 설정 파일이다. dev와 prod로 나눌 필요가 없는 공통 파일을 작성하면 된다.
기존 있던 settings.py를 복사하여 만든다
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
ROOT_DIR = os.path.dirname(BASE_DIR)
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
# Application definition
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
.
.
.
"django_rest_passwordreset",
"corsheaders",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
.
.
.
"corsheaders.middleware.CorsMiddleware",
"django.middleware.common.CommonMiddleware",
]
.
.
.
B) dev.py
개발용 셋팅을 위한 설정 파일이다.
아래 예제와 같이 개발 버전에서 적용할 내용을 설정하면 기본 base.py 의 셋팅을 덮어씌기 해서 적용된다
from .base import *
DEBUG = True
ALLOWED_HOSTS = ["localhost"]
C) prod.py
상용 서버용 설정 파일이다. 상용 서버에 적용할 설정을 입력한다.
from .base import *
DEBUG = False
ALLOWED_HOSTS = ["naver.com"]
3. 사용하기
이렇게 설정 파일을 분리했으면 장고 명령어를 사용할때 해당 설정 파일을 같이 넘겨줘야 한다.
python manage.py runserver --settings=config.settings.dev
python manage.py runserver --settings=config.settings.prod
python manage.py makemigrations --settings=config.settings.dev
python manage.py makemigrations --settings=config.settings.prod
python manage.py migrate --settings=config.settings.dev
python manage.py migrate --settings=config.settings.prod
python manage.py collectstatic --settings=config.settings.dev
python manage.py collectstatic --settings=config.settings.prod
4. 실재 서버에 배포시
보통 장고를 서버에 배포할때는 wsgi를 사용하는데, 설정 파일을 분리했으면 wsgi 실행 시에도 환경 설정 파일을 넘겨줘야 한다.
wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.dev")
#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.prod")
application = get_wsgi_application()
해당 부분을 if 문 처리할 수도 있지만 이 부분이 재대로 설정하지 않으면 서버 셋팅에 고생을 하게 되니 서버 셋팅에 자신이 없다면 환경에 맞춰서 해당 부분을 하드코딩하는 것을 추천한다.
'Django' 카테고리의 다른 글
키 파일 분리하기 (0) | 2023.02.10 |
---|---|
로그 남기기 (0) | 2023.02.09 |
서버 배포 하기 (0) | 2023.02.07 |
AWS EC2에 github를 이용해 장고 어플리케이션 배포하기3 (1) | 2023.01.25 |
AWS EC2에 github를 이용해 장고 어플리케이션 배포하기2 (0) | 2023.01.25 |