Django settings 환경 분리하기
장고를 처음 배우면서 가장 당황했던 일은 settings.py
이란 파일은 온데간데 없고, deploy.py
, debug.py
로 환경세팅을 나누는 것이었다.
원래는...
./manage.py runserver
runserver
를 할 때는 명령어가 간단했는데, 이제는 파일을 나누게 되니까 여러모로 당황스러웠다.
./manage.py runserver --settings=config.settings.debug # 개발(디버그)용./manage.py runserver --settings=config.settings.deploy # 배포(서비스)용
환경 세팅이 deploy
용과 debug
용으로 나뉘면 런서버를 실행하는 법도 바꿔줘야 한다.
그냥 /.manage.py runserver
라고만 한다면 장고는 어떤 걸 실행해야 할지 모르기 때문에 --settings=모듈 경로
라고 명시적으로 적어줘야 한다. 그러나 매번 런서버를 할 때 타자를 길게 쳐야하므로 여러모로 불편하다.
또 다른 한가지 방법은
디버그 용과 디플로이 용 모두 테스트해야 할 때는 쉘 두개를 키고 쉘 하나에 명령어 하나를 입력할 수도 있다. (단, 쉘이 꺼지면 다시 설정해줘야 한다.)
$ export DJANGO_SETTINGS_MODULE=$ export DJNAGO_SETTINGS_MODULE=
왜 settings.py
를 나눠야 하는가?
settings 원본
보통 프로젝트를 시작하면 settings.py
하나만 던져준다. 하지만 실무에서는 로컬
과 배포(서비스용, 릴리즈 버전)
로 환경설정을 나눈다. 나의 경우에는 프로그래밍이 처음이다보니 내가 지금 속고 있는게 아닐까? 할 정도로 당황했다. 그런데 이것은 장고뿐만 아니라 상용화되는 모든 소프트웨어의 공통적인 분모라고 생각하면 이해하기 쉬웠다. 우리가 흔히 하는 게임도 개발용과 배포용으로 나뉜다.
로컬용
은 아무래도 오류를 검출하기 위한 환경세팅을 가져간다.사람마다 표현법이 다 다르다.
로컬(local), 디벨롭(development), 데브(dev), 디버그(debug) 등..
배포용
은 로그 기록이나 오류를 숨겨 사용자 편의성을 도모하고 악의적인 해커로부터 보호하는 환경세팅을 가져간다.사람마다 표현법이 다 다르다.
디플로이(deploy), 프러덕션(production 혹은 prod), distriution, 릴리즈(release), 배포 등..
약간의 의미차이가 존재한다.
어떻게 나눠줘야 할까?
settings 모듈화
위와 같은 이유로 settings
의 설정들을 개발용(debug)
용과 배포용(deploy)
으로 모듈화(분리)했다. 다만, 모든 환경에서 공통적으로 사용되는 설정들은 base.py
에 두었다.
base.py
에는 뭘 두지?
1. 각 종 경로
2. 언어, 타임존 등
base.py
에는 공통적으로 사용되는 설정들이 저장된다. 각 종 디렉토리 경로, AUTH_USER_MODEL
, INSTALLED_APPS
등이 base.py
에 설정하게 된다.
debug.py
와 deploy.py
의 차이점
Debug과 Deploy를 구분짓는 가장 핵심은 Debug = True 또는 False
이다.
debug=True 화면
debug=True에서는 왜 오류가 났는지 알려주지 않는다.
단순히 페이지를 찾을 수 없다(Page Not Found)라고만 나온다.
어느 파일에서, 몇 번째 줄에서 오류가 났는지는 알려주지 않는다.
debug=False 화면
debug=False에서는 오류가 난 이유를 상세하게 알려준다.
화면에서 잘렸지만 어느 파일에서, 몇 번쨰줄에서 오류가 났는지 알수 있다.
이제 runserver
를 하려면 우리는 두 가지 옵션이 생겼다.
배포용
런서버를 할 것인지 개발용
런서버를 할 것인지 선택할 수 있게 되었다.
$ ./manage.py runserver --settings=config.settings.debug # 개발용$ ./manage.py runserver --settings=config.settings.deploy # 배포용
그렇다면 이제 런서버를 하기 위해서는 위와 같이 --settings
를 어느 것을 사용할 것인지 명시해야 한다.
위에서는 간단하게 Debug의 True / False 여부만을 다루었지만, Static
파일의 경로(로컬용은 컴퓨터에 저장하고, 배포용은 외부 서버에 저장하고 등), DB
종류(개발용은 sqlite3
를 사용하고, 배포용은 postgreSQL
를 사용한다는 등), WSGI
설정, allowed host
등 세팅들 다양하게 가져갈 수 있다.
참고한 글
settings.py
에 대한 자세한 내용은 여기를 참조하도록 하자. 굉장히 쉽고 자세하게 설명되어있다.
'프로그래밍 > Django' 카테고리의 다른 글
[DJango] AbstractBaseUser vs AbstractUser 비교하기 (0) | 2017.07.15 |
---|---|
[Django] Django + Celery + Redis 이용하기 (5) | 2017.07.15 |
[Django] Django Rest Framework(DRF) 알아보기 1부 (2) | 2017.07.13 |
[Django] get_or_create 함수 (1) | 2017.06.29 |
[Django] OneToOne 모델 이해하기 (0) | 2017.06.10 |