형식 문서는 장난감 예시를 좋아합니다 — 세 개의 행, 가짜 이름, 다섯 개의 열. 구문을 배우기에는 충분하지만, 실제로 일에서 다루는 형태를 형식이 처리하는지 알려주지 않습니다. 이 문서는 장난감을 건너뜁니다. 아래는 실제 백엔드 개발에서 끊임없이 나타나는 데이터 패턴들입니다 — 제품 카탈로그, 감사 로그, 지표 테이블, 설정 객체, 금융 트랜잭션 — JSON과 TOON을 나란히 보여주므로 정확히 무엇을 절약하고 있는지, TOON이 어디서 자신의 역할을 하는지 볼 수 있습니다. 모든 데이터는 현실적입니다; foo, bar, 또는 placeholder 이름은 없습니다. 형식 자체에 대한 배경은 TOON 구문 가이드를 참조하세요.

전자상거래 제품 카탈로그

제품 배열은 아마도 개발자들이 LLM에 보내는 가장 흔한 것일 것입니다 — "이 항목들을 분류해주세요", "각 카테고리에서 가장 저렴한 것을 찾아주세요", "$50 이상의 품절 항목을 표시해주세요". 다음은 JSON에서의 현실적인 카탈로그 슬라이스입니다:

json
[
  {"id":"PRD-1041","name":"Logitech MX Master 3S","sku":"LOG-MX3S-GRY","price":99.99,"inStock":true,"category":"Peripherals"},
  {"id":"PRD-1042","name":"Samsung 970 EVO Plus 1TB","sku":"SAM-970P-1TB","price":89.99,"inStock":true,"category":"Storage"},
  {"id":"PRD-1043","name":"Keychron K2 Pro","sku":"KEY-K2P-BLK","price":119.99,"inStock":false,"category":"Peripherals"},
  {"id":"PRD-1044","name":"Elgato Stream Deck MK.2","sku":"ELG-SD-MK2","price":149.99,"inStock":true,"category":"Streaming"},
  {"id":"PRD-1045","name":"WD Blue 2TB HDD","sku":"WD-BLU-2TB","price":54.99,"inStock":true,"category":"Storage"},
  {"id":"PRD-1046","name":"Razer DeathAdder V3","sku":"RZR-DAV3-BLK","price":69.99,"inStock":true,"category":"Peripherals"},
  {"id":"PRD-1047","name":"Focusrite Scarlett Solo","sku":"FOC-SC-SOLO","price":119.99,"inStock":false,"category":"Audio"}
]

이제 동일한 카탈로그를 TOON으로. 열 헤더가 한 번 선언됩니다; 각 행은 값만입니다:

text
products[7]{id,name,sku,price,inStock,category}:
  PRD-1041,Logitech MX Master 3S,LOG-MX3S-GRY,99.99,true,Peripherals
  PRD-1042,Samsung 970 EVO Plus 1TB,SAM-970P-1TB,89.99,true,Storage
  PRD-1043,Keychron K2 Pro,KEY-K2P-BLK,119.99,false,Peripherals
  PRD-1044,Elgato Stream Deck MK.2,ELG-SD-MK2,149.99,true,Streaming
  PRD-1045,WD Blue 2TB HDD,WD-BLU-2TB,54.99,true,Storage
  PRD-1046,Razer DeathAdder V3,RZR-DAV3-BLK,69.99,true,Peripherals
  PRD-1047,Focusrite Scarlett Solo,FOC-SC-SOLO,119.99,false,Audio
TOON의 여섯 열 헤더는 정확히 한 번만 작성됩니다. JSON에서는 모든 행에 반복됩니다. 3행에서 이미 헤더가 토큰 절약으로 자신의 역할을 했습니다 — 200행 카탈로그에서 차이는 극적입니다. OpenAI 토크나이저를 사용하여 직접 데이터에 대한 절약을 확인하세요.

사용자 활동 / 감사 로그

