Django 1.1 개발 환경 세팅 - dev/prod 환경 분리

Kwon, Hyojin·2021년 2월 28일
0

Django

목록 보기
1/9
post-custom-banner

<Django 프로젝트 시작>

  1. velog 폴더 생성

    mkdir velog
    cd velog
  2. pyenv 파이썬 가상환경 생성

    pyenv virtualenv env-velog
    pyenv local env-velog
  3. poetry 이용해 라이브러리 관리

    poetry init
    poetry add django
  4. Django 프로젝트 생성 및 Pycharm 열기

    django-admin startproject config .
    pycharm-community .
  5. Settings 탭에서 System Interpreter 설정

  6. Django runserver 실행해 작동 확인

    python manage.py runserver

<dev/prod 개발 환경 분리>

  1. config/settings.py 우클릭 -> Refactor -> Convert to Python Package 클릭

  2. (배포시 웹서버와 Python을 통신해주는) config/wsgi.py 파일도 똑같이

  3. settings 폴더 내 _base.py, dev.py, prod.py 파일 각각 생성

    • _base.py 파일은 공통 정보를 저장하는 곳일 뿐이라 파일명 앞에 _ 넣음
  4. wsgi 폴더 내에도 dev.py, prod.py 파일 각각 생성

  5. settings/__init__.py 파일 내용 전체를 _base.py 파일로 이동

  6. dev.py, prod.py 파일에서 각각 _base.py 파일 임포트

    from ._base import *
  7. wsgi/__init__.py 파일 내용 전체도 dev.py, prod.py 파일로 각각 이동해 일부 수정

    # wsgi/dev.py
    import os
    from django.core.wsgi import get_wsgi_application
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.dev')  # 수정
    application = get_wsgi_application()
    # wsgi/prod.py
    import os
    from django.core.wsgi import get_wsgi_application
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.prod')  # 수정
    application = get_wsgi_application()
  8. settings/__init__.py 파일 내용 추가 (환경 모듈 분리)

    # setttings/__init__.py
    import os
    
    # 환경 변수에 저장된 값을 불러옴
    SETTINGS_MODULE = os.environ.get('DJANGO_SETTINGS_MODULE')
    
    # 환경 변수가 비어있거나 'config.settings'일 경우 dev 설정 파일 불러옴
    if not SETTINGS_MODULE or SETTINGS_MODULE == 'config.settings':
        from .dev import *
    
    # 환경 변수가 'config.settings.prod'일 경우 prod 설정 파일 불러옴
    elif SETTINGS_MODULE == 'config.settings.prod':
        from .prod import *
  9. _base.py 파일에서 dev/prod 분리할 정보를 각각 dev.py, prod.py 파일로 이동해 수정

    # settings/dev.py
    from ._base import *
    
    DEBUG = True
    ALLOWED_HOSTS = ['*']  # 모든 호스트 허용
    WSGI_APPLICATION = 'config.wsgi.dev.application'  # 수정
    INSTALLED_APPS += []
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }
    # settings/prod.py
    from ._base import *
    
    DEBUG = False  # 수정
    ALLOWED_HOSTS = ['*']  # 추후 배포할 호스트 주소 입력 예정
    WSGI_APPLICATION = 'config.wsgi.prod.application'  # 수정
    INSTALLED_APPS += []
    
    # DATABASES = {}  추후 실제 배포시 사용할 DB 정보 입력 예정
  10. dev 환경에서 runserver 테스트

    python manage.py runserver

  11. prod 환경에서 runserver 테스트

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

폴더 구조

.
├── .idea
├── .python-version
├── config
│   ├── __init__.py
│   ├── __pycache__
│   ├── asgi.py
│   ├── settings
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   ├── _base.py
│   │   ├── dev.py
│   │   └── prod.py
│   ├── urls.py
│   └── wsgi
│       ├── __init__.py
│       ├── __pycache__
│       ├── dev.py
│       └── prod.py
├── manage.py
├── poetry.lock
└── pyproject.toml
profile
파이썬 웹 백엔드 개발자
post-custom-banner

0개의 댓글