📌 환경변수 관리와 python-dotenv 사용법
개발 환경에서 **민감한 정보(API 키, DB 비밀번호 등)**를 안전하게 보호하고, 환경마다 설정을 분리하여 관리하기 위한 핵심 기법이 바로 "환경변수 관리"입니다. 이 글에서는 python-dotenv와 config_secret 방식 두 가지를 중심으로 설명합니다.
1️⃣ 환경변수란?
✔️ 환경변수는 코드와 분리된 외부 설정값입니다.
- 코드 수정 없이도 환경별 설정 변경 가능
- 팀원 간 협업 시, 공통 코드에 개인 설정 적용 가능
- 민감한 정보 보호 (GitHub에 노출 X)
💡 Tip: .env, secret.json은 .gitignore에 등록하여 GitHub에 푸시되지 않도록 관리하세요.
2️⃣ python-dotenv 사용법
python-dotenv는 .env 파일을 자동으로 읽어 환경변수로 등록해주는 Python 라이브러리입니다.
🔧 설치
pip install python-dotenv
📄 .env 파일 예시 (프로젝트 루트에 위치)
DATABASE_URL=postgres://user:password@localhost:5432/mydatabase
SECRET_KEY=mysecretkey
🧪 파이썬 코드에서 활용
with open(BASE_DIR / '.config_secret' / 'secret.json') as f:
config_secret_str = f.read()
SECRET = json.loads(config_secret_str)
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = SECRET['DJANGO_SECRET_KEY']
# secret.json에 SECRET KEY 저장
{
"DJANGO_SECRET_KEY": "django-insecure-@cggy0b3%9ie&7g_1315nnh+4la@0xx3q!%vxuda24bs0x1a%b0y$"
}
✔️ 장점 요약
- 보안성 강화: 코드에 민감 정보 미노출
- 환경별 설정 가능: 개발/운영 환경 분리
- 재사용성: 공통 코드 유지
3️⃣ config_secret 방식 (JSON 기반)
.env 방식 외에 JSON 파일로 설정값을 분리하는 config_secret 방식도 있습니다. 이 방식은 환경별 json 파일을 구분하여 보다 구조적인 설정이 가능합니다.
🔧 사용 예시
import os
import json
# 현재 환경값 (기본값: development)
current_env = os.getenv('ENV', 'development')
# 경로 지정
secret_file = os.path.join('config_secret', f'{current_env}.json')
# JSON 파일 로딩
with open(secret_file) as f:
secrets = json.load(f)
# 환경 변수처럼 사용
DEBUG = secrets['DEBUG']
DATABASE_URL = secrets['DATABASE_URL']
SECRET_KEY = secrets['SECRET_KEY']
print(f"DEBUG: {DEBUG}")
✔️ 장점 요약
- JSON 구조라서 다중 설정 관리에 유리
- 환경별 파일 분리로 테스트/운영 전환이 쉬움
- 복수 DB나 다양한 설정에 유용
✅ 정리
항목 python-dotenv config_secret(JSON)
형식 | .env (key=value) | .json (딕셔너리 구조) |
로딩 방식 | load_dotenv() | json.load() |
Git에 노출? | .gitignore 등록 필요 | .gitignore 등록 필요 |
복잡한 설정 | ❌ (단순 키-값) | ✅ (복수 계층 구조 지원) |
추천 상황 | 간단한 설정 | 환경별 설정이 많은 경우 |
🔐 보안과 유지보수를 고려한 환경변수 관리는 필수입니다. 위의 두 가지 방법을 적절히 활용해 프로젝트의 안정성과 협업 효율을 높이세요!
'Django' 카테고리의 다른 글
Chapter 8-6 Mini Project: Django Login & Logout 기능 만들기 (0) | 2025.05.12 |
---|---|
Chapter 8-5 Django 이메일 인증을 위한 SMTP 설정 가이드 (0) | 2025.05.12 |
Chapter 8-3 Django 회원가입 페이지 만들기 (정적 파일 + 폼 커스텀 + 뷰 구현) (0) | 2025.05.12 |
Chapter 8-2 Django에서 커스텀 유저 모델 만들기 (AbstractBaseUser 활용) (0) | 2025.05.12 |
Chapter 8-1 [인스타그램] 회원가입 및 로그인 기능 만들기 (0) | 2025.05.12 |