TOML 설정 (.toml)
TOML 표준TOML(Tom's Obvious Minimal Language)은 GitHub의 공동 창립자 Tom Preston-Werner가 만든 명확하고 인간 중심적인 설정 형식으로, Rust(Cargo) 및 Python(pyproject.toml)을 포함한 현대 프로그래밍 생태계 전반에서 널리 채택되고 있습니다.
TOML을(를) JSON(으)로 변환
무료 브라우저 내 TOML-JSON 변환기. 기기에서 파일을 즉시 변환하세요.
검사 및 메타데이터
운영 체제와 파일 분석기는 파일 선두의 바이너리 바이트 시퀀스를 검사하여 TOML 파일을 식별합니다:
바이트 단위 헤더 시그니처 (매직 바이트)
운영 체제와 파일 분석기는 파일 선두의 바이너리 바이트 시퀀스를 검사하여 TOML 파일을 식별합니다:
16진수 시그니처 (오프셋 0):
5B ... 5DASCII 표현: [...]
표준화: TOML v1.0.0 Specification
기술 사양
| 컨테이너 아키텍처 | Human-readable configuration file mapping unequivocally to a hash table, structured with [tables] and key = value pairs |
| 압축 | Uncompressed text stream |
| 바이트 엔디안 | UTF-8 text stream |
| 색 공간 | N/A (Configuration File) |
| 채널 및 구조 | Tables, arrays of tables, inline tables, strings, integers, floats, booleans, and RFC 3339 datetimes |
| 최대 크기 | Unbounded text length |
| 투명도 | None |
| 스트리밍 및 프로그레시브 | Sequential line-by-line configuration parsing |
기술 비교 매트릭스: TOML 대 경쟁사
| 기술적 속성 | TOML (현재) | YAML | JSON | INI |
|---|---|---|---|---|
| 모호성 위험 | 없음 (엄격하게 명확한 사양) | 높음 (YAML '노르웨이 문제' 부울 버그) | 없음 (엄격한 데이터 형식) | 보통 (공식 표준 없음) |
| 네이티브 날짜/시간 형식 | 네이티브 RFC 3339 날짜 및 시간 지원 | 암시적 문자열 / 날짜 구문 분석 | 없음 (문자열만 지원) | 없음 (문자열만 지원) |
| 주석 지원 | 네이티브 (# 주석) | 네이티브 (# 주석) | 주석 허용 안 함 | 네이티브 (; 및 # 주석) |
| 기본 생태계 | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, CI/CD 파이프라인 | 웹 API, 브라우저 통신 | 레거시 Windows, Git 설정 |
일반적인 손상 모드 및 헥스 복구 가이드
구문 분석기 오류: 'Duplicate key in table' 또는 'Invalid table header'.
근본 원인: 문서 내에서 기존 키 또는 테이블 네임스페이스를 다시 정의하려고 시도했습니다.
복구: File2File TOML 포맷터를 사용하여 TOML 구문을 검증하고 다시 형식화하세요.
보안 분석 및 파서 공격 벡터
TOML 구문 분석기는 프로토타입 오염 및 비정상적인 테이블 배열 중첩으로 인한 CPU 고갈을 방지해야 합니다.
알려진 공격 벡터
- JavaScript TOML 구문 분석기의 프로토타입 오염으로 Object.prototype에 속성 주입.
- 깊게 중첩된 테이블 배열 선언을 통한 서비스 거부(DoS).
- 대규모 인라인 배열 구문 분석 중 제한 없는 메모리 할당.
방어적 모범 사례:
역사적 배경 및 주요 이력
주요 장점
- 완벽한 명확성: 놀라운 형식 강제 없이 해시 테이블에 깔끔하고 예측 가능하게 매핑됩니다.
- 문자열 이스케이프가 필요 없는 일급(First-class) 네이티브 날짜/시간 지원(RFC 3339 타임스탬프, 날짜, 시간).
- 현대적인 언어 도구의 공식 표준 설정 형식으로 채택됨 (Rust Cargo.toml, Python pyproject.toml).
기술적 제한 사항 및 단점
- 깊게 중첩된 다중 수준 객체 트리는 YAML에 비해 장황해질 수 있습니다.
- 테이블 배열 구문([[table.array]])은 초보자에게 직관적이지 않을 수 있습니다.
- 처리량이 많은 머신 간 API 데이터 교환의 경우 JSON보다 간결하지 않습니다.
흥미로운 기술적 상식
- TOML은 GitHub을 공동 창립하고 Gravatar 및 SemVer(유의적 버저닝)를 만든 Tom Preston-Werner가 만들었습니다.
- 모든 Rust 프로젝트의 'Cargo.toml' 파일은 TOML 형식으로 모든 패키지 종속성과 컴파일러 플래그를 지정합니다.
- JSON과 달리 TOML은 주석('#' 문자 사용)과 여러 줄 문자열을 기본적으로 지원합니다.
자주 묻는 기술 질문
TOML은 어디에 사용되나요?
TOML은 소프트웨어 설정에 사용되며, 특히 Rust의 Cargo.toml, Python의 pyproject.toml, Go Hugo 설정 및 컨테이너 도구에서 두드러지게 사용됩니다.
설정 파일로 YAML보다 TOML이 선호되는 이유는 무엇인가요?
TOML은 따옴표가 없는 'NO'가 부울 거짓(false)으로 바뀌는 등의 악명 높은 YAML의 엣지 케이스 파싱 버그를 방지하면서도, 주석과 명확한 테이블을 통해 사람이 읽기 편하게 유지됩니다.
TOML을 JSON이나 YAML로 어떻게 변환할 수 있나요?
웹 브라우저에서 직접 File2File.app을 사용하여 TOML 파일을 JSON 또는 YAML로 즉시 변환할 수 있습니다.