DevLog

엔지니어링 블로그를 한 곳에서 탐색하고, 최근 발행 흐름을 빠르게 파악할 수 있는 서비스 입니다.

Quick Links

  • Latest Feed
  • Engineering Directory

Support

  • 소개
  • 개인정보처리방침

Contribute

  • 원하는 블로그 추가 (준비 중)
  • Feedback

© 2026 DevLog Inc. All rights reserved.

본 사이트는 공개 RSS 피드를 통해 콘텐츠를 수집하며, 모든 콘텐츠의 저작권은 원저작자에게 있습니다.

Back to Feed
Read Original

Contents

Continue Reading

  • More from 아임웹
  • Related reads#LLM
#Backend

AI가 쓴 SQL을 안전하게 쓰는 법

AI가 쓴 SQL을 안전하게 쓰는 법
01

Summary

AI가 제멋대로 쓴 위험천만한 SQL, 데이터베이스 직전 방어벽으로 완벽히 통제하기

아임웹이 LLM의 불안정한 환각을 제어하고 안전한 프로덕션급 Text-to-SQL 파이프라인을 구축한 실전 아키텍처

본 아티클은 비전문가 판매자가 대화형 인터페이스를 통해 직접 쇼핑몰 데이터를 자연어로 조회할 수 있도록 돕는 AI 통계 에이전트의 개발 비하인드를 설명합니다. AI를 맹신하는 대신 엄격히 격리하고 통제하는 백엔드 아키텍처 설계를 제시하며, 비결정적인 결과물을 결정론적으로 방어하는 다양한 정적 검증 도구와 시스템 설계 방안을 다룹니다. 도메인 지식 주입부터 AST 파서 기반의 3단계 가드레일, 그리고 자가 수정 루프까지 실무 데이터 보안에 즉시 적용 가능한 완성도 높은 파이프라인을 보여줍니다.

  • 01'판단(두뇌)'과 '실행(도구함)'의 논리적 경계를 분리하여, 새로운 진입로가 생겨도 데이터를 안전하게 보호하는 단일 관문 구축
  • 02PostgreSQL과 pgvector 기반의 지식 베이스를 이식하여 매출의 엄밀한 정의 등 복잡한 도메인 지식을 코드가 아닌 데이터 형태로 동적 관리
  • 03정규식을 우회하는 변종 쿼리를 막기 위해 AST 구문 파서를 도입하여 존재·정책·모양 세 측면에서 안전성을 철저하게 차단
  • 04검증 통과 실패 시 구체적인 디버깅 정보를 피드백하여 LLM이 스스로 코드를 보완하도록 돕는 자가 수정(Repair) 메커니즘 제공
  • 05대표 질문 100여 개가 담긴 골든셋과 LLM 심사위원을 활용한 회귀 평가 배치를 통해 시스템 변경 시 안정성 통과율을 80%대까지 확보

+RECOMMENDATION

사용자가 작성한 자연어를 코드로 변환하거나, 안전성이 철저하게 담보되어야 하는 LLM 기반 어플리케이션을 준비 중인 엔지니어에게 적극 추천합니다. 특히 백엔드 수준에서 비결정적인 AI 모델의 결과 값을 효과적으로 제어 및 가두는 엔지니어링 전략을 설계할 때 훌륭한 레퍼런스가 될 것입니다.

The Problem

사용자가 입력한 자연어 질문을 기반으로 LLM이 실시간으로 SQL을 자동 생성해 실행하는 시스템에서는, AI가 존재하지 않는 컬럼을 지어내는 환각 현상이나 악의적이거나 비효율적인 쿼리를 실행하는 물리적 보안 위험이 수반됩니다. 쿼리의 고정된 구조 없이 전체 구조가 실시간으로 변환되므로, 단순 입력값 검증을 넘어 쿼리 전체의 구조적 신뢰성과 도메인 규칙 준수 여부를 검사해야 하는 과제가 존재합니다.

The Solution

판단(두뇌)과 실행(도구함)을 아키텍처적으로 분리하여 보안 레이어를 데이터 통로 바로 앞에 배치하고, pgvector 기반 DB를 이용해 비즈니스 지식을 프롬프트에 동적으로 주입했습니다. 생성된 SQL은 실행 직전에 AST(구문 트리) 파서를 통해 테이블 존재 여부, 테넌트 격리 정책, 조작 방지 규칙 등 3단계의 엄격한 보안 게이트를 거치며, 검증 위반 발생 시 에러 피드백을 통해 모델이 스스로 수정하도록 하는 최대 2회의 자가 수정(Repair) 루프를 적용했습니다.

The Result

