Token-Oriented Object Notation(TOON): 구조화된 데이터 입력을 위한 JSON 대체 포맷

TOON 소개

TOON(Token-Oriented Object Notation) 은 대규모 언어 모델(LLM)에 구조화된 데이터를 전달하기 위해 설계된, 간결하면서도 사람이 읽기 쉬운 데이터 포맷입니다. 특히 LLM의 입력 데이터로 최적화되어 있으며, 기존 JSON 형식보다 훨씬 적은 토큰 수로 동일한 정보를 표현할 수 있습니다.

기존의 JSON은 구조가 명확하지만 불필요한 구분자({}, , "")로 인해 토큰 사용량이 상대적으로 많아져 비용이 커집니다. TOON은 이를 개선하기 위해 YAML의 들여쓰기 기반 구조와 CSV의 표 형태 데이터를 결합했습니다. 그 결과, 여러 객체가 동일한 필드를 갖는 경우와 같이 데이터 일관성이 높은 배열 등을 표현하는데 탁월한 효율성을 보입니다.

예를 들어, 사용자 정보를 나타내는 다음과 같은 JSON이 있다고 하면,

{
  "users": [
    { "id": 1, "name": "Alice", "role": "admin" },
    { "id": 2, "name": "Bob", "role": "user" }
  ]
}

TOON(Token-Oriented Object Notation)은 같은 데이터를 다음처럼 표현합니다:

users[2]{id,name,role}:
  1,Alice,admin
  2,Bob,user

위 예시에서 보는 것처럼 불필요한 구문이 제거되어 LLM이 데이터를 읽고 이해하기에 훨씬 경제적입니다. 평균적으로 JSON 대비 30~60%의 토큰 절감 효과가 있으며, 특히 동일한 구조를 가진 대용량 배열 데이터를 다룰 때 큰 장점을 가집니다.

TOON vs. JSON / YAML

TOON은 구조적 표현은 YAML과 비슷하고, 테이블 형태의 데이터 처리에서는 CSV에 가깝습니다. 그러나 JSON/YAML 포맷보다 LLM의 입력 최적화에 집중되어 있습니다.

비교 항목 JSON YAML TOON
문법 복잡도 높음 (괄호, 따옴표 필요) 중간 (들여쓰기 기반) 낮음 (불필요한 구문 제거)
토큰 효율성 낮음 중간 높음
사람 가독성 보통 높음 높음
LLM 친화도 낮음 중간 매우 높음
주 용도 API, 데이터 교환 설정 파일 LLM 입력 데이터

TOON은 특히 “LLM 프롬프트 입력”용으로 설계되었기 때문에, 사람이 읽기 쉽고 모델이 파싱하기 쉬운 구조를 동시에 만족합니다.

TOON의 문법: 형식 규칙과 구조

TOON의 문법은 간결하면서도 일관성을 유지합니다:

  • 들여쓰기: 2칸 고정
  • 객체: key: value 형태
  • 배열: key[N]{fields}: 헤더와 함께 행을 나열
  • 빈 배열/객체: items[0]: 또는 config:
  • 따옴표 규칙: 필요할 때만 사용 (예: 공백, 구분자 포함 시)

예를 들어, 보유하고 있는 재고를 표시할 때 물품의 재고 관리 단위(Stock Keeping Unit), 수량, 가격을 다음과 같이 표시할 수 있습니다:

items[2]{sku,qty,price}:
  A1,2,9.99
  B2,1,14.5

TOON의 주요 특징

  • :money_with_wings: 토큰 효율성: JSON 대비 약 30~60% 절감

  • :brain: LLM 최적화: 배열 길이와 필드명이 명시되어 모델이 구조를 쉽게 검증

  • :triangular_ruler: 간결한 문법: 괄호나 따옴표 대신 들여쓰기를 활용

  • :receipt: 탭 기반 배열: 동일한 필드를 반복 입력할 필요 없이 행만 추가

  • :toolbox: 명확한 구문 규칙: 파싱 오류 최소화

벤치마크: TOON의 효율성

⭐ GitHub Repositories       ██████████████░░░░░░░░░░░   8,745 tokens
                             vs JSON: 15,145  (-42.3%)
                             vs YAML: 13,129  (-33.4%)
                             vs XML:  17,095  (-48.8%)

