핵심

  • 기존 Dict/YAML 기반 설정 관리의 타입 불안정성과 들여쓰기 민감성 문제 해결
  • TOML(직관적 계층 구분) + Pydantic(강력한 데이터 검증) 조합
  • Pydantic은 규격에 맞지 않는 데이터의 유입을 실행 전에 차단하는 문지기 역할

1. 개요

기본 방식의 한계

Dict 문제: 잘못된 타입이 들어가도 경고 없이 실행 → 런타임 에러 발생

YAML 문제: 들여쓰기 하나만 틀려도 파일이 깨짐, 파싱 모호성 존재

현대적 해결책

  • Pydantic: “Fail Fast” 철학으로 데이터 유입 즉시 타입 검증
  • TOML: []로 계층을 직관적으로 구분, 파이썬 공식 설정 표준(pyproject.toml)

2. Pydantic 기본 개념

주요 특징

  • BaseModel: 검증 규칙의 뼈대(클래스) 선언
  • Field: 변수에 조건(최소/최대값 등) 부여
  • 타입 힌팅(: int, : str)을 그대로 활용
  • IDE 자동완성 완벽 지원

활용 예제

from pydantic import BaseModel, Field
from typing import Literal
 
# 배달앱 회원가입
class UserProfile(BaseModel):
    nickname: str = Field(min_length=2, max_length=10)
    age: int = Field(ge=19)
    membership: Literal["VIP", "NORMAL"] = Field(default="NORMAL")
 
# 딥러닝 하이퍼파라미터
class DeepLearningConfig(BaseModel):
    epochs: int = Field(default=100, ge=1)
    batch_size: int = Field(default=32, ge=1, le=512)
    learning_rate: float = Field(default=0.001, gt=0.0, le=1.0)
    optimizer: Literal["adam", "sgd", "rmsprop"] = Field(default="adam")

3. TOML 사용법

표기법 주의

  • 문자열: 반드시 쌍따옴표("") 사용
  • 논리값: 소문자 true, false
# config.toml
[base_config]
band_width = 10
attr_cols = ["층구분", "용도"]
rent_eval_col = "rent_price"
 
[model_config]
convert_rate = 0.07
is_recent = true
import tomllib
 
with open("config.toml", "rb") as f:
    data = tomllib.load(f)

4. 실무 활용법

계층적 조립 (Composition)

class SmootherConfig(BaseModel):
    base_config: BaseConfig
    model_config: ModelConfig
 
# config.base_config.band_width 형태로 접근

딕셔너리 변환

config_obj = SmootherConfig(**toml_data)
old_function(config=config_obj.model_dump())  # 레거시 코드와 호환

Reference