| <rowcolor=#ffffff,#dddddd> 데이터 직렬화 형식과 설정 파일 | |||
| {{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: -5px -1px -11px" | <colbgcolor=#4d5767,#4d5767><colcolor=#ffffff,#dddddd> 데이터 직렬화 형식 | <colbgcolor=#4d5767,#4d5767><colcolor=#ffffff,#dddddd> 텍스트 | CSV · JSON(NDJSON/JSON Lines) · XML |
| 바이너리 | flatbuffers · protobuf | ||
| 설정 파일 | 텍스트 | JSON(YAML · JSON5 · JSONC) · XML · INI(dotenv · EditorConfig · TOML) | }}}}}}}}} |
| {{{#!wiki style="margin: -10px -10px" | <tablealign=center><tablewidth=380><tablebordercolor=white,#1f2023> | TOML | |
| Tom's Obvious Minimal Language | }}} | ||
| <colbgcolor=#fff,#1f2023><colcolor=#181818,#D7D7D7> 최초 개발자 | 톰 프레스턴 워너 | ||
| 분류 | 데이터 양식 | ||
| | |||
1. 개요
Tom's Obvious Minimal Language, TOMLINI의 문법에 영향을 받은 설정 파일 형식의 일종이다. 파일 확장자는
.toml이며, 아주 간단히 작성할 수 있기에 여러 소프트웨어 프로젝트에서 쓰이고 있다. 이름의 "Tom"은 창시자인 톰 프레스턴 워너 를 가리킨다.같은 설정 파일인 YAML보다 훨씬 간단하며, 복잡한 구조를 간단히 표현할 수 있다는 이점이 존재한다. Julia나 Rust를 비롯한 프로그래밍 언어에서 프로젝트 내 패키지 환경을 나타낼 때 자주 사용된다.
2. 구조
2.1. 문법
key = "value"
형식의 간단한 문법을 사용한다. 이를 pair라고 하며, pair만 가지고는 XML, JSON이나 YAML같은 복잡한 구조를 표현할 수 없기에 추가적으로 [section]
을 사용해 간단한 네임스페이스를 만든다. 하지만 이렇게 해도 다른 설정 파일들에서의 하위 분류를 나타낼 수 없기에, TOML에서는 이렇게
[section.lowerSection]
하위 분류들을 점(.)으로 표시한다. Pair를 하위 분류하려면 점(.)을 이런 식으로
key.lowerKey = "value"
코드를 작성하면 된다.TOML에서는 주석을 지원한다. YAML같이 샵(#)을 쓰면 된다. 역시나 이것도 이런 식으로
# 나무위키, 모두가 가꾸어 나가는 지식의 나무. (이 줄은 전부 주석입니다)
Key = "Value" # 나무위키, 모두가 가꾸어 나가는 지식의 나무. (이것은 줄의 끝에 붙은 주석입니다.)
# 나무위키,
# 모두가 가꾸어 나가는
# 지식의 나무.
(여러 줄의 주석입니다)
Key = "# 나무위키, 모두가 가꾸어 나가는 지식의 나무. (이것은 주석이 아닙니다)"
작성을 하면 된다.TOML은 문법이 아주 편하기 때문에, 점(.) 이후의 텍스트를 띄어 놓아도
Key. lowerKey # Key.lowerKey와 동일
Key. lowestKey # Key.lowestKey와 동일
별 문제가 생기지 않는다.TOML에선 키의 종류가 있다. 이들은 일반 키, 쌍따옴표 키와 따옴표 키로 나뉜다.
Key1 = "저는 일반 키입니다. 저는 ASCII 문자들로만 이루어져 있습니다."
"Key2" = "저는 쌍따옴표 키입니다. 꼭 필요한 순간이 아니라면 일반 키를 써 주세요."
'Key3' = "저는 따옴표 키입니다. 쌍따옴표 키처럼 사용해 주세요."
TOML에서도 키의 규칙이 있다.
= "일반 키를 공백으로 뇌두면 안 됩니다." # 유효하지 않습니다
" " = "따옴표나 쌍따옴표 키들은 공백으로 놔둬도 됩니다." # 유효합니다
보이는 바와 같이 TOML에서는 일반 키를 공백으로 놔두면 문서가 유효하지 않게 된다.키를 여러번 반복해서 정의하면 유효하지 않게 된다. 쌍따옴표 키와 일반 키들은 같기 때문에 이들을 반복해서 정의하면(예시: 일반 키를 Key라고 특정 값으로 정의한 다음 쌍따옴표 키를 "Key"로 대응되는 일반 키와 같은 값으로 정의하였을 경우) 둘 다 유효하지 않게 된다.
TOML에서는 쌍따옴표 없이 ASCII 코드에 있는 숫자를 키와 같이 정의할 수 있다.
Key1 = 1212
Key2 = 55352
하지만 이렇게 하면 숫자로 정의된 키를 하위 분류할 수 없다.TOML에서는 NaN, -Inf, Inf(+Inf)도 쓸 수 있다. 이렇게
Key1 = NaN
Key2 = -Inf
Key3 = Inf # +Inf와 동일
Key4 = +Inf # Inf와 동일
사용하면 된다.리터럴도 있다. 2개(true, false)가 있으며, 이렇게
Key1 = true
Key2 = false
이용하면 된다. 역시나 이것도 하위 분류가 불가능하다.
3. 특징
Null이 없다.#30 Null을 나타내고 싶다면 해당 키-값 자체를 비우는 방법이 있다.키나 헤더의 경우 숫자로 시작하거나 숫자로 해석될 수 있더라도 반드시 문자열로 인식된다. 가령
[1234]
5678 = "value"와 같은 경우 1234, 5678은 반드시 문자열로 해석되어 JSON에 대응하면#!syntax json
{
"1234": {
"5678": "value"
}
}
와 비슷하게 인식된다.4. 구현체
- smol-toml - 기존의 toml 라이브러리를 개선하고자 빠른 성능으로 재작성된 TypeScript 라이브러리. 기본적으로 JavaScript 정수 허용 범위 이상의 값은 파싱에 실패하며, 이러한 입력을 파싱할 필요가 있을 경우 BigInt 파싱 옵션을 켜줘야 한다. 날짜 및 시간, 시간 없는 날짜, 날짜 없는 시간, 타임존 고정 날짜 및 시간 등등 각종 경우에 대한 리터럴을 모두 지원하는 TOML 특성상 '날짜 없는 시간' 같은 부분적인 정보를 js 표준 Date만으로는 다루기 어려워
TomlDate를 반환한다.#