감사 로그는 "이 사용자가 지난 한 시간 동안 무엇을 했는지 요약해주세요" 또는 "의심스러운 액세스 패턴을 표시해주세요"와 같은 프롬프트와 함께 LLM에 제공할 정확한 종류의 데이터입니다. 대용량이고 반복적이며 모든 행에서 열 이름이 동일합니다. 감사 추적은 또한 JSON으로 붙여넣을 때 컨텍스트 창을 가장 먼저 날려버리는 것이기도 합니다. 다음은 TOON에서의 현실적인 9행 로그입니다:

text
auditLog[9]{userId,action,resourceId,resourceType,timestamp,ip}:
  U-8821,LOGIN,,session,2024-11-14T08:02:11Z,203.0.113.47
  U-8821,VIEW,DOC-4490,document,2024-11-14T08:03:44Z,203.0.113.47
  U-8821,DOWNLOAD,DOC-4490,document,2024-11-14T08:03:51Z,203.0.113.47
  U-8821,VIEW,DOC-4491,document,2024-11-14T08:05:02Z,203.0.113.47
  U-8821,EDIT,DOC-4491,document,2024-11-14T08:07:39Z,203.0.113.47
  U-8821,SHARE,DOC-4491,document,2024-11-14T08:08:12Z,203.0.113.47
  U-8821,VIEW,USR-0055,user_profile,2024-11-14T08:09:58Z,203.0.113.47
  U-8821,VIEW,USR-0056,user_profile,2024-11-14T08:10:03Z,203.0.113.47
  U-8821,LOGOUT,,session,2024-11-14T08:11:22Z,203.0.113.47

동등한 JSON은 모든 아홉 행에 "userId", "action", "resourceId", "resourceType", "timestamp", "ip"를 반복합니다 — 여섯 필드 이름에 대해 54개의 키 반복. TOON에서는 정확히 한 번 나타납니다. 수백 개의 항목이 있는 감사 로그의 경우, 이것이 데이터가 프롬프트에 맞는지 아닌지의 차이입니다.

API 속도 제한 / 지표 데이터

운영 지표 — 지연 시간 백분위수, 오류율, 처리량 — 은 TOON에 또 다른 자연스러운 맞춤입니다. 데이터는 숫자 중심이고 완벽하게 표 형식입니다. "p99 지연 시간이 500ms를 초과하는 엔드포인트는 어디인가요?" 또는 "오류율이 증가하는 추세는 어디인가요?"를 묻기 위해 이것을 LLM에 보낼 수 있습니다. 이것은 Node.js 지표 파이프라인이나 Prometheus 스크래프에서 나오는 전형적인 형태의 데이터입니다:

text
apiMetrics[8]{endpoint,method,p50ms,p99ms,errorRate,callsPerDay}:
  /api/v2/products,GET,42,118,0.002,84200
  /api/v2/products/:id,GET,38,95,0.001,31500
  /api/v2/orders,POST,210,880,0.015,4800
  /api/v2/orders/:id,GET,55,201,0.003,19200
  /api/v2/cart,PUT,95,430,0.008,22100
  /api/v2/search,GET,310,1240,0.021,61000
  /api/v2/users/:id,GET,29,88,0.001,9700
  /api/v2/checkout,POST,540,2100,0.034,3200

LLM은 컨텍스트 오버헤드 없이 이 테이블에 대한 질문에 즉시 답할 수 있습니다. /api/v2/search/api/v2/checkout 모두 높은 p99와 높은 오류율로 두드러집니다 — 데이터를 깔끔하게 제시할 때 LLM이 즉시 표면화할 수 있는 정확한 종류의 패턴입니다.

중첩 설정 객체

TOON은 표 형식 데이터 이상을 처리합니다. 구조화된 객체 — 앱의 런타임 설정에서 발견하는 종류 — 의 경우, TOON은 중첩 구조를 가진 인라인 객체 표기법을 사용합니다. 직렬화 형식 TOML이나 YAML의 대응이라고 생각하되, 더 간결합니다. 다음은 서버 설정, 데이터베이스 설정, 기능 플래그를 보여주는 현실적인 앱 설정입니다:

