TOML 파서
TOML(Tom's Obvious Minimal Language)은 읽고 쓰기 쉽게 설계된 최소한의 설정 파일 형식입니다. Rust(Cargo.toml), Python 패키징(pyproject.toml) 및 기타 많은 최신 개발 도구의 표준 설정 형식입니다.
사양
주요 사용 사례
- Cargo.toml을 파싱하여 Rust 프로젝트 의존성 및 메타데이터 확인
- pyproject.toml을 읽어 Python 빌드 설정 확인(PEP 518/621)
- Hugo, Zola 또는 기타 정적 사이트 생성기 설정 처리
- Deno 설정 파일(deno.toml) 편집
- 배포 전 설정 검증
기능
- TOML v1.0.0 사양 완전 지원
- 테이블, 테이블 배열 및 중첩 구조 파싱
- 인라인 테이블과 배열 처리
- 날짜/시간 값 지원
- JSON, YAML 또는 XML로 변환
- 오류 메시지가 포함된 구문 검증
예제
Rust Cargo.toml
사용해 보기 →패키지 메타데이터와 의존성을 정의하는 Cargo 매니페스트.
[package]
name = "my-project"
version = "0.1.0"
edition = "2021"
[dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1", features = ["full"] }Python pyproject.toml
사용해 보기 →빌드 시스템과 메타데이터가 포함된 Python 프로젝트 설정.
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "my-package"
version = "1.0.0"
dependencies = ["requests>=2.28"]팁
- TOML은 키-값 쌍에 =를 사용하며, YAML의 콜론과 다릅니다.
- 문자열은 따옴표로 감싸야 합니다. 여러 줄 문자열에는 """을 사용하세요.
- 테이블([table])은 중첩 구조를 만듭니다.
- 테이블 배열은 [[array]] 구문을 사용합니다.
이해하기 TOML 파서
TOML(Tom's Obvious Minimal Language)은 모호하지 않고 읽기 쉽게 설계된 설정 파일 형식입니다. Tom Preston-Werner(GitHub 공동 창립자)가 만들었으며, TOML은 해시 테이블에 깔끔하게 매핑됩니다. 의도적으로 YAML보다 단순하면서 INI 파일보다 표현력이 풍부합니다. 1.0.0 버전은 2021년에 확정되었습니다.
TOML의 설계는 명확성에 중점을 둡니다. 키와 값은 간단한 "key = value" 구문을 사용합니다. 테이블(섹션)은 [대괄호]로 표시되어 들여쓰기 민감성 없이 중첩 구조를 만듭니다. 테이블 배열은 [[이중 대괄호]]를 사용하여 반복되는 섹션을 정의합니다. TOML은 문자열, 정수, 부동소수점, 불리언, 날짜, 시간, 날짜시간을 일급 타입으로 네이티브 지원하여 JSON과 YAML에서 흔한 파싱 모호성을 제거합니다.
Rust 생태계는 Cargo.toml을 패키지 매니페스트 형식으로 일찍 TOML을 채택했습니다. Python은 pyproject.toml(PEP 518 및 PEP 621)로 뒤를 이어 setup.py와 setup.cfg의 현대적 대체제가 되었습니다. TOML은 Go 도구, Deno(deno.toml), Hugo 및 명시적이고 읽기 쉬운 설정을 중시하는 많은 다른 개발자 도구에서도 사용됩니다.
TOML은 유연성을 예측 가능성과 교환합니다. YAML과 달리 각 데이터 구조를 표현하는 방법은 하나뿐입니다. 앵커, 별칭, 암묵적 타입 강제 변환, 의미 있는 공백이 없습니다. 단점은 깊이 중첩된 구조가 장황해진다는 것입니다. 각 레벨에 자체 테이블 헤더가 필요하기 때문입니다.
TOML은 사람이 자주 편집하는 플랫하거나 적당히 중첩된 설정 파일에 뛰어납니다. 모호하지 않은 구문은 불리언 강제 변환 및 들여쓰기 오류 같은 YAML의 함정을 피하면서 설정 목적에서 JSON보다 더 읽기 쉽습니다. TOML은 프로젝트 매니페스트(Cargo.toml, pyproject.toml)와 도구 설정의 자연스러운 선택입니다. YAML은 Kubernetes 매니페스트 같은 깊이 중첩된 구조에 더 적합하며, JSON은 시스템 간 데이터 교환의 표준입니다.
[[이중 대괄호]] 구문은 테이블 배열을 생성하며, 헤더가 나타날 때마다 배열에 새 요소를 추가합니다. 예를 들어 [[products]]가 세 번 나타나면 각각 순서대로 수집된 키-값 쌍을 가진 세 개의 제품 객체 배열이 생성됩니다. TOML은 해시 기호(#)를 사용한 한 줄 주석도 지원하며, 독립된 줄이나 값 뒤에 올 수 있습니다. 여러 줄 주석 구문은 없지만, 한 줄 주석만으로도 주석 지원이 전혀 없는 JSON에 비해 큰 장점입니다.
테이블과 인라인 테이블은 다른 목적으로 사용됩니다. 테이블은 [header] 구문을 사용하고 여러 줄에 걸쳐 키가 많은 섹션의 가독성을 높입니다. 인라인 테이블은 한 줄에 중괄호를 사용하며(key = { a = 1, b = 2 }) 해당 줄에서 완전히 정의되어야 합니다 — 정의 후 확장할 수 없습니다. 경험 법칙으로, 섹션에 두세 개 이상의 키가 있을 때는 가독성을 위해 표준 테이블을 사용하세요.