[django] settings파일 분리하기

su_y2on·2022년 1월 9일
0

Django

목록 보기
2/2
post-thumbnail

개발을 하다보면 배포(prod)와 개발(dev)을 분리해서 생각하게 됩니다. 대표적으로 DB정보나 여러가지 secret값이 다를 수 있습니다. 저도 동아리에서 시작한 프로젝트가 커지면서 환경을 분리하게 되었는데요. django에서 환경을 분리하는 방법을 기록해보려고합니다



파일구조 재구성

django에서는 settings.py에서 환경설정을 해줍니다. dev와 prod의 환경이 완전히 다른 것이 아니기 때문에 공통적인 설정은 base.py에 그리고 차이가 나는 부분들은 각각 dev.py, prod.py로 분리하겠습니다


원래 settings.py가 있던 곳과 같은 위계로 settings라는 패키지를 만들어줍니다

그리고 settings패키지에 base, dev, prod라는 파이썬파일을 만들어 줍니다


dev.py / prod.py

dev.py

from .base import *

DEBUG = True

ALLOWED_HOSTS = env('DJANGO_ALLOWED_HOSTS').split(" ")


prod.py

from .base import *  # noqa

DEBUG = False
ALLOWED_HOSTS = env('DJANGO_ALLOWED_HOSTS').split()

dev와 prod는 기본적으로 base가 더해져야하기때문에 import해줍니다
그리고 DEBUG는 dev는 True, prod는 false로 해주는데요 그 이유는 DEBUG가 true일때와 아닐때의 오류페이지를 보면 바로 알 수 있습니다



예시로 없는 url을 조회했을 때 화면을 보면

DEBUG = False 때는 별다른 정보가 없이 깔끔하게 찾을 수 없다는 에러페이지가 뜹니다

반면에 DEBUG = True 때는 더 자세하게 에러에 대한 설명들을 제공해줍니다 이 정보들은 디버깅할 때 필요한 것이지 사용자에게 보여서는 안되겠죠?



환경적용해서 서버돌리기


마지막으로 해결해야하는 문제는 django는 내가 settings를 분리했다는 것을 모른다는 것입니다! 따라서 이전과 같이 python manage.py runserver만 해버리면 어떤 setting파일을 적용해서 서버를 돌려야하는지 모릅니다..

setting을 적용하는 방법은 두가지가 있습니다

첫 번째는 --settings 옵션을 함께 넘겨주는 것입니다

> python manage.py runserver --settings=config.settings.dev

config.settings.dev 이부분에 프로젝트 파일구조에 맞춰서 경로를 넣어주면 됩니다


두 번째 방법은 환경변수 DJANGO_SETTINGS_MODULE를 이용하는 것입니다 먼저 환경변수의 값을 넣어주고 이전처럼 서버를 돌리면 됩니다. 환경변수는 가상환경을 나갔다오면 다시 설정해줘야합니다

> set DJANGO_SETTINGS_MODULE=config.settings.dev
> python manage.py runserver



참고 점프투장고 https://wikidocs.net/77110#debug https://wikidocs.net/75560#settings_1

0개의 댓글