TOML 설정 (.toml)
TOML 표준Tom’s Obvious Minimal Language(TOML)는 사람이 읽고 쓰기 쉽고 해석이 명확한 구성 파일 형식입니다. GitHub 공동 창립자 Tom Preston-Werner가 만들었으며 Rust(Cargo), Python(pyproject.toml) 등 현대 프로그래밍 생태계 전반에서 널리 사용됩니다.
TOML을(를) JSON(으)로 변환
무료 브라우저 내 TOML에서 JSON로 변환하는 도구입니다. 기기에서 파일을 즉시 변환할 수 있습니다.
검사 및 메타데이터
운영 체제와 파일 분석기는 파일 선두의 바이너리 바이트 시퀀스를 검사하여 TOML 파일을 식별합니다:
바이트 단위 헤더 시그니처 (매직 바이트)
운영 체제와 파일 분석기는 파일 선두의 바이너리 바이트 시퀀스를 검사하여 TOML 파일을 식별합니다:
16진수 시그니처 (오프셋 0):
5B ... 5DASCII 표현: [...]
표준화: TOML v1.0.0 Specification
기술 사양
| 컨테이너 아키텍처 | [table]과 key=value 쌍으로 구성되며 해시 테이블에 명확하게 대응하는 사람이 읽기 쉬운 구성 파일 |
| 압축 | 압축하지 않은 텍스트 스트림 |
| 바이트 엔디안 | UTF-8 텍스트 스트림 |
| 색 공간 | 해당 없음(구성 파일) |
| 채널 및 구조 | 테이블, 테이블 배열, 인라인 테이블, 문자열, 정수, 부동 소수점 수, 부울 값 및 RFC 3339 날짜/시간 |
| 최대 크기 | 텍스트 길이 제한 없음 |
| 투명도 | 없음 |
| 스트리밍 및 프로그레시브 | 한 줄씩 순차적으로 구성 구문을 분석 |
기술 비교 매트릭스: TOML 대 경쟁사
| 기술적 속성 | TOML (현재) | YAML | JSON | INI |
|---|---|---|---|---|
| 모호성 위험 | 없음 (엄격하게 모호하지 않은 사양) | 높음(YAML의 “Norway problem” 부울 값 오류) | 없음 (엄격한 데이터 형식) | 보통 (공식 표준 없음) |
| 네이티브 날짜/시간 형식 | RFC 3339 날짜 및 시간 기본 지원 | 암시적 문자열 / 날짜 구문 분석 | 없음 (문자열만 지원) | 없음 (문자열만 지원) |
| 주석 지원 | 네이티브 (# 주석) | 네이티브 (# 주석) | 주석 허용 안 함 | 네이티브 (; 및 # 주석) |
| 기본 생태계 | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, CI/CD 파이프라인 | 웹 API 및 브라우저 통신 | 구형 Windows 및 Git 구성 |
일반적인 손상 모드 및 헥스 복구 가이드
구문 분석기 오류: 'Duplicate key in table' 또는 'Invalid table header'.
근본 원인: 문서 내에서 기존 키 또는 테이블 네임스페이스를 다시 정의하려고 시도했습니다.
복구: File2File.app TOML Formatter로 TOML 구문을 검증하고 다시 포맷하십시오.
보안 분석 및 파서 공격 벡터
TOML 파서는 프로토타입 오염과 비정상적으로 중첩된 테이블 배열로 인한 CPU 고갈을 방지해야 합니다.
알려진 공격 벡터
- JavaScript TOML 파서가 Object.prototype에 속성을 삽입하는 프로토타입 오염
- 깊게 중첩된 테이블 배열 선언으로 인한 서비스 거부(DoS)
- 대규모 인라인 배열을 파싱할 때 발생하는 무제한 메모리 할당
방어적 모범 사례: 테이블 중첩 깊이를 확인하고 프로토타입 오염에 안전한 사전 객체를 사용하십시오.
역사적 배경 및 주요 이력
주요 장점
- 형식 강제 과정에서 예상치 못한 변환이 없고, 해시 테이블에 명확하고 일관되게 대응합니다.
- 문자열로 이스케이프할 필요 없이 RFC 3339 타임스탬프, 날짜 및 시간을 기본 데이터 형식으로 지원합니다.
- 현대적인 언어 도구의 공식 표준 설정 형식으로 채택됨 (Rust Cargo.toml, Python pyproject.toml).
기술적 제한 사항 및 단점
- 깊이 중첩된 객체 트리는 YAML보다 구문이 길어질 수 있습니다.
- 테이블 배열 구문([[table.array]])은 초보자에게 직관적이지 않을 수 있습니다.
- 처리량이 많은 머신 간 API 데이터 교환의 경우 JSON보다 간결하지 않습니다.
흥미로운 기술적 상식
- TOML은 GitHub을 공동 창립하고 Gravatar 및 SemVer(유의적 버저닝)를 만든 Tom Preston-Werner가 만들었습니다.
- Cargo 패키지는 메타데이터, 종속성, 대상을 선언할 때 Cargo.toml을 사용합니다. 다른 빌드 시스템을 쓰는 Rust 프로젝트는 다른 파일을 사용할 수 있습니다.
- 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로 즉시 변환할 수 있습니다.