테넌트 격리 실패, 비효율적인 풀스캔, NULL 연산 및 0 나눗셈 에러, 한글 식별자 환각 등 프로덕션 장애 요소를 실행 전에 선제적으로 차단했습니다. 100여 개의 대표 질문으로 구성된 골든셋 데이터와 LLM 판정기(Judge)를 이용해 배포 시마다 자동화된 품질 회귀 평가를 실행한 결과, 전체 파이프라인의 안전 통과율을 초기 67%에서 80% 안팎까지 향상시켰습니다.

Trade-off

검증용 게이트가 강력해짐에 따라 정상적인 출력 결과 라벨을 환각 컬럼으로 잘못 판단하여 차단하는 오탐(False Positive) 버그가 발생하여 예외 처리가 필요해졌습니다. 또한, SQL 문법과 컬럼 매칭은 유효하지만 비즈니스 공식이나 도메인 로직이 어긋나 결과의 유효성만 손상되는 '조용한 실패'의 경우 사전 정적 분석 게이트만으로는 완벽히 제어하기 어려운 구조적 한계가 존재합니다.

03

Key Concepts

Concept · 01

Text-to-SQL

사용자가 입력한 자연어 질의(Plain Text)를 이해하고 이를 관계형 데이터베이스에서 직접 실행 가능한 표준 SQL 문으로 변환하는 변환 기술입니다. 데이터 접근을 민주화하고 별도의 개발 공수 없이 원하는 정보에 바로 도달하게 돕는 AI 기반 인터페이스의 핵심 요소입니다.

  • 아임웹 어드민 챗에서 판매자의 '지난달 재구매율이 어땠지?'와 같은 일상어 질문을 시스템 쿼리로 변환하는 단일 소통 경로에 적극 도입되었습니다.
Concept · 02

AST (Abstract Syntax Tree) Parser

텍스트 형태의 소스코드나 SQL 쿼리를 프로그래밍 언어의 구문 구조에 맞게 트리 계층 구조로 변환하여 분석할 수 있게 하는 컴파일러/파서 기술입니다. 정규식이 탐지하지 못하는 쿼리 변종이나 교묘한 패턴 우회를 실제 구조 분석을 통해 완벽히 가려낼 수 있습니다.

  • 사용자가 요청한 쿼리의 테이블 존재 검증, 테넌트 식별자 격리 규칙 강제, DELETE/DROP 등의 파괴적 키워드를 정적 검회하여 실행 전에 미리 차단하는 3단계 검증 시스템으로 쓰였습니다.
Concept · 03

pgvector

오픈소스 PostgreSQL 데이터베이스 환경에서 다차원의 벡터 데이터를 직접 저장하고 코사인 유사도 검색 등을 손쉽게 쿼리할 수 있도록 돕는 전용 확장 플러그인입니다. LLM과 지식창고를 연동하는 RAG(검색 증강 생성) 흐름에서 가장 대중적으로 활용되는 백엔드 스택입니다.

  • 주문 금액 정의, 회원 식별 기준 등 아임웹 고유의 비즈니스 지식들을 임베딩해 'query_knowledge_base' 테이블에 넣어 두고, 자연어 질문과 매칭되는 도메인 규칙을 실시간으로 가져오는 데 활용되었습니다.
Continue reading · same source

아임웹More from 아임웹

View all posts from 아임웹
  • VPC Lattice 기반 서비스 네트워크 재설계와 비용 최적화 사례

    VPC LatticeAWSKubernetes
    1주 전
  • 963초짜리 쿼리 하나가 HLL 205만까지 끌어올렸습니다

    Aurora MySQLMVCCHLL
    2주 전
  • 1. 통과하는 테스트 뒤에 숨어 있던 것들

    TypeScriptTestcontainersWireMock
    3주 전
  • 2. 유스케이스를 격리하고 의존성을 나누어 Lint로 규칙 세우기

    TypeScriptESLintNestJS
    3주 전
  • 보안 계정을 처음부터 다시 설계했습니다.

    AWSOktaTransit Gateway
    1개월 전

Related reads#LLM

Explore #LLM
올리브영·MCP

프롬프트를 쓰는 PM과 AI를 이해시키려는 개발자

#LLM1일 전
라인

LLM Wiki: 코드 기준으로 자동 최신화되는 도메인 지식 SSOT 만들기

#LLM2일 전
무신사

AI Native 조직은 도메인 지식을 어떻게 공유하는가

#LLM5일 전
채널 톡

채널톡이 글로벌 상담 Agent를 GPT-5.6 Luna로 갈아탄 이유

#LLM5일 전
여기어때·Grafana

SRE 업무에 AI 녹여내기 — 2편: Alert Adviser로 장애 원인 분석 자동화

#LLM6일 전

Source

아임웹
아임웹
Engineering Blog

Published · June 22, 2026

Topics

LLMText-to-SQLSQL-ParserDatabase-Securitypgvector