핵심
- 기존 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 = trueimport 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