config.yaml Single Source of Truth

concept updated 2026-04-13

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)별 설정이 다른 경우.

Relationships

related_to 철학은 규칙이 아니다 — 원칙(하드코딩 금지)이 규칙(config.yaml 경유)으로 구체화된 사례