Django에서 settings.py 분리하기

이상해씨·2023년 9월 7일
0

장고 (Django)

목록 보기
17/38
post-thumbnail

들어가며..

logging 과정에서 Allowed_host 처리하면서 보안으로 host 관리는 어떻게 할 지에 대한 의문이 들었다.
찾아보니, settings.py에서는 민감한 정보가 포함될 수 있으니 분리하는 것이 좋다고 하더라.
그래서 분리 해보았다.

settings.py 분리 왜 하는거야?

기존 코드를 분리하는 것이 쉬운 일은 아닐텐데 왜 하는 것일까? 이로써 얻는 장점은 무엇일까?

1. 모듈성과 가독성 향상
프로젝트가 복잡해지면, 파일 설정이 길어져 가독성과 유지보수의 효율성이 떨어진다. 따라서, 분리 및 그룹화를 함으로써 모듈성과 가독성을 향상시킨다.
2. 보안 강화
settings.py에는 DB 정보, Host 정보 와 같이 민감한 정보가 있다. 이를 분리하여 보안을 강화할 수 있다.
3. 환경관리 및 베포
서로 다른 환경에서 프로젝트를 운영할때, 로컬 개발, 스테이징 환경,프로덕션 환경마다 DB, DEBUG, HOST 설정을 다르게 하여 베포 및 관리 할 수 있다.

분리 방법

1) settings디렉토리 생성

  • settings.py를 효율적으로 관리하기 위함
  • config 디렉토리 내부에 settings디렉토리를 생성
cd config # config로 이동
mkdir settings # settings 디렉토리 생성

2) base.py로 settings.py 변경

  • settings.py 파일을 base.py로 변경 후, 아까 생성한 config > settings 디렉토리에 이동

  • base.py 파일 수정
    config에서 프로젝트>config> settings에 위치함으로 parent를 세번 설정

BASE_DIR = Path(__file__).resolve().parent.parent.parent

3) 개발환경 분리

3-1) local.py

  • 로컬 환경 설정(호스트만 다르게 설정.)
  • 프로젝트\앱\config\settings\local.py
from .base import *

ALLOWED_HOSTS = []
  • local 환경에 적합하도록 allowed_hosts 항목을 비워줌

3-2) prod.py

  • 서버환경 설정 (운영환경)
  • 프로젝트\앱\config\settings\prod.py
from .base import *

ALLOWED_HOSTS = ['<호스트값>']
  • 최종 디렉토리 구조

4) 서버 작동시키기

  • settings 옵션은 특정 환경에서 서버를 구동시킬 수 있도록 함
  • host를 분리 후, settings 옵션 없이 작동시 오류 발생
    CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

4-1) local

python manage.py runserver --settings=config.settings.local

4-2) prod

python manage.py runserver --settings=config.settings.prod

5) 로컬 설정 자동화

  • 매번 settings 옵션을 주어 서버를 실행하기 번거로움으로 사용.
  • Django_settings_module 환경 변수 설정하여 settigns 옵션이 없어도 해당 서버 실행
set DJANGO_SETTINGS_MODULE=config.settings.local
py manage.py runserver

참고

profile
공부에는 끝이 없다

0개의 댓글