Settings.py을 분리한다는 것이 무슨 말이죠?
장고를 사용하다보면 기능 구현을 위해 여러 라이브러리나 모듈, 미들웨어 등을 추가하면서 몸집을 키워나가게 되는데 이 과정에서 settings.py 파일의 크기가 커진 나머지 내가 어떤 것을 추가하였는지 대해 찾기도 어려울 뿐더러, 배포을 할때에는 사용자에게 보여주면 안되는 세부정보들을 제공하지 않기 위해 개발용 세팅과, 배포용 세팅을 따로 둘 필요성이 있습니다.
따라서 이런 이유로 장고 개발자들은 본래 프로젝트를 시작하면 만들어지는 settings.py을 settings 라는 폴더를 만들고 그 안에 common.py, prod.py 등으로 쪼개서 관리하시는 식으로 프로젝트를 관리하고 있습니다.
한문장으로 설명하자면 : 그냥 프로젝트에 사용되는 설정 코드를 분리하여 쉽게 관리하기 위함입니다.
Settings.py을 분리 어떻게 하는데요?
project 아래에 settings 폴더를 만든뒤 settings.py 을 넣어 준 뒤, common.py 로 이름을 변경합니다.
project
├── settings/
├── __init__.py
├── common.py
├── dev.py
└── prod.py
├── __init__.py
├── asgi.py
├── urls.py
├── wsgi.py
점프 투 장고의 박응용 님이나, 인프런 강사이신 이진석 님의 코드를 보면 일반적으로 공통적인 코드는 common.py, 개발 관련 코드는 dev.py, 배포 관련 코드는 prod.py 에 넣어 관리하고 있음을 확인 할 수 있었습니다.
통상적으로는 common 파일에는 프로젝트 공통적으로 사용하는 부분을 작성하며, 개발자 관점에서 사용되는 django_debug_toolbar 등 개발 관련 라이브러리 설정 같은 경우에는 dev.py에, 그리고 배포 관련한 설정은 prod.py에 설정하여 구분해 놓는 편입니다.
- 참고로 여기서 사용되는 각 파일명은 common, dev=developer, prod=production 을 의미합니다.
아래는 dev.py로 개발에 필요한 툴을 따로 구분하여 정리한 모습 입니다.
- dev.py
from common import *
INSTALLED_APPS += [
"debug_toolbar",
"rest_framework",
]
MIDDLEWARE = [
"debug_toolbar.middleware.DebugToolbarMiddleware",
] + MIDDLEWARE
# Django_Debug_Toolbar Configure Internal IPs
INTERNAL_IPS = [
"127.0.0.1",
]
여기서 중요한 것이 있는데, 원래 project/settings.py 에 있던 설정 파일을 project/settings/common.py로 폴더를 한번 더 만들어서 관리하기 때문에, BASE_DIR의 경로를 설정할 때 뒤에 .parent를 더 붙여 경로 지정을 바로 잡아주셔야 합니다.
- common.py
# 뒤에 .parent 을 붙여 BASE_DIR 의 위치를 바로 잡아 준다.
# 만약 os.path.dirname()을 사용하고 있다면, 한번 더 감싸면 된다.
BASE_DIR = Path(__file__).resolve().parent.parent.parent
...
설정을 마치고 나서는 장고 프로젝트를 실행 할 때 사용하는 manage.py 파일이 해당 세팅을 바라보도록 설정 하여야 합니다. 따라서 os.environ.setdefault()의 두번째 인수에 해당 프로젝트 세팅 경로를 재 설정해주시면 됩니다.
- manage.py
def main():
# 아래 2번째 파라미터의 경로를 재 설정 해주면 된다.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings.dev')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
그 다음 python manage.py runserver을 실행시켜 해당 프로젝트가 잘 돌아가는지 확인하시면 됩니다.
'FrameWork > Django' 카테고리의 다른 글
orm과 queryset (0) | 2024.07.10 |
---|---|
django-seed을 통해 더미데이터 만들기 (0) | 2023.12.13 |
dumpdata와 loaddata을 통해 DB데이터 추출, 적재하기 (1) | 2023.11.23 |
장고(Django) 프레임워크 소개와 프로젝트 생성하기 (0) | 2023.11.23 |
Forbidden (403) CSRF verification failed 오류 해결하기 (0) | 2023.11.11 |