티스토리 뷰

환경 변수 설정

Django로 프로젝트를 만들 때 secret key, DB설정 등 따로 설정 파일로 만들어. gitignore에 추가하여 github에 올리곤 했다.

위와 같은 방법은 퍼스널 한 프로젝트에선 괜찮겠지만, 실제 서비스를 배포할 때'. env' 파일을 사용하여 환경 변수를 설정하여 안전하게 관리한다고한다. 

 

이렇게 환경 변수를 '.env' 파일을 사용하여 설정하는 이유보안, 포트번호, 데이터베이스 등 외부에 노출하면 안 되는 민감한 정보를 보호하기 위해서인데, django-environ 모듈을 사용해서 환경 변수를 설정하는 방법을 알아봤다. 

(※ environ 모듈 말고도 dotenv과 같은 다른 모듈도 있다.)

 

공식 문서에 어떻게 설정하는지 나와있기 때문에 공식 문서를 바탕으로 사용 방법을 알아보자.

 

 

1. django-environ 설치

Django 프로젝트가 설치되어있는 가상 환경에 모듈을 설치한다.

pip install django-environ

 

2. .env 파일 작성

프로젝트 디렉토리에 .env 파일을 만들고 아래 예시와 같이 외부에 노출하면 안되는 정보들을 작성하고, 꼭 .gitignore 파일에 .env 파일을 추가한다.

(변수와 값 사이에 공백이 없게 넣어야 한다.)

 

데이터베이스도 공식 문서 DB 별 url 주소가 나와있으니 사용하는 DB로 작성하면 된다. 

 

공식 문서 내 사용 예시

DEBUG=on
SECRET_KEY=your-secret-key
DATABASE_URL=psql://user:un-githubbedpassword@127.0.0.1:8458/database
SQLITE_URL=sqlite:///my-local-sqlite.db
CACHE_URL=memcache://127.0.0.1:11211,127.0.0.1:11212,127.0.0.1:11213
REDIS_URL=rediscache://127.0.0.1:6379/1?client_class=django_redis.client.DefaultClient&password=ungithubbed-secret

 

3. settings.py에 환경 변수를 설정

프로젝트 settings.py에 import를 하고  '.env' 파일에서 설정한 환경 변수를 'os.getenv()' 함수를 사용하여 불러온다.

 

 공식 문서 내 사용 예시

import environ
import os

env = environ.Env(
    # set casting, default value
    DEBUG=(bool, False)
)

# Set the project base directory
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Take environment variables from .env file
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))

# False if not in os.environ because of casting above
DEBUG = env('DEBUG')

# Raises Django's ImproperlyConfigured
# exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')

# Parse database connection url strings
# like psql://user:pass@127.0.0.1:8458/db
DATABASES = {
    # read os.environ['DATABASE_URL'] and raises
    # ImproperlyConfigured exception if not found
    #
    # The db() method is an alias for db_url().
    'default': env.db(),

    # read os.environ['SQLITE_URL']
    'extra': env.db_url(
        'SQLITE_URL',
        default='sqlite:////tmp/my-tmp-sqlite.db'
    )
}

CACHES = {
    # Read os.environ['CACHE_URL'] and raises
    # ImproperlyConfigured exception if not found.
    #
    # The cache() method is an alias for cache_url().
    'default': env.cache(),

    # read os.environ['REDIS_URL']
    'redis': env.cache_url('REDIS_URL')
}

 

 

'study > Django' 카테고리의 다른 글

Template 기본 구조  (0) 2023.05.11
Django - AWS S3 파일 업로드  (0) 2023.04.14
Unit Test 작성  (0) 2023.03.02
Django - Query string 2  (0) 2022.09.07
CSRF - Cross Site Request Forgeries  (0) 2022.09.05
댓글