django-environ으로 민감 정보와 환경변수 안전하게 관리하기
django-environ을 활용해 개발/테스트/운영 환경별 설정과 SECRET_KEY, DB 접속 정보 등 민감 정보를 코드와 분리하여 보안성과 관리 효율성을 높이는 방법

환경변수 관리의 중요성
문제점
settings.py에 하드코딩 시 Git 저장소에 민감 정보 노출
환경별 설정 변경 시 코드 직접 수정 필요
팀원 합류 시 로컬 환경 설정 안내의 번거로움
해결 방법
Twelve-Factor App 원칙에 따른 설정과 코드의 완전 분리
django-environ을 통한 환경변수 기반 설정 관리
기본 설정 및 사용법
설치
pip install django-environ.env 파일 생성
SECRET_KEY='your-super-secret-and-long-django-secret-key'
DEBUG=True
DATABASE_URL='psql://user:password@localhost:5432/mydatabase'
ALLOWED_HOSTS=localhost,127.0.0.1,.your-domain.com.gitignore 필수 추가
.envsettings.py 적용
import os
import environ
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
env = environ.Env(
DEBUG=(bool, False)
)
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
SECRET_KEY = env('SECRET_KEY')
DEBUG = env('DEBUG')
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
DATABASES = {
'default': env.db()
}실무 활용 팁
협업을 위한 .env.example 파일
실제 값 대신 예시 값으로 구성
Git에 포함하여 필요한 환경변수 목록 공유
타입 캐스팅 활용
env.bool(): 불리언 변환env.int(): 정수 변환env.list(): 콤마 구분 리스트 변환env.json(): JSON 형식 변환
기본값 설정
SOME_API_KEY = env('SOME_API_KEY', default=None)
PAGINATION_SIZE = env.int('PAGINATION_SIZE', default=20)Docker 환경 대응
로컬: .env 파일 활용
운영: 컨테이너 환경변수 직접 주입
시스템 환경변수가 .env 파일보다 우선 적용
보안 주의사항
SECRET_KEY 생성
from django.core.management.utils import get_random_secret_key
print(get_random_secret_key())Last updated
