대규모 데이터 분석 NL2SQL
NL2SQL for Large-Scale Data Analysis
Customer Problem Solving Case 2
“동적 패턴 캐싱과 자가 수정 루프를 적용한 안정적인 쿼리 엔진”
“Stable Query Engine applying Dynamic Pattern Caching and Self-Correction Loop”
현업 부서에서 BigQuery 데이터를 자연어로 조회할 때 발생하는 LLM 추론 지연과 문법 오류(Syntax Error)를 개선하여, 안정적인 런타임 서비스를 제공하기 위한 아키텍처 설계 사례입니다.
1. Need: 도입 배경
1. Need: Background
기획 및 마케팅 부서에서 대용량 데이터를 기반으로 의사결정을 내릴 때, SQL 작성 및 데이터 추출에 시간이 소요되는 병목 현상이 있었습니다.
현업의 자연어 질의를 SQL로 변환하여 데이터를 조회하고 시각화할 수 있는 NL2SQL(Natural Language to SQL) 솔루션 도입이 필요했습니다.
2. Problem Definition: 문제 정의
2. Problem Definition: Problem Statement
단순 프롬프트만으로 LLM에 SQL 변환을 요청할 경우, 복잡한 데이터베이스 스키마를 잘못 해석하여 실행 불가능한 쿼리(Syntax Error)가 자주 발생했습니다.
또한, 모든 질의에 대해 LLM API를 호출하게 되면 응답 지연 및 비용 증가의 원인이 되었습니다.
3. Key View: 접근 방식
3. Key View: Approach
생성된 SQL 실행 시 에러가 발생하면, 해당 에러 메시지를 기반으로 LLM이 쿼리를 자체 수정하는 자가 수정(Self-Correction) 루프를 구현했습니다.
또한, LLM API 호출을 최적화하기 위해 성공적인 SQL 변환 패턴을 캐싱하고, 유사한 질의에 대해서는 LLM을 거치지 않고 변수만 치환하여 처리하는 동적 패턴 매칭(Dynamic Pattern Caching) 방식을 적용했습니다.
4. Design / Framing: 아키텍처 설계
4. Design / Framing: Architecture Design
FastAPI 서버가 사용자 요청을 수신하면, 먼저 Redis 기반의 유사도 캐시를 조회하여 일치하는 패턴이 있을 경우 즉시 응답하고, 없을 경우에만 LLM에 쿼리 생성을 요청합니다.
LLM이 생성한 쿼리가 BigQuery에서 실행 실패하면, Validator가 실패 원인을 분석하여 LLM에게 쿼리 재작성을 요청합니다. 이러한 구조를 통해 서비스의 실행 안정성을 확보했습니다.
5. Impact: 적용 결과
5. Impact: Results
해당 아키텍처를 통해 데이터 분석의 병목 현상을 해소하고, 효율적인 데이터 활용 환경을 구축할 수 있었습니다.
-
✓
서비스 안정성 확보 초기 생성된 SQL에 오류가 있더라도, Self-Correction 루프를 통해 최종적으로 유효한 데이터를 사용자에게 제공합니다.
-
✓
처리 효율 최적화 반복적인 조회 요청을 캐시 레이어에서 처리하여 LLM API 호출 횟수를 줄이고 응답 속도를 개선했습니다.