PROJECT: AI DATA ACCESS PLATFORM
┌──────────────────────────────────────────┐ │ PROJECT: AI DATA ACCESS PLATFORM │ └──────────────────────────────────────────┘
kwt@portfolio:~/projects/query-store$ describe
AI Data Access Platform
Dataroom Service / Query Store
운영 Aurora MySQL과 분리된 Data DB를 기반으로 자연어 데이터 요청을 안전한 SQL 질의와 Excel 리포트로 변환하는 AI 데이터 접근 플랫폼 구축 프로젝트입니다. 단순한 NL2SQL 도구가 아니라, Data DB 분리, snapshot/freeze 우선 조회, masked view, SQL 검증 Hook, Excel 자동화, Human-in-the-loop 정책까지 포함한 안전한 AI workflow로 설계했습니다.
- 기간
- 2026.04 ~ 진행 중
- 역할
- 설계 및 개발 / 백엔드 1인
- 상태
- Core 구현 완료, MCP 클라이언트 온보딩 별도 단계
Problem
기존 데이터 추출 업무는 개발자가 요청을 해석하고 SQL을 작성한 뒤 운영 DB에서 직접 조회하고, CSV 또는 Excel로 수작업 가공해 전달하는 방식이었습니다. 이 방식은 반복 비용이 크고, 기준 시점이 불명확하며, 운영 DB 부하와 민감정보 노출 리스크가 함께 존재했습니다.
Architecture
운영 Aurora MySQL -> dump 기반 초기 적재 / Aurora MySQL binary log replication -> Data DB -> mart / snapshot / freeze -> Query Store -> LLM SQL Candidate -> SQL Validation Hook -> Sample Query / EXPLAIN Review -> Query Executor -> Result Mapper -> Excel Report
Execution Flow
전체 흐름은 데이터를 분리하는 계층, LLM이 후보를 생성하는 계층, 시스템이 검증하고 실행하는 계층으로 나뉩니다. 이 구분이 있어야 AI가 운영 데이터에 직접 접근하지 않고도 업무 산출물까지 만들 수 있습니다.
Data Isolation
운영 Aurora MySQL에서 dump 기반 초기 적재와 Aurora MySQL binary log replication으로 Data DB를 분리합니다.
Snapshot First
mart / snapshot / freeze 데이터를 우선 사용해 기준 시점이 고정된 리포트를 재현 가능하게 만듭니다.
Intent To SQL
자연어 요청을 도메인 사전, WHERE Rule, 데이터 우선순위에 맞춰 SQL 후보와 실행 조건으로 분해합니다.
Safety Gate
SQL 검증 Hook, masked view, allowlist, LIMIT 샘플, EXPLAIN 점검으로 실행 가능 범위를 통제합니다.
Business Output
검증된 결과만 실행하고 Result Mapper를 거쳐 업무용 Excel 산출물과 실행 이력을 남깁니다.
guardrail chain
What I Built
- - dataroom-service: Spring Boot / Spring AI 기반 MCP Server와 일반 웹 클라이언트용 API 제공
- - Query Store: 자연어 요청을 인터뷰, LLM SQL 후보 생성, SQL 검증 Hook, 샘플 검증, 본 실행, 결과 저장, PR 이력화 흐름으로 표준화
- - Data DB 분리: 운영 Aurora MySQL과 AI/분석 조회 환경을 분리하기 위한 데이터 전용 Aurora MySQL 클러스터 구성
- - Aurora MySQL binary log replication: dump 기반 초기 적재 이후 운영 데이터를 Data DB에 동기화하는 구조 적용
- - Masked View / AI 전용 계정: 민감 데이터가 LLM에 직접 전달되지 않도록 계정, 권한, 조회 가능한 view를 분리
- - Excel 자동화: 조회 결과를 업무용 Excel 산출물로 생성해 반복 보고서 작성 과정을 줄임
Query Safety Gate
- - 운영 DB 직접 조회를 기본 경로에서 제외하고 mart / snapshot / freeze 계층을 우선 조회
- - 테이블 allowlist, 컬럼 allowlist, Masked View, AI 전용 계정으로 접근 범위 제한
- - SQL 검증 Hook에서 SELECT only, 금지 구문, 날짜 조건, 집계 조건, JOIN 조건, LIMIT 조건을 점검
- - live table fallback은 제한된 조건 규칙과 LIMIT 기반 샘플 확인, EXPLAIN 기반 실행 계획 점검 이후에만 사용
- - 중요 사업보고, 외부 제출 자료, 재무/정산 영향도가 큰 추출은 Human-in-the-loop 원칙으로 개발자 검토 유지
Context Engineering
LLM이 DB 스키마나 비즈니스 용어를 임의로 추론하지 않도록, 필요한 도메인 지식을 문서와 규칙으로 구조화했습니다. 이 프로젝트에서의 핵심은 프롬프트 한 줄이 아니라, LLM이 참조할 수 있는 안정적인 실행 컨텍스트와 Agent Harness를 만드는 것이었습니다.
- - Domain Dictionary: 비즈니스 용어를 DB 컬럼과 조건으로 매핑
- - WHERE Rule Dictionary: 지난달, 운영중 충전소, 유효 거래 등 반복 조건을 표준 SQL fragment로 정리
- - Data source priority: live table보다 mart / snapshot / freeze 데이터를 우선하는 조회 정책 정의
- - Schema / caveat 문서: 컬럼 의미, 코드값, 단위, 해석 한계를 LLM 컨텍스트로 제공
Implemented / Extension
포트폴리오에서는 구현 완료 범위와 확장 설계를 분리해서 표현합니다. Query Store, Data DB 분리, Aurora MySQL binary log replication, masked view, SQL 검증 Hook, LLM SQL 후보 생성, Excel 자동화는 구축 완료 범위입니다.
- - dataroom-service의 MCP Server 구현은 완료했으며, Claude, Cursor, ChatGPT 등 외부 AI 클라이언트 온보딩은 별도 적용 단계로 분리
- - Multi-LLM Reviewer는 보안 차단 수단이 아니라 SQL 의도 불일치와 논리 오류를 보조 검토하는 확장 설계로 정의
- - 보안 차단은 rule-based validator와 권한 분리, masked view, allowlist가 담당하고 최종 실행은 시스템이 통제
Before / After
Before
- - 사용자가 개발자에게 데이터 추출 요청
- - 개발자가 SQL 작성 후 운영 DB 직접 조회
- - CSV 추출 후 Excel 수작업 편집
- - 기준 시점과 재현성이 요청마다 달라질 수 있음
After
- - 사용자가 자연어로 데이터 요청
- - Query Store가 도메인 컨텍스트 기반으로 SQL 후보 생성
- - SQL 검증 Hook과 샘플 확인을 거친 뒤 실행
- - 결과를 업무용 Excel 산출물로 자동 생성
Positioning
이 프로젝트에서 AI는 모든 권한을 가진 실행자가 아니라 의도 해석과 후보 생성을 담당합니다. 시스템은 권한, 검증, 실행, 감사 가능성, 성능, 산출물 생성을 통제합니다. 목표는 AI를 단발성 생산성 도구가 아니라 반복 가능한 업무 자동화 시스템의 일부로 설계하는 것입니다.