json
{
  "server": {
    "host": "0.0.0.0",
    "port": 8080,
    "tlsEnabled": true,
    "requestTimeoutMs": 30000
  },
  "database": {
    "host": "db.internal.example.com",
    "port": 5432,
    "name": "commerce_prod",
    "poolSize": 20,
    "sslRequired": true
  },
  "features": {
    "newCheckoutFlow": true,
    "recommendationEngine": false,
    "darkMode": true,
    "betaDashboard": false
  }
}

TOON 객체 표기법의 동일한 설정 — 키는 따옴표 없음, 중첩은 인라인 중괄호 사용:

text
{
  server:{host:0.0.0.0,port:8080,tlsEnabled:true,requestTimeoutMs:30000},
  database:{host:db.internal.example.com,port:5432,name:commerce_prod,poolSize:20,sslRequired:true},
  features:{newCheckoutFlow:true,recommendationEngine:false,darkMode:true,betaDashboard:false}
}
TOON의 객체 구문은 값에 쉼표나 콜론이 포함되지 않으면 키를 따옴표로 묶지 않습니다. 위의 database 블록에서 host:db.internal.example.com은 그대로 괜찮습니다 — 값에 쉼표나 콜론이 없기 때문에 따옴표가 필요하지 않습니다. 값이 포함하는 경우, 이중 따옴표로 묶으세요: dsn:"host:5432,sslmode=require".

금융 트랜잭션

금융 데이터는 또 다른 고가치 LLM 사용 사례입니다: 사기 감지 힌트, 조정 확인, 분류. 문자열 ID, 숫자 금액, 통화 코드, 상태 열거형, 타임스탬프의 혼합은 TOON의 표 형식 형식에 깔끔하게 맵핑됩니다. 다음은 현실적인 트랜잭션 슬라이스입니다:

text
transactions[9]{txId,amount,currency,from,to,status,timestamp}:
  TXN-88201,1250.00,GBP,ACC-1041,ACC-2209,settled,2024-11-14T09:15:00Z
  TXN-88202,89.99,USD,ACC-3301,ACC-0047,settled,2024-11-14T09:16:34Z
  TXN-88203,4500.00,EUR,ACC-2001,ACC-5512,pending,2024-11-14T09:18:02Z
  TXN-88204,22.50,USD,ACC-0099,ACC-3301,settled,2024-11-14T09:21:47Z
  TXN-88205,750.00,GBP,ACC-5512,ACC-1041,failed,2024-11-14T09:25:10Z
  TXN-88206,12000.00,USD,ACC-7700,ACC-2001,pending,2024-11-14T09:28:55Z
  TXN-88207,310.00,EUR,ACC-1041,ACC-0099,settled,2024-11-14T09:31:22Z
  TXN-88208,55.00,USD,ACC-3301,ACC-7700,settled,2024-11-14T09:33:40Z
  TXN-88209,8900.00,GBP,ACC-2209,ACC-5512,flagged,2024-11-14T09:37:15Z

"£5,000 이상이거나 상태가 flagged 또는 failed인 트랜잭션을 표시해주세요"와 함께 이것을 프롬프트에 붙여넣으면 모델은 몇 초 안에 답할 것입니다. TOON 표현은 대부분의 모델에서 컨텍스트 제한에 걸리지 않고 단일 프롬프트에 수백 행을 편안하게 맞출 수 있을 만큼 압축적입니다.

하나의 문서에서 표 형식 및 객체 데이터 결합

JSON도 CSV도 깔끔하게 처리하지 못하는 것이 있습니다: 동일한 페이로드에 메타데이터 헤더(단일 설정 객체)와 데이터 테이블 모두를 가진 문서. 상단에 컨텍스트 블록이 있는 보고서를 생각해보세요 — 누가 생성했는지, 어느 기간을 커버하는지, 어떤 필터가 적용되었는지 — 뒤에 실제 데이터 행이 따릅니다. JSON에서는 "meta" 키와 "rows" 키를 가진 봉투 객체로 모든 것을 감싸야 하며, 이는 중첩 레이어를 하나 더 추가합니다. CSV는 전혀 할 수 없습니다. TOON은 이것을 기본으로 처리합니다:

