개발하는 자몽

[Django] 환경변수 관리 (django-environ) 본문

Python/Django

[Django] 환경변수 관리 (django-environ)

jaamong 2024. 1. 6. 13:58

지난 글에서 외부에 노출되면 안 되는 정보는 `django-environ`을 통해 분리할 수 있다고 언급했다.

 

django-environ환경 변수로 Django 애플리케이션을 구성할 수 있도록 해주는 파이썬 패키지다. 파이썬 패키지이므로 `pip`를 통해서 설치할 수 있다.

 

django-environ 적용

가상 환경이나 작업 환경에 아래 명령어를 입력하여 `django-environ`을 설치해 보자.

참고로 그냥 `environ`도 있는데 이 친구가 아니다! 반드시 `django-environ`으로 설치!

$ pip install django-environ

 

`manage.py`와 동일한 위치에 `.env` 파일을 생성하자. 그리고 생성한 파일에 `key=value` 형식으로 외부에 노출하면 안 되는 중요 정보(DB 정보, SECRET_KEY 등)를 작성한다. 작성할 때 띄어쓰기를 하면 안된다.

SECRET_KEY="..."
DJANGO_SETTINGS_MODULE="..."

DB_NAME="..."
DB_USER="..."
DB_PASSWORD="..."
DB_HOST="..."

 

다 작성했다면, 해당 정보들이 적혀있던 원래 파일에는 아래와 같이 작성하여 정보를 숨기도록 하자. 이때 `.gitignore`에 반드시 `.env`를 넣어야 한다. 그렇지 않으면 이렇게 분리한 의미가 없다😿

import os, environ  # environ이 django-environ이다.

env = environ.Env(DEBUG=(bool, False))
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))

... = env('...')

 

settings.py 또는 base.py에서 사용한다면 `import` 이후 코드는 `BASE_DIR` 다음 라인에 작성하면 된다.

 

config.py

`.env`에서 정의한 값들을 여러 파일에서 불러와야 할 경우, 위에서 작성한 코드(import ~ envrion...)를 모든 파일에 작성하는 것을 상당히 번거롭다. 

따라서 해당 코드를 한 곳에서 작성한 후 그 파일을 `import` 하는 것이 더 효율적으로 관리할 수 있는 방법이다. 

 

 

`manage.py`와 같은 위치에 `config.py` 파일을 생성한다. 그리고 `config.py`에 아래와 같이 코드를 작성한다.

from pathlib import Path
import os, environ


BASE_DIR = Path(__file__).resolve().parent  # manage.py와 동일한 위치이기 때문에 parent 한 번

env = environ.Env(DEBUG=(bool, False))
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))

aaa = env('aaa')  # 가져오고자 하는 환경 변수 입력
...

`config.py` 위치는 settings.py/base.py와 다르므로 여기서 선언된 `BASE_DIR`은 `parent`를 한 번만 사용한다.

 

 

`config.py`를 다 작성했다면 해당 환경 변수가 필요한 파일에서 아래와 같이 사용할 수 있다!

from config import aaa  # config에서 필요한 환경 변수 import

load_aaa = joblib.load(aaa)
...

 

Notice

`config.py`를 생성하여 사용할 때 `BASE_DIR`의 위치를 확인하자. 또한 `config.py`를 `import` 할 때도 경로 작성에 주의하자.

 

 

 

Comments