liminfo

TOML Reference

TOML 문법 레퍼런스

25개 결과

TOML Reference 소개

TOML 레퍼런스는 명확한 의미론 덕분에 읽기 쉽도록 설계된 설정 파일 형식인 TOML(Tom's Obvious, Minimal Language)의 검색 가능한 치트 시트입니다. 기본 키-값 쌍(bare 키와 quoted 키), 중첩 구조를 위한 점 표기법 키, 주석, 이스케이프 시퀀스를 지원하는 기본 문자열과 지원하지 않는 리터럴 문자열의 차이를 포함한 전체 TOML 사양을 다룹니다.

이 레퍼런스는 기본문법, 문자열, 숫자, 테이블, 배열, 날짜시간의 6개 카테고리에 걸쳐 30개 이상의 항목을 체계적으로 정리합니다. 문자열 섹션은 기본(""), 리터럴(''), 멀티라인 기본(""""""), 멀티라인 리터럴('''''')의 네 가지 문자열 타입과 각각의 이스케이프 처리 방식을 상세히 설명합니다. 숫자 섹션은 언더스코어 구분자와 16진수/8진수/2진수 표현을 가진 정수, inf와 nan을 포함한 IEEE 754 부동소수점, 불리언 값을 다룹니다.

구조화된 데이터 섹션에서는 [대괄호]로 정의하는 테이블, [a.b.c] 같은 점 표기법을 사용한 중첩 테이블, 한 줄로 간결하게 표현하는 인라인 테이블, 멀티라인과 혼합 타입을 포함한 배열, 반복되는 구조화된 항목을 정의하는 강력한 [[테이블 배열]] 구문을 다룹니다. 날짜시간 타입에는 타임존이 포함된 오프셋 날짜시간(RFC 3339), 로컬 날짜시간, 로컬 날짜, 로컬 시간이 있습니다. 실용적인 Cargo.toml 예제로 Rust 프로젝트 설정에서의 실제 TOML 활용법을 보여줍니다.

주요 기능

  • 키-값 구문: bare 키, 특수 문자를 위한 quoted 키, 중첩 구조를 위한 점 표기법 키
  • 네 가지 문자열 타입: 이스케이프 지원 기본 문자열, 이스케이프 없는 리터럴, 멀티라인 기본, 멀티라인 리터럴
  • 숫자 형식: 언더스코어 구분자 정수, 16진수(0x), 8진수(0o), 2진수(0b), IEEE 754 부동소수점
  • 테이블 정의: 표준 [table], 중첩 [a.b.c] 표기법, 컴팩트한 인라인 테이블 { key = value }
  • 배열 구문: 단일행 배열, 후행 쉼표가 가능한 멀티라인 배열, 혼합 타입 배열
  • 서버 설정 같은 구조화된 객체 리스트를 정의하는 테이블 배열 ([[array]])
  • 날짜시간 타입: RFC 3339 오프셋 날짜시간, 로컬 날짜시간, 로컬 날짜, 밀리초 포함 로컬 시간
  • 의존성과 기능을 포함한 Rust 패키지 설정을 보여주는 실제 Cargo.toml 예제

자주 묻는 질문

TOML에서 기본 문자열과 리터럴 문자열의 차이점은 무엇인가요?

기본 문자열은 큰따옴표("")를 사용하며 \n(개행), \t(탭), \\(백슬래시) 같은 이스케이프 시퀀스를 지원합니다. 리터럴 문자열은 작은따옴표('')를 사용하며 모든 것을 문자 그대로 처리합니다 -- 이스케이프 시퀀스가 처리되지 않습니다. 따라서 정규식 패턴이나 백슬래시를 이스케이프 문자로 해석하면 안 되는 Windows 파일 경로에 리터럴 문자열이 이상적입니다.

테이블과 중첩 테이블은 어떻게 작동하나요?

테이블은 [table_name]으로 정의되며 다음 테이블 헤더까지 키-값 쌍을 포함합니다. 중첩 테이블은 점 표기법을 사용합니다: [server.production]은 "server" 안에 "production" 테이블을 생성합니다. 이는 server.production.host = "value"로 키를 작성하는 것과 동일합니다. point = { x = 1, y = 2 } 같은 인라인 테이블은 작은 테이블을 위한 컴팩트한 한 줄 대안을 제공합니다.

[[테이블 배열]] 구문이란 무엇인가요?

이중 대괄호 [[name]]은 테이블 배열을 정의하며, 헤더가 나타날 때마다 새로운 테이블 요소를 생성합니다. 각 [[fruits]] 블록은 fruits 배열에 새 항목을 추가합니다. 이것은 JSON의 객체 배열에 해당하는 TOML 방식입니다. 서버 항목, 의존성, 규칙 등 여러 유사한 설정을 정의할 때 일반적으로 사용됩니다.

TOML은 어떤 숫자 형식을 지원하나요?

TOML은 가독성을 위한 선택적 언더스코어 구분자가 있는 정수(1_000_000), 16진수(0xDEADBEEF), 8진수(0o755), 2진수(0b11010110) 표현을 지원합니다. 부동소수점은 IEEE 754를 따르며 과학적 표기법(5e+22), 특수 값 inf와 nan, 언더스코어 구분자(1_000.5)를 지원합니다. 불리언은 소문자 true와 false입니다.

TOML에서 날짜와 시간은 어떻게 표현하나요?

TOML에는 네 가지 날짜시간 타입이 있습니다: 타임존이 포함된 오프셋 날짜시간(1979-05-27T07:32:00Z 또는 +09:00), 타임존 없는 로컬 날짜시간(1979-05-27T07:32:00), 날짜만(1979-05-27), 시간만(07:32:00 또는 소수점 초를 포함한 07:32:00.999). 날짜와 시간 사이의 T 구분자는 선택적으로 공백으로 대체할 수 있습니다.

점 표기법 키란 무엇이고 언제 사용해야 하나요?

physical.color = "orange" 같은 점 표기법 키는 중첩 테이블 구조의 약칭입니다. [physical] 테이블을 정의하고 그 안에 color = "orange"를 넣는 것과 동일합니다. 중첩 구조에서 한두 개의 값만 설정할 때 점 표기법 키를 사용하세요. 여러 값이 있을 때는 전체 [table] 섹션이 더 읽기 쉽습니다. bare 키는 영숫자, 하이픈, 언더스코어를 허용하며, 그 외에는 quoted 키를 사용하세요.

Rust 프로젝트에서 TOML은 어떻게 사용되나요?

모든 Rust 프로젝트에는 [package] 아래에 패키지 이름, 버전, 에디션을 정의하고 [dependencies] 아래에 의존성을 나열하는 Cargo.toml 파일이 있습니다. 의존성은 단순 버전 문자열이거나 serde = { version = "1.0", features = ["derive"] } 같이 버전과 기능 키를 가진 인라인 테이블일 수 있습니다. 워크스페이스 설정, 빌드 프로필, 타겟별 의존성도 TOML 테이블과 배열을 사용합니다.

설정용으로 TOML, YAML, JSON의 차이점은 무엇인가요?

TOML은 모호하지 않은 의미론으로 설정 파일을 위해 특별히 설계되었습니다 -- 각 값을 표현하는 방법이 정확히 하나뿐입니다. YAML과 달리 들여쓰기에 민감한 파싱이 없고 놀라운 타입 변환("no"가 false가 되는 등)이 없습니다. JSON과 달리 주석, 네이티브 날짜시간 타입, 멀티라인 문자열을 지원합니다. TOML은 Rust(Cargo), Python(pyproject.toml), Hugo 등에서 사용됩니다.