- jpa
- java
- spring mvc
- spring security 6
- @transactional
- 문자열
- string
- ORM
- 데이터베이스
- 스프링부트
- 자바
- DI
- nginx
- Django
- 1차원 배열
- sql
- 프로그래머스
- mysql
- Docker
- PYTHON
- 스프링
- springboot
- session
- spring boot
- spring
- Git
- AWS
- select
- SSL
- join
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
개발하는 자몽
[Django] 환경변수 관리 (django-environ) 본문
지난 글에서 외부에 노출되면 안 되는 정보는 `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` 할 때도 경로 작성에 주의하자.
'Python > Django' 카테고리의 다른 글
[Django] Swagger를 이용한 API Documentation (0) | 2024.01.20 |
---|---|
[Django] 배포 환경에서 Nginx로 media file 제공하기 on Docker (0) | 2024.01.13 |
[Django] 개발 환경 분리 (1) | 2023.12.30 |
[Django / TIL] request와 requests (0) | 2023.10.30 |
[Django] django-crontab & Docker (1) | 2023.10.24 |