앱의 YAML, 위에 env var
요즘 service 는 config 를 층으로 쌓아. YAML 파일이 기본값을 들고, 환경 변수가 배포마다 그 위를 덮고, 실행 인자가 호출마다 또 그 위를 덮어. 방식은 이래. YAML 을 타입이 잡힌 config 객체로 파싱한 다음, env var 가 이름을 보고 그 필드를 갈아끼우게 두는 거야.
Pydantic Settings (Python)
Pydantic V2 는 pydantic_settings 를 따로 내놨어. BaseSettings 를 상속한 클래스를 하나 만들고 거기에 YAML 파일을 물려주면 (직접 만든 source 를 끼워서), env var 가 알아서 필드를 덮어써. 타입이 안 맞으면 파싱하는 그 자리에서 에러가 나니까, 오타가 배포까지 안 따라가.
'설정당 한 타입' 원칙
타입을 미리 못 박아둬. port: int = 8000, log_level: Literal["debug","info","warn","error"] = "info" 이렇게. 그러면 안 맞는 값은 파서가 걷어내. JSON Schema 랑 발상이 같아. 다만 그 일을 언어의 타입 시스템이 대신 해주는 거지.
원칙: YAML 을 그냥 dict 로 읽어놓고 문자열 키로 파고드는 짓 (
config["server"]["port"]) 은 하지 마. 키를 잘못 썼든, 키가 빠졌든, 타입이 어긋났든 전부 실행 중에 아무 말 없이 터져. 타입이 잡힌 config 객체를 두면 그 셋이 전부 파싱 시점의 에러로 바뀌어.