Home Django Settings.py 분리하기
Post
Cancel

Django Settings.py 분리하기

개요

프로젝트에 도커 적용하면서 개발환경과 배포환경 분리의 필요성을 느꼈다.

배포 환경에서는 debugFalse로 변경하고, ALLOWED_HOSTS를 추가하여야 했다.

하지만 배포 환경 settings.py로는 로컬에서 테스트가 되지 않기 때문에 일일히 개발 환경 상태로 값을 고치고 작업하였다.

이런 번거로움을 덜기 위한 작업이 바로 setting의 분리다.

settings.py 분리하기

환경을 분리하기 위해 똑같은 settings.py를 여러개로 분리하는 것이 답이 아니다.

우선, 모든 환경에서 공통적으로 사용할 수 있는 환경설정은 base.py로 선언한다.
그리고 local용 설정과 production용 설정으로 파일을 나누었다.

1
2
3
4
5
6
7
8
9
10
├── project
│   ├── settings
│   │   ├── base.py
│   │   ├── local.py
│   │   └── prod.py
│   ├── __init__.py
│   ├── asgi.py
│   ├── urls.py
│   └── wsgi.py
...

환경설정 파일

base.py

기존의 settings.py 내용을 그대로 사용하였다.
여기서 환경에 따라 달라질 부분인 DEBUG, ALLOWED_HOSTS, DATABASES 등을 제외하였다.

또한, BASE_DIR를 재정의해야한다.

1
2
3
...
BASE_DIR = Path(__file__).resolve().parent.parent.parent
...

기존 settings.py 위치는 /<프로젝트명>/project/ 였다.
하지만 이제는 base.py의 위치가 /<프로젝트명>/project/settings/로 한 단계 깊어졌다.
이를 반영하기 위에 뒤에 .parent를 추가하였다.

local.py

base.py를 import를 통해 불러온 뒤, 필요한 부분을 정의해준다.

1
2
3
4
5
6
7
8
9
10
11
12
from .base import *
DEBUG = True
ALLOWED_HOSTS = ['*']
...
DATABASES = {
    'default': {
        ...
        'HOST': "localhost",
        ...
    }
}
...

prod.py

base.py를 import를 통해 불러온 뒤, 필요한 부분을 정의해준다.

정의한 데이터는 배포 환경에 맞도록 구성하였다.

settings.py를 지정 실행하기

기존의 서버 실행 명령으로 Django 서버를 실행하면 오류가 나는 것을 볼 수 있다.
이는 settings.py가 사라지면서 읽지 못하기 때문이다.

그러므로 실행할 때는 다음과 같은 명령어를 실행하여야 한다.

1
2
3
4
5
# 로컬 설정 기반 실행
python manage.py runserver --settings=project.settings.local

# 배포 설정 기반 실행
python manage.py runserver --settings=project.settings.local

환경 변수를 사용한 방법도 있다.
DJANGO_SETTINGS_MODULE 환경 변수에 경로를 설정해두면, Django가 자동으로 해당 설정 파일을 읽는다.

This post is licensed under CC BY 4.0 by the author.

DRF에서 Swagger 문서 작성

DRF에서 복합키로 instance 찾기

Trending Tags