text
{report:weekly_sales,generatedAt:2024-11-14T10:00:00Z,region:EMEA,currency:EUR,generatedBy:analytics-service}

salesByRep[6]{repId,repName,deals,revenue,avgDealSize,quota}:
  REP-101,Marta Kowalski,14,84200.00,6014.28,75000
  REP-102,James Okafor,11,61500.00,5590.90,75000
  REP-103,Yuki Tanaka,18,102400.00,5688.88,90000
  REP-104,Sofia Andersen,9,47800.00,5311.11,75000
  REP-105,Liam Byrne,16,93100.00,5818.75,90000
  REP-106,Priya Nair,21,118600.00,5647.61,100000

첫 번째 줄은 TOON 객체 — 보고서 메타데이터입니다. 빈 줄은 이어지는 표 형식 섹션과 구분합니다. @toon-format/toon의 단일 decode() 호출로 둘 다 반환합니다. "할당량을 달성할 것으로 예상되는 담당자는 누구인가요?"와 같은 질문과 함께 이 전체 문서를 LLM에 보낼 수 있으며, 필요한 모든 것이 있습니다: 보고서 컨텍스트 데이터, 하나의 압축 페이로드로.

이 혼합 형식은 LLM 파이프라인에 특히 강력합니다. 중첩 키가 있는 JSON 봉투를 구성하는 대신, 평면 헤더 객체 + 명명된 테이블을 작성합니다. 모델은 자연스럽게 읽고, 생성하는 코드는 간단합니다. 기존 JSON 페이로드를 변환하려면 JSON to TOON 변환기를 사용하거나, TOON Formatter를 사용하여 손으로 작성한 TOON을 정리하고 검증하세요.

npm 패키지 사용

이러한 예시들은 모두 프로그래밍 방식으로 인코딩하고 디코딩할 수 있습니다. @toon-format/toon 패키지가 참조 구현입니다. 어떤 Node.js 또는 브라우저 프로젝트에도 설치하세요:

bash
npm install @toon-format/toon

그런 다음 어떤 LLM API에 보내기 전에 데이터를 인코딩하고, 돌아오는 길에 응답을 디코딩하세요:

ts
import { encode, decode } from '@toon-format/toon';

const transactions = [
  { txId: 'TXN-88201', amount: 1250.00, currency: 'GBP', from: 'ACC-1041', to: 'ACC-2209', status: 'settled', timestamp: '2024-11-14T09:15:00Z' },
  { txId: 'TXN-88202', amount: 89.99,   currency: 'USD', from: 'ACC-3301', to: 'ACC-0047', status: 'settled', timestamp: '2024-11-14T09:16:34Z' },
  // ...more rows
];

// Compact TOON string — send this to your LLM prompt
const toonPayload = encode(transactions);

// When the LLM returns TOON, decode back to a JS array
const decoded = decode(toonPayload);
console.log(decoded[0].status); // "settled"

마무리

위의 패턴들 — 제품 카탈로그, 감사 로그, 지표 테이블, 설정 객체, 금융 데이터, 혼합 헤더+테이블 문서 — 은 개발자들이 실제로 LLM에 보내는 구조화된 데이터의 대부분을 커버합니다. TOON은 이것들을 모두 잘 처리하며, 모든 경우에 토큰 절약이 상당합니다. 핵심 규칙은 간단합니다: JSON은 모든 행에 키 이름을 반복합니다; TOON은 그렇지 않습니다. LLM 컨텍스트 창에 들어가는 표 형식 데이터 직렬화의 경우, 그 반복은 순수한 낭비입니다.

기존 JSON을 TOON으로 변환하려면 JSON to TOON 변환기를 사용하세요. LLM이 TOON을 반환한 후 반대 방향으로 가려면 TOON to JSON 변환기를 사용하세요. TOON Formatter는 TOON 문자열을 정리하고 검증하며, TOON Validator는 파이프라인에 도달하기 전에 구문 오류를 잡습니다. npm 패키지 @toon-format/toon은 두 줄의 코드로 인코딩과 디코딩을 처리합니다 — 위의 모든 예시가 기본으로 작동합니다.