python dotenv 사용법: 실무 환경변수 관리와 적용 가이드
python dotenv 사용법을 중심으로 .env 파일 생성, 로드 방법, 실무 적용 예제와 보안·운영 주의사항을 정리합니다. 바로 적용 가능한 체크리스트 포함. 실무 적용 흐름과 자주 하는 실수까지 함께 확인할 수 있습니다.
python dotenv 사용법이 필요한 상황
python dotenv 사용법은 로컬과 배포 환경에서 민감정보(시크릿, DB_URL 등)를 코드에 하드코딩하지 않고 안전하게 관리하려는 실무 개발자에게 필요합니다. 이 글에서는 .env 파일 생성, python-dotenv로 로드하는 방법, Django/Flask 적용 예제, 보안 및 운영 주의사항까지 정리해 바로 적용할 수 있게 안내합니다.
python dotenv 사용법 핵심 개념
- .env 파일: KEY=VALUE 형태로 환경별 설정을 저장하는 파일
- python-dotenv: .env 파일을 파싱해 os.environ에 값을 넣어주는 라이브러리
- 우선순위: 시스템 환경변수 > .env 파일(일반적으로 덮어쓰기 방지 권장)
python-dotenv 설치 및 기본 사용법
다음은 기본 설치와 로드 예제입니다.
pip install python-dotenv
# example.py from dotenv import load_dotenv import os # 프로젝트 루트의 .env 파일을 로드 load_dotenv() DATABASE_URL = os.getenv('DATABASE_URL') SECRET_KEY = os.environ.get('SECRET_KEY') print(DATABASE_URL, SECRET_KEY)
python dotenv 사용법 실무 예제 (Django / Flask)
- Django: settings.py 상단에서 load_dotenv 사용하여 SECRET_KEY, DATABASES 구성
# settings.py from pathlib import Path from dotenv import load_dotenv import os BASE_DIR = Path(__file__).resolve().parent.parent load_dotenv(BASE_DIR / '.env') SECRET_KEY = os.getenv('SECRET_KEY') DEBUG = os.getenv('DEBUG', 'False') == 'True'
- Flask: 앱 초기화 시 config.from_mapping 사용
# app.py from flask import Flask from dotenv import load_dotenv import os load_dotenv() app = Flask(__name__) app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')
언제 쓰면 좋고 언제 피해야 할까
- 언제 쓰면 좋은가:
- 로컬 개발 및 중소 규모 서비스에서 빠르게 환경변수 관리가 필요할 때
- CI/CD 파이프라인에서 간단한 값 주입을 할 때
- 언제 피해야 하는가:
- 대규모 멀티 인스턴스 환경에서 민감정보 중앙관리(예: HashiCorp Vault, AWS Secrets Manager)를 사용해야 할 경우
- .env 파일을 깃에 실수로 커밋할 위험이 있는 팀 환경
비교표: .env vs 비밀관리 서비스 판단 기준
| 구분 | 항목1 | 항목2 | 항목3 |
|---|---|---|---|
| 내용 | 관리 편의성 | 보안 수준 | 운영 확장성 |
| 내용 | 로컬 빠름, 간단함 | 낮음(파일 기반) | 제한적(수동 배포) |
| 내용 | 비밀관리 서비스 | 높음(중앙화) | 높음(권한·로테이션) |
실무 체크리스트
- .env 파일을 .gitignore에 추가했는가?
- 민감정보는 .env가 아닌 비밀관리 서비스로 이전 가능한가 확인했는가?
- 운영 환경에서는 OS 환경변수 또는 CI/CD 시크릿 기능을 사용하고 있는가?
- 로드 우선순위와 덮어쓰기 정책을 문서화했는가?
성능·보안·운영 주의점
- 성능: python-dotenv는 런타임 시작 시 한 번만 로드하면 되므로 런타임 성능 영향은 미미합니다. 그러나 반복적으로 load_dotenv를 호출하면 불필요한 I/O가 발생합니다.
- 보안: .env 파일은 평문이므로 깃 저장소에 절대 커밋하지 말고 권한이 있는 사용자만 접근하도록 파일 시스템 권한을 설정하세요. 민감한 키는 가능한 시크릿 매니저로 이전합니다.
- 운영: CI/CD에 환경변수를 설정하는 표준 절차를 만들고, 시크릿 로테이션 정책을 수립하세요. 복수 인스턴스에서는 중앙 시크릿 저장소를 권장합니다.
추가 실무 팁: 로드 전략과 우선순위 관리
- load_dotenv(override=False)를 사용하여 시스템 환경변수가 우선되도록 하세요.
- 테스트 환경에서는 테스트 전용 .env.test 파일을 사용하고 load_dotenv(dotenv_path='.env.test', override=True)로 명시적으로 로드하세요.
자주 묻는 질문
Q1: .env 파일을 깃에서 실수로 올렸으면 어떻게 하나요? A1: 즉시 해당 리포지토리의 시크릿(키)을 교체하고, 민감정보가 포함된 커밋은 git filter-repo나 BFG로 제거한 뒤 강제 푸시합니다. 이후 토큰을 재발급하세요.
Q2: python-dotenv는 운영 환경에서 안전한가요? A2: 라이브러리 자체는 단순 로더이므로 안전성은 운영 방법에 달려 있습니다. 운영 환경에서는 OS 환경변수나 전문 시크릿 매니저 사용을 권장합니다.
Q3: load_dotenv를 여러 번 호출해도 되나요? A3: 가능하지만 불필요한 I/O가 발생할 수 있으므로 애플리케이션 시작 시 한 번만 호출하는 것을 권장합니다.
Q4: .env 파일에 주석을 달 수 있나요? A4: 예, # 으로 시작하는 주석을 사용할 수 있습니다. 하지만 민감정보 옆에 주석으로 설명을 달 경우 노출 위험을 고려하세요.
정리
- python dotenv 사용법은 로컬과 소규모 배포에서 빠른 환경변수 관리를 도와줍니다.
- .env는 깃 커밋 금지, 운영에서는 시크릿 매니저 사용 권장.
- load_dotenv를 애플리케이션 시작 시 한 번만 호출하고 우선순위를 명확히 하세요.
- 체크리스트를 통해 배포 전 보안·운영 절차를 점검하세요.