본문으로 건너뛰기
피드

Posit가 공개한 'ggsql' 알파 — SQL 문법으로 쓰는 ggplot2

open-source 약 7분
vote
0
댓글
북마크

Posit(구 RStudio)가 SQL 문법 기반의 Grammar of Graphics 구현체 ggsql 알파 버전을 공개했다. VISUALIZE, DRAW, SCALE 같은 새 절로 SQL 쿼리 안에서 바로 시각화를 선언할 수 있고, R/Python 런타임 없이 단일 실행 파일로 동작한다. 핵심은 쿼리 푸시다운으로 100억 행 규모에서도 집계값만 가져와 플롯을 그릴 수 있다는 점.

  • 1

    VISUALIZE / DRAW / PLACE / SCALE / LABEL 절을 추가한 SQL 확장 문법

  • 2

    R/Python 없이 단일 실행 파일로 동작 — 샌드박싱과 AI 에이전트 통합 용이

  • 3

    쿼리 푸시다운으로 10억 행 이상 데이터도 백엔드에서 집계만 수행

  • 4

    DuckDB 백엔드 우선 지원, Quarto/Jupyter/Positron/VS Code 호환

  • 5

    LLM이 SQL에 익숙하다는 점을 활용한 자연어→시각화 파이프라인 설계

  • Posit가 ggsql 알파 버전을 공개함 — 한마디로 "SQL 문법으로 쓰는 ggplot2"
    • R/Python 없이 순수 SQL 쿼리로 그래프를 그리는 도구. Quarto, Jupyter, Positron, VS Code에서 바로 동작
    • VISUALIZE, DRAW, PLACE, SCALE, LABEL 같은 새로운 SQL 절(clause)을 추가한 확장 문법을 쓴다
    • 18년 동안 R 생태계를 지배해온 ggplot2의 "그래픽 문법(Grammar of Graphics)" 철학을 SQL 위에 그대로 이식

어떻게 생겼나

  • 산점도 같은 기본 플롯은 VISUALIZE penguins MAPPING x=bill_len, y=bill_dep DRAW point 식으로 선언형으로 쓴다
    • 색상 카테고리 추가는 매핑 한 줄 추가, 추세선 추가는 레이어 한 줄 추가 — 점진적으로 플롯을 키워나가는 ggplot2 스타일 그대로
    • "정해진 플롯 타입"이 없고 모듈형 레이어 조합으로 모든 그림을 만듬 (히스토그램, 박스플롯, 지터, 바이올린 등)
  • SQL 파트와 시각화 파트가 한 쿼리에 공존 — VISUALIZE 키워드가 둘을 구분하는 경계선
    • 앞부분은 백엔드가 지원하는 순수 SQL(블로그 예시는 DuckDB 백엔드)
    • 결과 테이블이 그대로 시각화 파이프라인으로 흘러들어감

왜 또 시각화 라이브러리를 만들었나

  • SQL 사용자를 위한 시각화 도구가 애매했음 — R/Python으로 내보내거나, 재현성 떨어지는 BI GUI를 쓰거나, 빈약한 인-쿼리 도구를 쓰는 선택지뿐이었다
  • SQL의 관계대수 기반 선언형 철학과 Grammar of Graphics의 선언형 철학이 구조적으로 잘 맞아떨어짐
  • R/Python 런타임 없이 독립 실행 파일로 동작하게 만들어서 AI 에이전트나 리포팅 도구에 끼워넣기 쉽게 만드는 게 목표
    • 샌드박싱도 쉬워지고 악성 코드 실행 위험도 줄어듬
  • LLM이 SQL을 이미 아주 잘 쓰기 때문에, ggsql도 자연어→시각화 파이프라인에 잘 맞는다고 판단 (이미 querychat에서 써먹고 있음)

중요

> 가장 흥미로운 지점은 "쿼리 푸시다운". 100억 행 트랜잭션의 막대그래프를 그릴 때 각 막대의 count 값만 데이터 웨어하우스에서 가져온다 — 전체 데이터를 메모리에 올리지 않음. 박스플롯이나 밀도 플롯 같은 복잡한 레이어도 마찬가지로 집계 연산이 백엔드에서 끝남.

로드맵

  • 알파 단계라서 앞으로 추가할 것들을 밝혔음
    • Rust로 처음부터 다시 짜는 고성능 라이터
    • 테마 인프라, 인터랙티비티, 공간 데이터 지원
    • Posit Workbench/Positron → Connect 엔드투엔드 배포 플로우
    • ggsql 전용 LSP와 코드 포매터
  • ggplot2는 버리지 않음 — 성숙/안정 단계로 유지 보수하면서, ggsql에서 얻은 경험을 역으로 ggplot2에 반영하겠다는 입장

기술 맥락

Grammar of Graphics가 왜 중요한 아이디어인지부터 짚고 가면 좋아요. 2005년 Leland Wilkinson이 제시한 이 이론은 "데이터 → 미적 속성(aesthetic) 매핑 → 기하 객체(geom) → 스케일 → 좌표계 → 패싯"이라는 모듈로 시각화를 분해해요. 이 조합만 있으면 어떤 플롯도 만들 수 있거든요. ggplot2가 18년간 R 생태계 표준으로 살아남은 이유가 바로 이 "레이어를 쌓아 올리는" 조합성 때문이에요.

