django를 기반으로, 개발 서버 배포를 위한 환경 변수(environment variable) 설정에 대해 설명한 문서입니다.
0. 환경 변수를 사용하는 이유
- 다른 개발자들과 원활한 협업 : 다른 개발자들이 내 코드를 봤을 때 쉽게 이해할 수 있도록 코드가 간결할 필요가 있습니다. 또한 작업 효율을 높이기 위해서는 github에서 내 코드를 내려받았을 때 바로 실행해볼 수 있도록 세팅해야 합니다.
- 노출되어서는 안 되는 값 처리 : 프로젝트 중 노출되서는 안 되는 비밀값들이 존재합니다. 예를 들어 AWS에서 주어진 access key id나 access secret key 등이 그렇습니다. 이를 환경변수로 처리함으로써 개인정보를 보호할 수 있습니다.
1. python-decouple
파이썬 라이브러리 중 하나인 python-decouple로 비밀값들을 처리할 수 있습니다. 로컬에서 사용할 수 있는 방법 중 하나입니다.
1.1 설치
pip install python-decouple
1.2 사용 방법
.env 파일을 생성합니다. 해당 파일 내에 비밀값으로 지정하고 싶은 값들을 적습니다.
SECRET_KEY = 'aslkj3kljklj9089@(&))@'
DEBUG = True
settings.py에서는 다음과 같이 사용할 수 있습니다.
from decouple import config
...
# django secret key
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=False, cast=bool)
...
2. os.environ
2.1. .bashrc/ .bash_profile 사용
$ vi ~/.bashrc # .bashrc 파일 수정
$ vi ~/.bash_profile # .bash_profile 수정
export '환경변수명 1' = '값 1'
export '환경변수명 2' = '값 2'
...
# ex> export DJANGO_SECRET_KEY = 'sgalkjlk23jlk22098(*)&&%&*'
$ source ~/.bashrc # .bashrc 변경사항 적용
$ source ~/.bash_profile # .bash_profile 변경사항 적용
- 위와 같이 처리된 환경 변수를 django 및 python에서는 아래와 같이 가져와 사용할 수 있습니다.
- 환경변수를 추가한 후에는 적용하는 것을 잊지 않도록 합니다!
# 환경 변수 사용하기
# secret key
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
# database
DATABASE = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'DB 이름',
'USER': os.environ.get('DBUSER', 'winter'),
'PASSWORD': os.environ.get('DBPASS', ''),
'HOST': os.environ.get('DBHOST', 'localhost'),
'PORT': os.environ.get('DBPORT', '5432')
}
}
# 환경 변수가 존재하지 않을 경우 기본값 설정하기
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
- kubenetes에서 서버 배포 시 .bashrc의 환경변수를 가져와 사용하려면, kubectl secret에 환경변수와 동일한 변수로 값을 추가하고, deployment.yaml의 env에서 해당 Secret 값들을 사용하겠다고 명시해야 합니다.
'django' 카테고리의 다른 글
[django]django에서 DB 다루기 (0) | 2022.02.24 |
---|---|
[django]postgres DB와 연동하기 (0) | 2022.02.14 |
[django]drf-yasg로 swagger 적용하기 (0) | 2022.02.13 |