August 26, 2020
기존처럼 settings.py를 하나로 사용하게 되면 개발 시 DEBUG값을 true 로 두었다가 배포할때 false로 바꾸어야 하는 번거로움이 있습니다. 이외에도 환경마다 설정을 일일이 달리해야하는 등의 불편함도 있습니다.
settings.py를 분리하게 되면 몇가지 장점들이 있는데 다음과 같습니다.
환경마다 settings.py 설정 및 적용을 달리할 수 있다는 장점때문에
실무에서는 주로 settings.py를 분리해서 사용합니다.settings.py를 쪼갤때는 공개여부에 따라 파일을 분리합니다.
모든 환경에서 공통적으로 사용되는 공개 설정은 base.py 라는 파일에 작성하고
환경에 따라 설정을 달리 작성할 때는 local(development).py,production.py를 활용합니다.
비공개 설정은 대부분 환경변수를 활용합니다. 설정값에 환경변수를 로드하여 공개여부를 설정할 수 있습니다.
공개적인 설정은 레포지토리에서 저장되지만, 비공개 설정은 gitignore에 반드시 추가하여 관리해야 합니다.
CSRF 공격으로부터 웹사이트를 보호합니다.
이는 debug가 false값일때 활성화되며 allowedhost에 도메인이 추가되어있지 않으면
Disallowedhost가 발생하여 웹사이트가 정상적으로 작동하지 않습니다.BASE_DIR은 프로젝트의 root 경로를 저장해두는 변수입니다.
이 변수를 통해 파일의 경로를 지정하는데, 우리는 기존의 settings.py를 안쪽으로 한번 쪼갰으므로
기존의 변수에서 os.path.dirname()을 한번 더 추가하여 root 경로를 한단계 더 안쪽으로 설정해줍니다.각각 나눠진 파일들을 아래의 명령어를 통해 따로따로 적용하여 runserver 할 수 있습니다.
python3 manage.py shell --settings = 프로젝트 폴더.settings.사용할 파일명
python3 manage.py runserver --settings = 프로젝트 폴더.settings.사용할 파일명이외에도 shell을 통해서 환경변수를 지정해주는 방식도 있습니다.
하지만 두 방법 다 매번 runserver마다 작성해야하므로 쓰기 번거롭습니다.
이때 가상환경 내에 DJANGOSETTINGSMODULE 환경변수를
등록해두면 —settings 없이도 사용할 수 있게 됩니다.
shell을 통해 .env 위치로 들어간 뒤, 가상환경을 활성화 하고
다음 내용을 작성하여 환경변수를 등록해줍니다.
DJANGO_SETTINGS_MODULE = 프로젝트 폴더.settings.사용할 파일명settings.py를 개발용과 배포용으로 나눈김에 requirements.txt도 공통,개발용,배포용으로 나누면
패키지설치에 필요한 시간과 메모리를 줄일 수 있습니다.
두 환경 다 공통적으로 설치해야하는 것은 base.txt에
개발할때만 필요한 패키지는 development.txt에
배포할때 필요한 패키지는 production.txt에 넣어서 따로따로 설정합니다.
참고링크
https://cjh5414.github.io/django-settings-separate/
https://wikidocs.net/6606#_5
https://ehfgk78.github.io/2018/02/02/Django-Settings_Requirements/#heading-5-requirementstxt-%EB%B6%84%EB%A6%AC