📈 Daily Analytics           ██████████░░░░░░░░░░░░░░░   4,507 tokens
                             vs JSON: 10,977  (-58.9%)
                             vs YAML:  8,810  (-48.8%)
                             vs XML:  13,128  (-65.7%)

🛒 E-Commerce Order          ████████████████░░░░░░░░░     166 tokens
                             vs JSON:    257  (-35.4%)
                             vs YAML:    197  (-15.7%)
                             vs XML:     271  (-38.7%)

─────────────────────────────────────────────────────────────────────
Total                        █████████████░░░░░░░░░░░░  13,418 tokens
                             vs JSON: 26,379  (-49.1%)
                             vs YAML: 22,136  (-39.4%)
                             vs XML:  30,494  (-56.0%)

gpt-tokenizer(GPT-5 토크나이저 기준)로 측정한 결과, TOON은 JSON 대비 평균 49%, YAML 대비 39%, XML 대비 **56%**의 토큰 절감을 기록했습니다.

일례로, 상위 100개의 GitHub 저장소 데이터를 JSON과 TOON으로 각각 표현했을 때 다음과 같은 토큰 차이를 보였습니다:

  • JSON: 15,145 tokens
  • TOON: 8,745 tokens (−42.3%)

또한, 웹 분석 데이터(180일치)를 표현한 경우에는 TOON이 58.9%의 절감 효과를 보였습니다. 이처럼 TOON은 데이터 구조가 일정할수록 효율성이 극대화 됩니다.

TOON 설치 및 사용법

TOON은 TypeScript로 개발되어, npm과 같은 패키지 매니저를 사용하여 설치할 수 있습니다:

# npm을 사용하여 설치
npm install @byjohann/toon
# 또는 다음과 같이 pnpm / yarn으로 설치 가능
pnpm add @byjohann/toon
yarn add @byjohann/toon

TOON 기본 사용 예시

import { encode } from '@byjohann/toon'

const data = {
  user: {
    id: 123,
    name: 'Ada',
    tags: ['reading', 'gaming']
  }
}

console.log(encode(data))

출력 결과:

user:
  id: 123
  name: Ada
  tags[2]: reading,gaming

CLI 명령어

npx @byjohann/toon <input> [options]

자동으로 파일 확장자를 인식해 JSON → TOON 또는 TOON → JSON 변환을 수행합니다.

예시:

toon input.json -o output.toon
toon data.toon -o output.json

주요 옵션:

옵션 설명
-o, --output 출력 파일 지정
-e, --encode 강제 인코딩
-d, --decode 강제 디코딩
--delimiter 배열 구분자 설정(기본 ,)
--length-marker 배열 길이 표시([#3] 형태)
--no-strict 디코딩 시 엄격 검증 비활성화

LLM에서의 활용

TOON은 LLM 입력 형식으로 특히 적합합니다. JSON보다 40~60% 적은 토큰으로 동일한 정보를 전달할 수 있으며, 명확한 구조 덕분에 LLM이 데이터를 더 정확하게 해석할 수 있습니다.

예를 들어, 다음과 같이 LLM에 사용할 데이터를 입력할 수 있습니다:

데이터는 다음과 같이 TOON 포맷(공백 2개 들여쓰기, 배열은 길이와 필드 표시)으로 제공됩니다:

\`\`\`toon
users[3]{id,name,role,lastLogin}:
  1,Alice,admin,2025-01-15T10:30:00Z
  2,Bob,user,2025-01-14T15:22:00Z
  3,Charlie,user,2025-01-13T09:45:00Z
\`\`\`

작업: 역할이 "user"인 사용자만 반환하세요. 동일한 헤더 구조를 유지하고 [N] 값을 일치시키세요. 결과만 코드 블럭으로 출력합니다.

이렇게 명시적으로 포맷을 보여주면, 모델이 별도의 설명 없이 구조를 이해할 수 있습니다.

지원 언어 포트

TOON은 다음과 같이 다양한 언어로 포팅되어 있습니다:

라이선스

TOON 프로젝트는 MIT 라이선스로 배포됩니다. 상업적 사용에 제한이 없습니다.

:github: TOON 프로젝트 GitHub 저장소




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

1개의 좋아요