YAML 과 JSON 이 계속 실패한 포맷
TOML 은 Tom's Obvious, Minimal Language 의 줄임말이야. GitHub 공동 창립자인 Tom Preston-Werner 가 2013 년에 만들었어. 목표는 셋이었어. 처음 봐도 뜻이 바로 보이고, 문법은 최소고, 파싱에 헷갈릴 구석이 없는 config 파일 포맷. 지금 spec 은 TOML 1.0.0 (2021) 이고.
YAML 과 JSON 이 못 한 거 TOML 이 잘하는 거
- 들여쓰기 규칙이 없어 — key 도 table 도 공백에 안 기대. 섹션을 파일 이곳저곳으로 복붙해도 안 깨져.
- 값 하나를 적는 방법이 하나야 — 문자열은 따옴표로, 숫자는 그냥, boolean 은
true/false. Norway 문제 같은 게 생길 자리가 없어. - 날짜와 시간이 진짜 타입이야 — RFC 3339 datetime 이 문자열이 아니라 값 그 자체로 들어가.
- 주석 — YAML 에서
#가 먹히는 자리면 여기서도 다 먹혀. - 장황하지만 분명한 table 문법 — 네 단계 넘게 깊어지면
[server.database]쪽이 중첩된 YAML 보다 나아.
TOML 이 조용히 점령한 곳
- Rust — 생태계의 모든
Cargo.toml이 TOML 이야. - Python —
pyproject.toml(PEP 518/621) 이 요즘 패키징에서setup.py와setup.cfg,requirements.txt를 다 대신해. - Hugo —
config.toml또는hugo.toml한 장이 정적 사이트 생성기를 굴려. - Poetry, ruff, black, hatch — Python 도구들이 하나같이
pyproject.toml의[tool.*]table 에서 설정을 읽어. - Vector, Tilt, GoReleaser — 사람이 읽기 좋으라고 TOML 을 고른 운영 도구들이야.
원칙: config 를 기계보다 사람이 더 자주 읽는다면 TOML 이 이겨. 깊은 중첩을 도저히 못 피하는 자리에서는 YAML 이 이기고. 네트워크로 오갈 땐 JSON 이 이겨. 전통이 아니라 읽을 사람을 보고 골라.