Django 프로젝트를 생성하면 보안 키(SECRET_KEY
), 데이터베이스 비밀번호 정보가 settings.py
에 직접 작성되어 있다. 하지만 보안상 위험하므로, 별도의 secret.json
파일로 분리하는 것이 좋다. 이번 글에서는 settings.py에서 직접 설정한 값을 제거하고, secret.json을 통해 안전하게 관리하는 방법을 설명한다.
기본적으로 settings.py
에는 다음과 같은 코드가 있다.
SECRET_KEY = 'your-secret-key-here'
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'myuser',
'PASSWORD': 'your-database-password',
'HOST': 'localhost',
'PORT': '5432',
}
}
이처럼 SECRET_KEY
및 DATABASES
의 비밀번호가 직접 코드에 포함되어 있으면, 버전 관리(Git)에서 유출될 위험이 있다.
따라서, 이를 별도의 파일로 분리하는 것이 좋다.
프로젝트의 settings.py
가 위치한 폴더에 secret.json
파일을 만든다.
my_project/
│── my_project/
│ │── settings.py
│ │── secret.json ← 새로 생성
│── manage.py
secret.json
파일을 열고 다음과 같이 작성한다.
{
"SECRET_KEY": "your-secret-key-here",
"DATABASE_NAME": "mydatabase",
"DATABASE_USER": "myuser",
"DATABASE_PASSWORD": "your-database-password",
"DATABASE_HOST": "localhost",
"DATABASE_PORT": "5432"
}
이제 settings.py에서 secret.json을 불러와 사용하도록 수정한다.
import os
import json
# secret.json 파일 경로 설정
SECRET_FILE = os.path.join(os.path.dirname(__file__), 'secret.json')
# JSON 파일 로드
with open(SECRET_FILE) as f:
secrets = json.load(f)
# 보안 정보 적용
SECRET_KEY = secrets["SECRET_KEY"]
DEBUG = secrets["DEBUG"]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': secrets["DATABASE_NAME"],
'USER': secrets["DATABASE_USER"],
'PASSWORD': secrets["DATABASE_PASSWORD"],
'HOST': secrets["DATABASE_HOST"],
'PORT': secrets["DATABASE_PORT"],
}
}
이제 SECRET_KEY
, DATABASE_PASSWORD
와 같은 중요한 정보가 코드에 직접 노출되지 않고, secret.json
에서 안전하게 관리된다.
secret.json
파일이 Git에 포함되지 않도록 설정해야 한다.
.gitignore
파일을 열고 다음 내용을 추가한다.
# .gitignore에 추가
secret.json
이제 secret.json
파일은 Git에 커밋되지 않는다.
settings.py
에서 SECRET_KEY
및 중요 정보를 제거secret.json
또는 .env
파일을 생성하여 보안 정보 관리settings.py
에서 JSON을 불러와 설정.gitignore
에 secret.json
를 추가하여 Git에서 제외@nullvuild