백엔드 기초집: Python FastAPILESSON 12
설정 파일과 환경 변수 관리
난이도초급
예상 시간35분
선수지식이전 강의
12강. 설정 파일과 환경 변수 관리
1. 이번 강의에서 해결할 문제
DB 주소와 JWT 비밀키를 소스 코드에 넣으면 저장소에 노출되고 환경마다 수정해야 합니다. 실행 환경에서 값을 공급하도록 바꿉니다.
2. 학습 목표
3. 핵심 개념
환경 변수는 코드와 설정을 분리합니다. python-dotenv의 load_dotenv()는 개발 편의를 위해 .env를 환경 변수로 읽으며 기본적으로 이미 존재하는 OS 값을 덮어쓰지 않습니다. 운영에서는 배포 환경이 직접 변수를 제공하고 .env 파일에 의존하지 않는 구성이 좋습니다.
4. 단계별 코드 예시
파일 경로: game-ranking-api/.env.example
.env.example
APP_ENV=development
DATABASE_URL=sqlite:///./game_ranking.db
JWT_SECRET=replace-with-a-random-secret
ACCESS_TOKEN_EXPIRE_MINUTES=30
FRONTEND_ORIGINS=http://localhost:5173
파일 경로: game-ranking-api/.env
.env
APP_ENV=development
DATABASE_URL=sqlite:///./game_ranking.db
JWT_SECRET=local-only-secret-change-me
ACCESS_TOKEN_EXPIRE_MINUTES=30
FRONTEND_ORIGINS=http://localhost:5173
파일 경로: game-ranking-api/app/config.py
app/config.py
import os
from dataclasses import dataclass
from dotenv import load_dotenv
load_dotenv()
@dataclass(frozen=True)
class Settings:
app_env: str = os.getenv("APP_ENV", "development")
database_url: str = os.getenv("DATABASE_URL", "sqlite:///./game_ranking.db")
jwt_secret: str = os.environ["JWT_SECRET"]
access_token_expire_minutes: int = int(os.getenv("ACCESS_TOKEN_EXPIRE_MINUTES", "30"))
frontend_origins: tuple[str, ...] = tuple(
origin.strip() for origin in os.getenv("FRONTEND_ORIGINS", "").split(",") if origin.strip()
)
settings = Settings()
실행 위치: game-ranking-api/
Copy-Item .env.example .env
$env:JWT_SECRET = 'temporary-shell-secret'
python -c "from app.config import settings; print(settings.app_env, settings.database_url)"
Remove-Item Env:JWT_SECRET
5. 코드가 동작하는 이유
load_dotenv가 .env 값을 os.environ에 추가하고 실제 OS 변수는 우선 유지됩니다. 필수인 JWT_SECRET은 os.environ[...]로 읽어 누락 시 즉시 실패하고, 공개 가능한 예시 파일에는 실제 비밀 대신 설명용 값을 둡니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2설정 파일과 환경 변수 관리 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
12강. 설정 파일과 환경 변수 관리 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.