정식 명칭: Tom’s Obvious, Minimal Language
등장: 2013년 1월 (Tom Preston-Werner, GitHub 공동 창업자)
표준 확정: 2021년 12월 (TOML 1.0.0)
특징
Key-Value 기반의 단순하고 읽기 쉬운 설정 언어
자료형(문자열, 숫자, 불리언, 날짜/시간) 지원
주석 가능 (#)
JSON보다 가독성이 좋고, INI보다 자료형 지원이 풍부
Python, Rust, Go, Node.js 등에서 공식 지원
Python에서의 활용: pyproject.toml 파일로 패키지 메타데이터와 빌드 설정 관리 (PEP 518, PEP 621)
| 버전 | 발표 시기 | 주요 특징 |
|---|---|---|
| 0.1 | 2013-01 | 기본 Key-Value, 테이블 문법 |
| 0.2~0.4 | 2013~2014 | 배열, 날짜/시간 타입 추가 |
| 0.5 | 2018-07 | UTF-8 지원 명시, 문법 안정화 |
| 1.0.0 | 2021-12 | 표준 확정, 호환성 보장 |
title = "My Project"
version = "0.1.0"
debug = true
max_items = 100
pi = 3.14159
큰따옴표(") 또는 작은따옴표(') 사용 가능
여러 줄 문자열은 """ 또는 ''' 사용
single_line = "Hello"
multi_line = """
여러 줄
문자열
"""
is_active = true
is_deleted = false
integer = 42
float = 3.14
tags = ["python", "packaging", "toml"]
numbers = [1, 2, 3, 4]
release_date = 2024-06-01T12:00:00Z
[author]
name = "홍길동"
email = "hong@example.com"
[database]
host = "localhost"
port = 5432
[database.credentials]
user = "admin"
password = "secret"
setup.py + setuptools구성: setup.py에 setuptools.setup() 호출
장점: 유연성, 오래된 프로젝트와 호환성 높음
단점: 설정이 코드와 섞여 표준화 어려움
from setuptools import setup, find_packages
setup(
name="my_package",
version="0.1.0",
packages=find_packages(),
install_requires=["pandas>=1.3.0"]
)
setup.cfg + 최소한의 setup.py구성: 메타데이터는 setup.cfg(INI 포맷), 빌드 진입점만 setup.py
장점: 설정과 코드 분리, 가독성 향상
단점: INI 포맷은 자료형 표현 제한
[metadata]
name = my_package
version = 0.1.0
description = 데이터 분석 유틸리티
author = 홍길동
author_email = hong@example.com
[options]
packages = find:
install_requires =
pandas>=1.3.0
numpy>=1.21.0
python_requires = >=3.8
from setuptools import setup
setup()
pyproject.toml (PEP 518, PEP 621)구성: 모든 메타데이터와 빌드 설정을 TOML 포맷으로 작성
장점
표준화된 포맷
빌드 백엔드(setuptools, poetry, flit) 선택 가능
다른 언어/툴과 호환성 높음
단점: 기존 사용자에게 생소, 일부 구버전 툴과 호환성 문제
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "my_package"
version = "0.1.0"
description = "데이터 분석 유틸리티"
authors = [
{ name = "홍길동", email = "hong@example.com" }
]
dependencies = [
"pandas>=1.3.0",
"numpy>=1.21.0"
]
requires-python = ">=3.8"
| 시기 | 주류 방식 | 특징 |
|---|---|---|
| 과거 (~2018) | setup.py | 유연성, 코드 기반 설정 |
| 과도기 (2018~2021) | setup.cfg + setup.py | 설정/코드 분리, 가독성 향상 |
| 현재 (2021~) | pyproject.toml | 표준화, 빌드 툴 선택 가능 |
| 미래 | pyproject.toml + Poetry/Flit | 의존성 관리 + 배포 통합 |
TOML은 2013년 등장, 2021년 표준 확정
Python 패키징은 setup.py → setup.cfg → pyproject.toml로 발전
신규 프로젝트는 pyproject.toml 기반을 권장
빌드 툴은 setuptools, poetry, flit 중 선택 가능
TOML 문법은 단순하지만 자료형 지원이 풍부해 설정 관리에 적합