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