config.yaml Single Source of Truth
config.yaml Single Source of Truth
한 줄 정의
경로, 포트, 하이퍼파라미터를 코드에 하드코딩하지 않고 config.yaml 단일 파일에서 관리.
패턴
# ✅ config 경유
def load_config(path: str = "config.yaml") -> dict:
with open(path) as f:
return yaml.safe_load(f)
cfg = load_config()
model_path = cfg["model"]["checkpoint_dir"]
base_url = cfg["api"]["base_url"]
# ❌ 하드코딩
model_path = "./checkpoints/v3"
base_url = "http://localhost:11434"
모듈 구조 통일:
load_config() → 핵심 로직 → @click.command() CLI wrapper → main()
모든 모듈이 동일 구조 → 어느 모듈이든 독립 실행 + 통합 실행 가능.
체크포인트 보호 규칙 (ML 특화)
- 기존 weights 수정 금지 → 항상
v{n+1}로 증분 생성 - 롤백: 서버 포인터(
latest.json등)만 이전 버전으로 변경 - 이유: 실험 재현성 보장 + 실수로 인한 모델 손실 방지
적용 맥락
여러 모듈이 공통 설정을 참조하는 모든 프로젝트. 특히 ML 실험처럼 하이퍼파라미터가 자주 바뀌거나 환경(dev/prod)별 설정이 다른 경우.