자유게시판
일반

TOML 완벽 가이드 — 왜 탄생했고, JSON·YAML·INI와 무엇이 다른가

중년개발자
중년개발자

@loxo

16일 전

27

TOML 완벽 가이드 — 왜 탄생했고, JSON·YAML·INI와 무엇이 다른가

TOML(톰엘, tom-uhl)은 처음 보면 아주 단순한 설정 파일처럼 보인다.

toml
name = "my-app" version = "1.0.0" debug = true

하지만 TOML은 단순히 “설정 파일 문법 하나가 더 생긴 것”이 아니다.

TOML이 등장한 배경에는 사람이 직접 읽고 수정하기 쉬우면서도, 프로그램이 정확하게 해석할 수 있는 설정 파일을 만들고 싶다는 요구가 있었다.

특히 기존의 INI(이니, I-N-I), JSON(제이슨, JAY-sən), YAML(얘멀, YAM-ul) 등이 각각 가지고 있던 한계를 해결하면서, 설정(Configuration, 컨피규레이션)에 적합한 언어를 목표로 만들어졌다.


1. TOML이란?

TOML(톰엘, tom-uhl)은 Tom's Obvious, Minimal Language의 약자다.

직역하면

Tom의 명확하고 최소한의 언어

정도다.

여기서 Tom은 TOML을 만든 Tom Preston-Werner(톰 프레스턴-워너)를 가리킨다.

TOML의 핵심 철학은 이름 그대로다.

보는 순간 무엇을 의미하는지 알 수 있어야 한다.

그래서 TOML은 복잡한 데이터 표현보다는 설정값을 사람이 작성하고 관리하는 것에 초점을 맞춘다.

예를 들어 다음과 같은 설정을 생각해 보자.

toml
server_host = "localhost" server_port = 8080 debug = true

사람이 봐도 거의 별도의 설명이 필요 없다.


2. 그런데 왜 TOML이 필요했을까?

TOML을 이해하려면 먼저 기존 설정 파일의 문제를 알아야 한다.

과거에는 주로 다음과 같은 형식들이 사용됐다.

  • INI(이니, I-N-I)
  • XML(엑스엠엘, X-M-L)
  • JSON(제이슨, JAY-sən)
  • YAML(얘멀, YAM-ul)

각각 장단점이 있었다.


3. INI — 가장 단순하지만 구조에 한계가 있다

대표적인 INI(이니, I-N-I) 파일은 다음과 같다.

ini
[server] host=localhost port=8080

굉장히 읽기 쉽다.

그래서 Windows 설정 파일이나 오래된 애플리케이션에서 많이 사용됐다.

하지만 복잡한 구조를 표현하기 시작하면 문제가 생긴다.


4. JSON — 구조는 명확하지만 설정 파일로는 불편하다

JSON(제이슨, JAY-sən)은 데이터 구조를 표현하는 데 매우 훌륭하다.

json
{ "server": { "host": "localhost", "port": 8080, "debug": true } }

타입도 명확하다.

하지만 사람이 직접 수정하는 설정 파일에서는 불편한 부분이 있다.


5. YAML — 사람이 읽기는 좋지만 너무 많은 기능을 가지고 있다

YAML(얘멀, YAM-ul)은 설정 파일에서 굉장히 인기가 많다.

yaml
server: host: localhost port: 8080

확실히 보기 좋다.

하지만 YAML은 상당히 강력한 언어다.

문제는 바로 이 강력함이다.


6. TOML이 선택한 방향

TOML(톰엘, tom-uhl)은 여기서 상당히 명확한 선택을 한다.

설정 파일에 필요한 기능만 제공하자.


7. TOML의 가장 기본적인 문법

toml
name = "my-app" version = "1.0.0" debug = true port = 8080

8. TOML의 중요한 특징 — 주석

TOML은 #으로 주석을 작성한다.

toml
# 서버 설정 host = "localhost" port = 8080

9. Table — TOML의 핵심

TOML에서 가장 중요한 개념 중 하나가 Table(테이블, TAY-bəl)이다.

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

10. 중첩 구조도 표현할 수 있다

toml
[server.ssl] enabled = true port = 443

11. 배열

toml
ports = [8080, 8081, 8082]

12. Inline Table

toml
server = { host = "localhost", port = 8080 }

13. Boolean

toml
debug = true production = false

14. 문자열

toml
name = "Tom"

15. Multiline String

toml
description = """ 이것은 여러 줄에 걸쳐 작성할 수 있는 문자열입니다. """

16. 날짜와 시간

TOML은 날짜/시간을 별도 타입으로 지원한다.

toml
created_at = 2026-08-17T05:30:00Z

17. Array of Tables

toml
[[servers]] name = "web01" port = 8080

18. TOML은 JSON을 대체하려고 만들어진 것이 아니다

JSON(제이슨, JAY-sən)과 TOML(톰엘, tom-uhl)은 목적이 다르다.


19. TOML vs INI vs JSON vs YAML

항목INIJSONYAMLTOML
사람이 읽기매우 좋음보통매우 좋음매우 좋음
자료형약함강함강함강함

20. TOML이 특히 주목받은 이유

Rust(러스트, rust) 생태계에서 Cargo.toml(카고 톰엘)이 사용되면서 널리 알려졌다.


21. Python에서도 TOML이 중요한 이유

Python(파이썬, PY-thon)에서는 pyproject.toml(파이프로젝트 톰엘)이 표준이 되고 있다.


22. TOML은 "설정 선언형 언어"에 가깝다

toml
[server] host = "0.0.0.0" port = 8080

23. TOML의 또 다른 장점 — 명시성

toml
port = 8080 debug = true

24. 반대로 TOML에도 단점이 있다

  • 매우 복잡한 데이터에는 불편
  • YAML(얘멀, YAM-ul)보다 표현력 제한
  • API 데이터 교환에는 부적합

25. TOML을 한눈에 이해하는 구조

text
TOML(톰엘, tom-uhl) ├── Key = Value ├── [Table] ├── [[Array of Tables]] ├── Array └── Date / Time

26. 최종 결론

TOML(톰엘, tom-uhl)은

사람이 직접 읽고 수정하는 설정(Configuration, 컨피규레이션)을 가장 명확하게 표현하기 위해 만들어진 작고 엄격한 언어다.

#TOML#설정파일#JSON#YAML#INI

댓글 0

Ctrl + Enter를 눌러 등록할 수 있습니다
※ AI 다듬기는 내용을 정제하는 보조 기능이며, 최종 내용은 사용자가 확인해야 합니다.