Django

Chapter 8-4 환경변수 관리와 python-dotenv 사용법

Chansman 2025. 5. 12. 20:16

📌 환경변수 관리와 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 등록 필요
복잡한 설정 ❌ (단순 키-값) ✅ (복수 계층 구조 지원)
추천 상황 간단한 설정 환경별 설정이 많은 경우

🔐 보안과 유지보수를 고려한 환경변수 관리는 필수입니다. 위의 두 가지 방법을 적절히 활용해 프로젝트의 안정성과 협업 효율을 높이세요!