Agentic Data Visualization
짧은 스펙은 밋밋하고, 예쁜 차트는 깨지기 쉽다 — 에이전트가 그 사이를 필요로 한다
핵심 개념
좋은 차트 하나에는 수많은 설계 결정이 들어간다. 날짜를 어떻게 파싱할지, 축이 0에서 시작할지, 값을 어떻게 포맷할지, 레이블에 얼마나 공간을 줄지, 어떤 색이 데이터를 읽기 쉽게 만드는지.
Vega-Lite, Apache ECharts, Chart.js 같은 현대 시각화 라이브러리는 이 컨트롤을 모두 노출한다. 그런데 여기 트레이드오프가 있다.
- 기본값에 의존하는 짧은 스펙 → 쓰기 쉽지만 밋밋한 결과
- 다듬어진 시각화 → 의도적으로 고른 파라미터가 들어간 상세 스펙이 필요하고, 그건 장황하고 깨지기 쉽고 오류 나기 쉽다
LLM과 에이전트가 시각화 작업을 더 많이 맡을수록 이 트레이드오프가 날카로워진다. 에이전트는 복잡한 저수준 스펙 디테일을 관리해야 할 때 특히 오류를 내고, 그 결과로 나온 취약한 코드는 사람이 검사·수정·재사용하기 어렵다.
필요한 건 그 중간이다: 에이전트가 안정적으로 생산할 수 있고, 사람이 직접 편집할 수 있고, 시스템이 잘 설계된 차트로 컴파일할 수 있는 컴팩트한 스펙.
중간 언어(intermediate language) 접근
Microsoft Research의 Flint가 이 패턴의 구현이다.
[data spec] [chart spec]
의미론적 타입 + 메타데이터 + 차트 유형 + 필드→채널 매핑
period: YearMonth heatmap
newUsers: Profit x: period, y: ..., color: newUsers
↓
Flint 컴파일러
(파싱 규칙 · 스케일 · 축 · 집계 · 포맷 · 컬러 스킴 · 레이아웃 유도)
↓
Vega-Lite / ECharts / Chart.js
왜 semantic type이 지렛대인가
핵심 통찰은 이것이다. 의미론적 타입은 저수준 시각화 파라미터 전체보다 LLM이 추론하기 훨씬 쉽다.
필드 이름, 값 패턴, 상식만으로 모델은 어떤 컬럼이 날짜인지, 가격인지, 퍼센트인지, 국가인지, 순위인지, 상관계수인지 알아볼 수 있다. 그 의미가 명시적으로 표현되고 나면, 그러지 않았다면 깨지기 쉬운 라이브러리별 코드로 나타났을 설계 결정들을 컴파일러가 처리할 수 있다.
예를 들어 newUsers가 Profit 타입이라고 선언하면 컴파일러는 양수/음수를 적절히 표현하는 diverging 컬러 스케일을 고르고 0을 baseline으로 잡는다. period가 YearMonth라면 temporal 파싱과 축 포맷이 따라온다. 이걸 저수준으로 하드코딩하면 필드 이름과 raw 값에서 추측해야 하고, 기술적으로는 유효하지만 오해를 부르는 차트가 나온다.
데이터에 적응하는 레이아웃
cardinality와 밀도가 변해도 읽을 수 있도록 크기·간격·레이블·레이아웃이 자동 관리된다. 명시적 사용자 설정이 없어도 되므로 에이전트가 생성한 스펙이 데이터가 바뀌었을 때 조용히 무너지지 않는다.
백엔드 독립성
중간 표현이 특정 렌더링 라이브러리와 분리되어 있으므로, 아주 다른 API·프로그래밍 모델을 가진 백엔드를 타겟할 수 있다. 같은 컴팩트한 차트 의도를 유지한 채 능력이 가장 맞는 백엔드를 고른다. 차트를 처음부터 다시 쓰지 않아도 된다.
에이전트 워크플로에 붙이기
라이브러리만으로는 부족하고 MCP 서버로 패키징되어야 에이전트가 채팅·코딩 환경 안에서 차트를 생성·검증·렌더할 수 있다. Flint는 flint-chart-mcp를 제공한다 — 데이터를 인라인으로 넣거나 설정된 로컬 파일을 읽고, 인터랙티브 차트 뷰를 열어 사용자가 검사·수정할 수 있다. → MCP (Model Context Protocol)
시각화를 위한 시맨틱 레이어
이 방향이 가리키는 곳은 시각화의 공유 시맨틱 레이어다. 사람과 AI 에이전트는 컴팩트한 차트 의도를 다루고 컴파일러가 세심한 저수준 디테일을 처리한다.
이는 Semantic Layer가 지표·비즈니스 의미에서 하는 일과 같은 구조다. 그리고 AI Self-Serve Analytics에서 자연어 → SQL 다음 단계로 자연스럽게 이어진다 — 답을 계산하는 것과 답을 읽을 수 있게 보여주는 것은 별개의 문제이고, 둘 다 의미론이 명시되어야 자동화가 신뢰할 만해진다.
평가
전체 Vega-Lite 스펙을 직접 생성하게 하는 베이스라인(DirectVL)과 LLM-judge 파이프라인으로 비교했을 때 Flint가 일관되게 더 높은 점수를 받았다 (GPT-5.1 16.27 vs 15.91, GPT-5-mini 16.16 vs 15.60, GPT-4.1 15.91 vs 15.34). 차이 자체는 크지 않지만 모델을 바꿔도 방향이 유지된다는 점이 중간 언어 접근의 강건함을 시사한다. → LLM-as-Judge
연관 개념
- AI Self-Serve Analytics
- Semantic Layer
- MCP (Model Context Protocol)
- Context Engineering
- LLM-as-Judge
- Knowledge Representation
- Claude Artifact (marketing analytics) — ⚠️ 클리핑 실패(iframe) — 내용 없음, 기록용