Posit가 굳이 SQL을 고른 건 런타임 문제가 제일 크거든요. ggplot2는 R이 있어야 하고 plotnine은 Python이 있어야 해요. AI 에이전트나 리포팅 툴에 끼워넣으려면 인터프리터를 통째로 번들링하거나 원격 실행 환경을 세팅해야 하는데, 이게 샌드박싱이나 배포 면에서 골치 아파요. 단일 실행 파일 하나로 해결되면 배포가 훨씬 단순해지고 보안 표면도 줄어들어요.

쿼리 푸시다운이 진짜 핵심 기술 결정이에요. 대부분의 시각화 도구는 "데이터를 전부 가져와서 → 클라이언트에서 집계 → 그림" 순서로 돌아가는데, 이건 데이터 웨어하우스 시대에 맞지 않아요. ggsql은 레이어마다 필요한 집계(빈 카운트, 사분위수 등)를 SQL로 번역해서 백엔드에서 실행해요. DuckDB, Snowflake, BigQuery 같은 엔진의 벡터화 집계를 그대로 활용할 수 있다는 얘기라서 10억 행 규모에서도 시각화가 가능한 거예요.

LLM 연동 관점에서도 전략적이에요. 요즘 LLM은 자연어→SQL 변환은 꽤 잘해요. 근데 자연어→matplotlib/ggplot2 코드는 여전히 환각이 많거든요. SQL 문법의 확장으로 시각화를 표현하면 LLM이 이미 학습한 SQL 패턴을 그대로 재사용할 수 있어요. Posit의 querychat 데모가 이 방향의 첫 증명이에요.

한 가지 트레이드오프도 있어요. SQL 문법을 확장한다는 건 각 백엔드가 이 확장 절을 파싱하거나, 아니면 ggsql이 앞단에서 파싱해서 표준 SQL로 내려보낸다는 뜻이에요. 후자면 표준 SQL 호환성은 확보되지만 중간 엔진이 하나 더 끼는 구조예요. 알파 단계에서는 DuckDB 백엔드로 검증 중인 것 같고, Rust 기반 라이터 로드맵이 나온 걸 보면 이 파싱 계층을 성능 최적화하려는 의도가 읽혀요.

BI 툴도 R/Python 노트북도 애매했던 SQL 중심 데이터 분석가들을 정조준한 제품 포지셔닝이 인상적이다. 특히 '쿼리 푸시다운으로 웨어하우스에서 집계만 가져온다'는 철학은 dbt + 웨어하우스 중심으로 재편 중인 현대 데이터 스택과 궁합이 좋다.

댓글

댓글

댓글을 불러오는 중...

open-source

MySQL부터 MongoDB까지, 오픈소스가 데이터베이스 판을 바꾼 30년

이 글은 MySQL, MariaDB, PostgreSQL, SQLite, MongoDB, Hadoop을 따라가며 데이터베이스 세계에서 오픈소스가 어떻게 표준이 되고 상업화의 대상이 됐는지 풀어낸다. 무료 코드가 스타트업과 빅데이터 생태계를 키웠지만, 동시에 인수, 라이선스, 클라우드 흡수 같은 현실적인 긴장도 만들었다는 얘기야.

open-source

UCLA가 3천 달러짜리 오픈소스 로봇 손 ‘마이다스 핸드’를 공개

UCLA 로봇연구소 RoMeLa가 로봇 조작과 AI 학습 연구용 오픈소스 로봇 손 MIDAS Hand를 공개했어. 13개 능동 자유도, 3개 수동 자유도, 283개 3축 촉각센서, 약 3,000달러 부품 원가를 내세워 고성능 로봇 손 연구의 접근성을 낮추려는 프로젝트야.

open-source

러스트로 다시 만든 로컬 코딩 에이전트 ‘파이’, 자동화까지 노린다

파이는 기존 pi 코딩 에이전트를 러스트로 다시 만든 터미널 기반 AI 코딩 에이전트다. 프로젝트 안에서 파일을 읽고 수정하고, 셸 명령을 실행하고, 세션을 이어가며, 로컬 모델과 여러 모델 제공자를 쓸 수 있다. 단순 채팅 UI가 아니라 트리거, 크론, MCP 알림, 에이전트 간 허브 메시징까지 넣은 로컬 에이전트 런타임을 지향한다.

open-source

윈도우 95 시절 쉘 API로 만든 명령줄 도구, WinUtils 회고

글쓴이가 1996~1997년에 만든 WinUtils는 윈도우 95의 쉘 API를 감싼 얇은 명령줄 도구 모음이었다. 직접 파일 입출력을 구현하는 대신 탐색기와 같은 복사, 이동, 삭제, 휴지통, 확인창 동작을 그대로 활용한 점이 핵심이다.

open-source

Paseo, 여러 코딩 에이전트를 한 화면에서 돌리는 오픈소스 인터페이스 공개

Paseo는 Claude Code, Codex, Copilot, OpenCode, Pi 같은 코딩 에이전트를 한 인터페이스에서 실행하고 관리하는 오픈소스 도구다. 로컬 daemon이 에이전트 프로세스를 관리하고, 데스크톱·모바일·웹·CLI 클라이언트가 여기에 연결되는 구조라 자기 개발 환경 위에서 병렬 작업을 돌릴 수 있다.