
Ontul 주요 기능
배치 처리, 스트림 처리, 인터랙티브 SQL을 하나의 엔진으로 통합한 분산 데이터 엔진의 핵심 기능을 소개합니다.
통합 데이터 엔진
배치 처리, 스트림 처리, 인터랙티브 SQL 쿼리를 하나의 클러스터에서 실행합니다. 별도의 시스템 없이 모든 데이터 워크로드를 통합합니다.
Arrow 네이티브 실행 엔진
Apache Arrow 컬럼나 포맷으로 모든 데이터를 처리합니다. Iceberg Parquet 데이터 파일을 컬럼 단위로 Arrow 벡터에 직접 디코드하고, Iceberg 파일 프루닝·Parquet 로우그룹 스킵으로 읽을 데이터를 최소화하며, 컬럼형 집계와 bounded-heap Top-N, 제로카피 실행으로 최상급 분석 성능을 실현합니다.
인터랙티브 SQL
Arrow Flight SQL을 통한 JDBC 연결(DBeaver, DataGrip)과 다중 카탈로그 페더레이션 쿼리를 지원합니다. JOIN, 윈도우 함수, CTE 등 표준 SQL을 완벽 지원하며, 컴파일된 plan 캐시와 스냅샷 기반 결과 캐시로 변경 없는 데이터에 대한 반복 쿼리는 실행 자체를 건너뛰어 BI·AI 에이전트 워크로드의 인터랙티브 QPS를 높입니다. MCP 서버는 JSON-RPC 배치 요청을 동시 처리해 에이전트의 다중 도구 호출을 한 번의 왕복으로 처리합니다.
Flink 스타일 스트리밍
Spark의 마이크로배치가 아닌 Flink처럼 이벤트가 도착하는 즉시 처리하는 continuous processing 방식입니다. TUMBLING, SLIDING, SESSION 윈도우와 multi-worker 해시 셔플을 지원합니다.
Exchange Manager
Query/Batch/Streaming 모든 경로를 위한 통합 fault-tolerance 인프라입니다. 메모리 초과 시 data spill, 스트리밍 checkpoint 상태 저장을 하나의 시스템으로 관리하며, 모든 데이터는 KMS 봉투 암호화됩니다.
Exactly-Once 보장
Master 조율 barrier checkpoint로 transactional sink(Iceberg, JDBC, NeorunBase, Kafka Transactions)에서 exactly-once 전달을 보장합니다. Sink commit → offset commit 순서로 데이터 정합성을 확보합니다.
커넥터 아키텍처
플러그인 기반 커넥터로 다양한 데이터 소스에 접근합니다. Iceberg, NeorunBase, JDBC, Kafka, Elasticsearch 등을 런타임에 동적으로 등록/해제할 수 있습니다.
페더레이션 쿼리
여러 데이터 소스에 걸친 크로스 카탈로그 조인을 단일 SQL로 실행합니다. Iceberg, NeorunBase, JDBC 테이블을 하나의 쿼리로 결합합니다.
시맨틱 레이어
메트릭, 디멘전, 다국어 동의어, 거버넌스, 컨폼드 디멘전 조인, 파생 메트릭, 멀티테넌트 강제 필터를 정의하면 Ontul 플래너가 쿼리 시점에 자동 재작성합니다. SELECT revenue FROM sales 만 써도 SUM(...) 집계와 GROUP BY, JOIN, 행 필터까지 서버에서 처리됩니다.
Agentic AI 준비
내장 MCP 서버가 LLM 에이전트에게 메트릭 발견과 자연어 검색(한국어 매출 ↔ revenue), 인증 메타데이터를 제공합니다. 시맨틱 레이어가 집계·조인·RBAC을 서버에서 처리하므로 에이전트는 컬럼명만 알면 되며, 멀티테넌트 정책도 사용자 컨텍스트로 자동 적용됩니다.
Apache Iceberg v2 · v3 네이티브
Iceberg v2와 v3를 모두 네이티브로 지원합니다. 분산 INSERT/CTAS와 MOR 기반 DELETE/UPDATE/MERGE, hidden partitioning, schema evolution, time travel, branches/tags를 제공하며, v3에서는 position-delete 파일 대신 deletion vector(Puffin)를 직접 쓰고 읽습니다 — 모든 운영 기능을 단일 엔진에서. Write-Audit-Publish(WAP)도 지원하여 SET으로 비-main 브랜치에 INSERT/UPDATE/DELETE/MERGE를 스테이징·격리 검증한 뒤 ALTER TABLE EXECUTE fast_forward/cherrypick으로 main에 게시합니다. 또한 Spark 스타일 테이블 유지관리 프로시저(optimize·expire_snapshots·rewrite_manifests·remove_orphan_files·rollback)를 ALTER TABLE EXECUTE로 제공하며, retain_last·min_input_files·dry_run·window_hours 같은 세분 파라미터를 지원합니다(window_hours는 스트리밍으로 쌓이는 소형 파일을 최근 N시간 단위로 증분 컴팩션). Admin UI에서는 테이블별로 작업 토글과 이들 파라미터, 그리고 CRON 스케줄까지 지정해 자동 유지관리를 운영할 수 있습니다.
Lance 커넥터 — 벡터 · 멀티모달 레이크하우스
LanceDB의 Lance 포맷을 1급 카탈로그 커넥터로 통합합니다(벤더 중립 org.lance 계보로 Spark·Trino lance 커넥터와 포맷 호환). 벡터 ANN과 풀텍스트(BM25) 검색을 SQL 함수 vector_search()·match()로 제공하고, 한국어/CJK 풀텍스트는 lindera/ko-dic 형태소 분석을 pylance 사이드카로 처리합니다(기본형 명사 "데이터베이스"가 굴절형 "데이터베이스를"을 매칭). CREATE INDEX(btree·bitmap·ivf·inverted)로 보조·벡터·FTS 인덱스를 만들고, INSERT/CTAS는 워커가 fragment를 쓰고 마스터가 단일 커밋하는 분산 쓰기로, DELETE는 deletion vector, MERGE는 네이티브 upsert(mergeInsert), UPDATE는 엔진 재작성으로 지원합니다. Kafka→Lance 스트리밍 싱크와, 스트리밍에 최적화된 2단계 유지관리(OPTIMIZE 컴팩션 + VACUUM 회수)를 제공하며, OPTIMIZE는 window_hours·cooldown·min_input_files·dry_run으로 "최근 커밋분만" 증분 컴팩션해 전체 테이블을 스캔하지 않습니다(Lance엔 hidden partition이 없어 버전 타임스탬프로 fragment 윈도우를 산출). 비디오·오디오·이미지·문서 같은 비정형 데이터를 Blob V2 컬럼으로 테이블 안에 직접 저장해, 임베딩·메타데이터와 같은 트랜잭션·버전 관리되는 한 행에 함께 둡니다. 검색으로 찾은 그 행에서 원본까지 바로 받을 수 있고, 바이트는 거버넌스(IAM)가 적용된 스트리밍 경로로 엔진을 통해(Python SDK 포함) 구간 단위로 읽어들여 대용량 자산도 접근 제어를 우회하지 않습니다. 멀티-GB 원본은 외부 참조로 두고 임베딩·썸네일 등 파생물만 인라인으로 함께 저장하는 하이브리드 구성도 지원합니다. Apache Polaris Generic Tables를 공유 카탈로그로 사용해 동일한 Lance 테이블을 Spark·Trino와 교차 엔진으로 함께 읽고 쓰며, 컴팩션·정리 후에도 데이터 정합성이 유지됩니다. 시맨틱 리트리버의 backend로도 동작해 RAG 벡터·FTS 검색을 인-엔진으로 수행하며, IAM 컬럼 마스킹·로우레벨 정책이 스캔 출력에 그대로 적용됩니다.
보안 (IAM & KMS)
AES-256-GCM 봉투 암호화, 내장 KMS, Exchange Manager 데이터 암호화, 카탈로그/테이블/컬럼/행 수준 IAM 정책, STS 임시 자격 증명을 지원합니다.
BI 통합 (Tableau · Power BI · Looker)
Arrow Flight SQL JDBC로 Tableau, Power BI, Looker, DBeaver가 라이브 연결합니다. 시맨틱 뷰는 측정값(measure)·디멘전이 자동 분류되어 노출되며, /api/v1/bi/connection-info 엔드포인트가 드라이버 정보와 도구별 설정 가이드를 한 번에 제공합니다.
시맨틱 레이어 — Agentic AI를 위한 단일 진실 공급원
One definition of truth per metric — enforced server-side.
Ontul의 시맨틱 레이어는 에이전트에게 두 가지를 줍니다. ① 숫자(메트릭) — 매출·이익률 같은 분석 정의를 한 번 정의하면 LLM 에이전트·Tableau·분석가가 모두 같은 숫자를 봅니다. ② 관련 컨텍스트(리트리버) — 텍스트나 이미지로 관련 문서를 찾는 멀티모달 검색. 메트릭이 "매출 얼마?"에 답한다면, 리트리버는 "관련 문서 찾아줘"에 답합니다. 에이전트는 한 인터페이스로 둘 다 가져옵니다.
핵심 기능
서버 사이드 쿼리 재작성
SELECT revenue, customer.region FROM sales 한 줄이면 Ontul 플래너가 SUM(amount * (1-discount)) 집계, LEFT JOIN customer ON ..., GROUP BY customer.region을 자동으로 재작성합니다. 클라이언트가 공식을 외울 필요 없습니다.
MCP 기반 메트릭 발견
LLM 에이전트는 ontul_search_metrics, ontul_describe_semantic_view 도구로 매출·revenue·net_revenue·sales_amount 등 다국어 동의어를 통해 메트릭을 찾고 정의를 읽습니다. 한 번 정의된 메트릭은 모든 에이전트가 공유합니다.
파생 메트릭 (Derived Metrics)
profit = revenue - cost, profit_margin = (revenue - cost) / revenue 처럼 다른 메트릭을 참조해 정의합니다. Ontul 플래너가 재귀적으로 풀어주며 순환 참조는 자동 감지합니다.
컨폼드 디멘전 조인
한 번 선언한 조인은 사용될 때만 자동 주입됩니다. SELECT customer.region, revenue 라고 쓰면 LEFT JOIN customer ON ... 가 자동으로 붙고, 미참조 조인은 plan에서 제외되어 비용이 들지 않습니다.
멀티테넌트 강제 필터
뷰 단위 또는 메트릭 단위로 tenant_id = ${user.attr.tenant_id} 같은 강제 필터를 선언합니다. 인증된 사용자 컨텍스트에서 자동 치환되어 BI 대시보드든 LLM 쿼리든 동일한 RLS 정책이 일관되게 적용됩니다.
거버넌스 · RBAC
메트릭별 allowedRoles로 접근 제어, DRAFT → CERTIFIED → DEPRECATED 라이프사이클, 인증자/인증일시 감사, 자유로운 태그를 지원합니다. 재작성 시점에 검증되어 인증되지 않은 사용자에게는 공식조차 노출되지 않습니다.
리트리버 — 한 번에 멀티모달 검색
에이전트가 텍스트나 이미지로 "관련된 것"을 찾을 때 쓰는 검색 객체입니다. 벡터(의미)·키워드(BM25)·그래프(관계)를 NeorunBase에서 한 번에 실행하고, 메트릭과 똑같은 IAM·권한으로 보호됩니다. 에이전트는 SQL을 쓰지 않고 값만 채우면 되고 — 그게 곧 RAG입니다. (HYBRID_SEARCH / GRAPH_NEIGHBORS를 거버넌스되는 retriever 객체로 정의해 Ontul을 통해 푸시다운)
한 줄로 충분합니다
SELECT customer.region, profit_margin
FROM saas.core.sales
WHERE ship_date >= DATE '2024-01-01';SELECT customer.region,
(SUM(amount) - SUM(unit_cost * quantity)) / SUM(amount)
AS profit_margin
FROM saas.core.sales
LEFT JOIN saas.core.customer customer
ON sales.customer_id = customer.id
WHERE ship_date >= DATE '2024-01-01'
AND tenant_id = 'acme-co' -- 자동 RLS
AND status = 'COMPLETED' -- 메트릭별 필터
GROUP BY customer.region;Agentic AI에 어떤 의미인가
환각 방지
메트릭 공식은 한 번만 정의되어 서버에서 강제됩니다. LLM이 SUM(amount) 대신 AVG(amount)를 잘못 추측해도 — 메트릭 이름만 맞으면 — 항상 옳은 집계가 실행됩니다.
권한 자동 전파
에이전트가 보는 메트릭과 행은 사용자의 IAM 정책이 정확히 결정합니다. 별도의 prompt-level 권한 로직이 필요 없고, 우회도 불가능합니다.
다국어 친화
"매출 어떻게 돼?" 같은 한국어 질문도 동의어 매칭으로 즉시 revenue 메트릭을 찾아냅니다. 비즈니스 용어는 팀마다 다르고, 시맨틱 레이어가 그 격차를 메웁니다.
BI · AI 일관성
Tableau에서 보는 revenue 와 LLM 에이전트가 답하는 revenue 는 같은 SQL로 실행됩니다. 두 채널 간 숫자 불일치가 사라집니다.
활용 사례
통합 데이터 처리
별도의 배치/스트리밍/쿼리 클러스터 없이 하나의 Ontul 클러스터로 모든 데이터 워크로드를 처리합니다.
AI 에이전트 분석
LLM 에이전트가 MCP 도구로 메트릭을 발견하고 자연어 쿼리를 Ontul SQL로 변환합니다. 시맨틱 레이어가 집계·조인·IAM을 자동 처리해 환각 없이 검증된 비즈니스 정의로 답합니다.
실시간 데이터 파이프라인
Kafka에서 데이터를 수집하여 Ontul에서 처리 후 Iceberg 테이블로 적재하는 실시간 ETL 파이프라인을 구축합니다.
데이터 레이크 분석
Iceberg, JDBC 등 다양한 소스에 걸친 페더레이션 쿼리로 통합 분석을 수행합니다.
분석 + RAG를 한 백엔드로
별도의 시맨틱 분석 도구와 벡터·그래프 검색 스택을 따로 운영하지 않고, 메트릭(분석)과 리트리버(멀티모달 검색)를 한 엔진·한 거버넌스로 묶습니다. 에이전트가 한 MCP 세션에서 "숫자"와 "관련 근거"를 함께 가져옵니다.
