장고에서는 프로젝트 생성 시 settings.py
에 자동으로 SECRET_KEY
를 생성해줍니다. 이는 세션, 메시지, 토큰, 암호화된 서명 등에 사용되므로 외부로 유출되지 않게 잘 관리해야 합니다. 특히나 프로젝트 협업을 진행할 때 사용하는 깃을 통해 직접 SECRET_KEY
나 데이터베이스의 암호, AWS 정보, 각종 소셜 로그인 API 키 등을 업로드해 공유할 경우 유출되어 큰 문제가 발생할 수 있습니다.
SECRET_KEY
를 프로젝트 파일과 구분하여 관리하는 방법으로는 1. 환경 변수 설정 2. 로컬 파일 생성이 있습니다.
환경 변수 설정
환경 변수란 운영 체제(OS)에서 프로세스를 실행하기 위해 참조하는 변수를 의미합니다. 즉, 프로세스가 컴퓨터에서 작동하는 데 영향을 미치는 글로벌 환경의 동적인 값들을 의미합니다.
.bashrc
, .zshrc
파일 등에 다음과 같이 환경 변수를 설정하여 키를 관리할 수 있습니다. 배포 도구에 따라 환경 변수 설정 방법이 달라질 수 있습니다.
# 터미널에서 사용 중인 셸 확인
echo $SHELL
/bin/zsh
# 셸의 프로필 스크립트를 열기
vim ~/.zshrc
# 스크립트 내에 다음을 추가
export DJANGO_SECRET_KEY='django-insecure-w$cc...'
export DB_NAME='project'
...
# 저장 후 터미널로 빠져나와 zsh 명령어 입력
zsh
#환경 변수 설정 확인
echo $DJANGO_SECRET_KEY
환경 변수 설정을 마쳤다면 이제 장고의 settings.py
로 이동하여 다음과 같이 환경 변수를 지정해줍니다.
# settings.py
import os
from django.core.exceptions import ImproperlyConfigured
def get_env_variable(var_name):
"""환경 변수를 가져오거나 에러 메시지를 반환."""
try:
return os.environ[var_name]
except KeyError:
error_msg = "Set the {} environment variable".format(var_name)
raise ImproperlyConfigured(error_msg)
SECRET_KEY = os.environ["DJANGO_SECRET_KEY"]
로컬 파일로 관리
로컬 파일로 관리하는 가장 간단한 방법은 프로젝트에서 my_settings.py
를 만들고 내부에 데이터를 저장한 다음 이를 .gitignore
에 추가하여 추적을 방지하는 것입니다.
{
"django:" {
SECRET_KEY = 'django-insecure-w$cc...'
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysite',
'USER': 'root',
'PASSWORD': '****',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
},
"aws": {
AWS_ACCESS_KEY_ID = "AKIA2WVSW..."
AWS_SECRET_ACCESS_KEY = "psRKZoW+3..vQ"
}
}
로컬 파일에서 SECRET_KEY
를 관리하는 보다 자세한 방법은 장고 초기 세팅 포스팅을 참조해보시기 바랍니다.
참고:
https://ehfgk78.github.io/2018/02/03/Django_secrets/
https://wayhome25.github.io/django/2017/07/11/django-settings-secret-key/
'Django' 카테고리의 다른 글
장고 개발 환경에 따라 settings.py 분리하는 방법 (0) | 2022.03.13 |
---|---|
장고 get_or_create()와 race condition 문제 (0) | 2022.03.05 |
장고 Q를 활용한 필터링, 정렬, 검색 방법 (0) | 2022.02.20 |
장고에서 HTTP GET, POST 요청 처리하는 방법 (0) | 2022.02.20 |
장고 ORM과 쿼리셋의 개념 (0) | 2022.02.07 |