Django프로젝트에서 settings.py 파일을 여러 개의 파일로 나누는 것을 일반적인 프로젝트 구성 패턴 중 하나입니다. settings.py를 여러 파일로 분리하면 보다 모듈화 된 방식으로 설정을 관리하고 개발, 스테이징, 프로덕션 등 다양한 환경에서 다른 설정을 사용할 수 있다는 이점이 있습니다
base.py는 모든 설정이 공통으로 사용되는 범용 설정 파일입니다.
local.py는 로컬 개발 환경에서만 사용되는 설정파일입니다.
settings.py 결과
settings.py 파일을 분리하고 나면 좌측과 같은 양식으로 파일이 정리된 것을 볼 수 있을 것입니다.
settings.py를 나누는 방법은 개발하면서 편한 방법으로 서로 협의후 결정하는 것이기 때문에 정해진 정답은 없다.
settings.py 분리하기
우선 현재 위치를 확인해보고 프로젝트 안에 settings.py가 있는 경로로 이동하여 준다. 본인은 프로젝트의 루트 디렉터리에 위치해 있었기 때문에 한 번만 이동해 주면 되었다.
cd weheproject
이후 현재 위치에 settings.py 파일을 분리하여 정리해둘 settings 파일을 만들어준다.
mkdir settings
그리고 위에서 설명했듯 모든 설정이 공통으로 사용되는 파일은 base.py가 될 것이기 때문에 settings.py를 base.py로 rename 하여 settings폴더 안으로 넣어줄 것이다.
mv settings.py settings/base.py
이렇게 하면 settings.py를 settings폴더 안에 base.py라는 파일이 없을 경우 base.py라는 파일로 변경하여 준다.
처음 해본다면 cp명령어로 복사해서 하는 것도 나쁘지 않은 것 같다. - 본인은 cp로 한번 해보고 진행하였다. 백업해둔후 마지막에 실행해보고 재대로 동작되면 삭제해주었다.
정상적으로 settings파일 안에 base.py가 옮겨졌다면 local.py를 만들 차례이다. base.py에서 필요한 내용을 옮길 것이기 때문에 우선 빈 파일로 만들어주었다.
touch local.py
정상적으로 진행이 되었다면 맨 위의 양식으로 파일이 만들어졌을 것이다. cp를 통해 진행하였으면 settings.py가 남아있고 그렇지 않으면 없어야 한다. - 이제 settings.py는 다른곳으로 백업해두자.
local.py
local.py는 위에서 설명했듯 로컬 개발환경에서만 사용되는 설정파일로 개발자의 개인설정이 포함되는 부분이기 때문에 정답은 없지만 기본적인 세팅은 아래와 같이하였다.
from .base import *
import environ
ALLOWED_HOSTS = []
BASE_DIR = Path(__file__).resolve().parent.parent.parent
env = environ.Env(DEBUG=(bool, True))
environ.Env.read_env(env_file=os.path.join(BASE_DIR, ".env"))
DEBUG = True
DATABASES = {
"default": {
"ENGINE": env("DB_ENGINE"),
"NAME": env("DB_NAME"),
"USER": env("DB_USER"),
"PASSWORD": env("DB_PASSWORD"),
"HOST": env("DB_HOST"),
"PORT": env("DB_PORT"),
}
}
from. base import *
이 구문을 통해서 base.py의 내용을 불러올 수 있다.
ALLOWED_HOSETS
ALLOWED_HOSTS = []의 경우는 base.py와 local.py파일 두 개 모두 존재해야 한다.
BASE_DIR
기존의 BASE_DIR과 차이가 없어보지만 경로가 하나 아래로 이동한 것이기 때문에 parent를 하나 더 추가해줘야 한다.
기존
BASE_DIR = Path(__file__).resolve().parent.parent
변경
BASE_DIR = Path(__file__).resolve().parent.parent.parent
데이터 베이스
데이터 베이스를 local.py에 저런 양식으로 넣은 이유는 보안과 유연성 때문이다. 기존의 코드 역시 제대로 작동하지만 위처럼 적으면 Django의 환경변수 파일(. env)에 설정된 값을 가져와 사용하고 기존처럼 작성하면 하드 코딩된 값을 사용하기 때문이다.
환경 변수파일에 설정된 값을 사용하면 좋은 점은 보안과 유연성 부분에서 장점을 가지고 있는데
보안적인 방면에서는 데이터베이스 연결에 필요한 민감한 정보를 코드에 하드코딩하지 않고 외부 파일에 저장하고 코드에서 해당 값을 가지고 올 수 있다는 장점이 있다.
유연성적인 방면에서는 설정을 쉽게 관리할 수 있다는 장점이 있다. 예를 들면 개발환경에서는 로컬 데이터베이스를 사용하고, 운영환경에서는 별도의 클라우드 데이터베이스를 사용할 수 있다. 이렇게 하면 코드를 수정하지 않고도 쉽게 환경에 따라 데이터 베이스를 설정할 수 있다.
base.py
base.py는 위 내용대로 진행하였다면 settings.py 내용이 그대로 들어가 있을 텐데 local.py파일을 위처럼 진행하였다면 데이터 베이스 구문을 삭제해 주고 BASE_DIR 부분만 바꾸어주면 된다. local.py에서 설정했듯이 parent부분을 하나만 붙여주면 된다.
'Django > DRF' 카테고리의 다른 글
Django에서 루트파일 밑에 test파일을 만드는 이유 (0) | 2023.05.11 |
---|---|
Django 소셜로그인 구현 / 카카오톡 (0) | 2023.05.08 |
Django - pipenv로 패키지 관리, 사용 (0) | 2023.04.18 |
Django - environ을 이용한 환경 변수 관리 (0) | 2023.04.18 |
login - logout 기능 구현 (0) | 2023.03.21 |