# TOML 빠른 참조

*테이블, 문자열, 숫자, 날짜, 배열*

> Source: TOML Specification (toml.io) · MIT

## 구문

### 기본 규칙

| Command | Description |
|---------|-------------|
| `key = value` | 키-값 쌍 (한 줄에 하나) |
| `#` | 주석 (줄 끝까지) |
| `Case sensitive` | 키와 값은 대소문자 구분 |
| `UTF-8` | 파일은 유효한 UTF-8이어야 함 |
| `No null` | TOML에는 null 타입 없음 |

### 최소 예제

```
title = "My App"
debug = true
port = 8080
```

## 문자열

### 문자열 타입

| Command | Description |
|---------|-------------|
| `"basic"` | 기본 문자열 (이스케이프 지원) |
| `'literal'` | 리터럴 문자열 (이스케이프 없음) |
| `"""multi"""` | 여러 줄 기본 문자열 |
| `'''multi'''` | 여러 줄 리터럴 문자열 |

### 예제

```
basic = "Hello\nWorld"
literal = 'C:\Users\path'
multi = """
Line one
Line two"""
```

### 이스케이프 시퀀스

| Command | Description |
|---------|-------------|
| `\n  \t  \r` | 개행, 탭, 캐리지 리턴 |
| `\\` | 백슬래시 |
| `\uXXXX` | 유니코드 (4자리 16진수) |
| `\UXXXXXXXX` | 유니코드 (8자리 16진수) |

## 숫자 및 불리언

### 숫자 타입

| Command | Description |
|---------|-------------|
| `42` | 정수 |
| `1_000_000` | 밑줄 구분 정수 |
| `0xff / 0o77 / 0b11` | 16진수, 8진수, 2진수 |
| `3.14` | 부동소수점 |
| `5e+22 / 1e-2` | 지수 표기법 |
| `inf / nan` | 특수 부동소수점 값 |
| `true / false` | 불리언 (소문자만) |

### 예제

```
count = 42
price = 19.99
hex_color = 0xFF5733
enabled = true
```

## 날짜

### 날짜 및 시간 타입

| Command | Description |
|---------|-------------|
| `2026-03-26T10:30:00Z` | 오프셋 날짜-시간 (UTC) |
| `2026-03-26T10:30:00-05:00` | 오프셋 날짜-시간 (EST) |
| `2026-03-26T10:30:00` | 로컬 날짜-시간 (시간대 없음) |
| `2026-03-26` | 로컬 날짜 |
| `10:30:00` | 로컬 시간 |

### 예제

```
created = 2026-03-26T10:30:00Z
birthday = 1990-05-15
alarm = 07:00:00
```

## 테이블

### 테이블 구문

```
[server]
host = "localhost"
port = 8080

[server.ssl]
enabled = true
cert = "/path/to/cert.pem"
```

### 테이블 배열

```
[[users]]
name = "Alice"
role = "admin"

[[users]]
name = "Bob"
role = "user"
```

### 규칙

| Command | Description |
|---------|-------------|
| `[name]` | 표준 테이블 헤더 |
| `[a.b.c]` | 점 표기법 — 중첩 테이블 |
| `[[name]]` | 테이블 배열 |
| `No redefine` | 같은 테이블을 두 번 정의 불가 |

## 배열

### 배열 구문

```
colors = ["red", "green", "blue"]
numbers = [1, 2, 3]
```

### 여러 줄 배열

```
hosts = [
  "alpha.example.com",
  "beta.example.com",
]
```

*TOML 배열에서 후행 쉼표 허용*

### 규칙

| Command | Description |
|---------|-------------|
| `Same type` | 모든 요소는 같은 타입이어야 함 |
| `Trailing comma` | 마지막 요소 다음에 허용 |
| `Newlines` | 배열은 여러 줄에 걸칠 수 있음 |

## 인라인 테이블

### 인라인 테이블 구문

```
point = { x = 1, y = 2 }
user = { name = "Alice", admin = true }
```

### 규칙

| Command | Description |
|---------|-------------|
| `Single line` | 한 줄에 작성해야 함 |
| `No trailing comma` | 후행 쉼표 불가 |
| `No newlines` | 여러 줄에 걸칠 수 없음 |
| `No adding keys` | 나중에 인라인 테이블에 키 추가 불가 |

### 인라인 vs 표준

```
# Inline — compact, one-liners
db = { host = "localhost", port = 5432 }
# Standard — readable, extendable
[db]
host = "localhost"
port = 5432
```

## 자주 쓰는 패턴

### pyproject.toml

```
[project]
name = "myapp"
version = "1.0.0"
dependencies = ["flask>=3.0"]
```

### Cargo.toml

```
[package]
name = "myapp"
version = "0.1.0"
edition = "2021"
```

### 팁

| Command | Description |
|---------|-------------|
| `taplo` | TOML 툴킷 — 포매터와 린터 |
| `No null` | null 설정 대신 키 생략 |
| `No anchors` | YAML과 달리 참조/별칭 시스템 없음 |
| `Strict` | 중복 키 없음, 혼합 타입 배열 없음 |
