본문으로 건너뛰기

하루 만에 LLM 기반 데이터베이스 질의 봇 만들기

스키마를 LLM에 제공하고 run_query 도구로 읽기 전용 SQL을 실행해 결과를 반환하는 실무 가이드

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

이 글은 LLM에 데이터베이스 스키마를 제공해 자연어 질의를 자동으로 SQL로 변환하고 read-only로 실행해 결과를 사람이 읽기 쉬운 문장으로 반환하는 내부용 질의 봇 아키텍처를 제안한다. 핵심은 run_query 같은 단일 도구 호출 인터페이스를 통해 모델과 DB 실행 지점을 분리하고, DB 수준의 읽기 전용 권한과 프롬프트 내 민감정보 금지 규칙으로 안전성을 확보하는 것이다. 비용 절감을 위해 스키마 정리, 투패스 축약, 쿼리 및 프롬프트 캐싱을 권장하며, 작성자는 이 프로토타입을 하루 만에 구현했다고 밝힌다.

섹션별 상세

고객지원팀이 개발자에게 의존해 간단한 데이터 조회에도 시간이 소요되던 문제를 해결하기 위해 내부용 채팅 인터페이스를 도입했다. 사용자 질의는 영어 자연어로 입력되며 시스템은 해당 질의를 SQL로 변환해 읽기 전용으로 실행하고 결과를 사람이 이해하기 쉬운 문장으로 되돌려준다. 작성자는 이 전체 파이프라인을 LLM에 스키마를 제공하고 단일 도구(run_query)를 노출하는 구조로 구현해 하루 만에 프로토타입을 완성했다고 적었다.
관리자용 채팅 인터페이스의 스크린샷으로, 사용자 질의를 입력하고 AI가 응답을 생성하는 흐름을 시각화하고 있다.
Screenshot이미지는 내부용 챗 UI가 어떻게 보일지 보여주며 질의 입력박스와 추천 예제 버튼이 포함되어 있다. 이 시각적 예시는 글에서 설명한 프론트엔드가 단순히 텍스트를 받아 백엔드로 전달하고 결과를 다시 표시하는 구조임을 직관적으로 전달한다. 실제 구현 시 사용자 권한 표시나 쿼리 실행 기록을 추가해야 하는 운영 고려사항을 떠올리게 한다.
입력 필드에 자연어 질의가 타이핑되는 과정을 캡처한 GIF로, 사용자가 질문을 보내는 UX 흐름을 보여준다.
Screenshot이 이미지도 프론트엔드 상호작용을 강조하며, 메시지 전송 아이콘과 텍스트 상자가 함께 보인다. 이미지 자체는 구현 세부를 담고 있진 않지만 운영자가 어떤 식으로 질의를 입력하고 전송할지 감을 잡는 데 도움이 된다. 보안·권한 경고나 실행된 쿼리의 미리보기 같은 추가 UI 요소가 없음을 통해 기본 프로토타입임을 알 수 있다.
근거
  • 전체 구현은 하루 만에 가능했다. 저자가 'All in all, the entire implementation took one day'라고 직접 기술한 문장과 개발자가 AI가 코드를 많이 작성해 준 덕분이라고 밝힌 서술.
핵심 통찰은 LLM이 데이터베이스 스키마를 컨텍스트로 제공받으면 SQL을 정확히 생성하는 능력이 뛰어나다는 점이다. 글에는 pg_dump로 스키마를 추출해 모델에 업로드하고 간단한 질의를 시도해보면 80% 정도가 바로 작동한다는 실무적 체크리스트가 포함되어 있다. 이런 접근은 개발자가 직접 쿼리를 작성하지 않아도 비기술직 사용자가 생산 DB에서 필요한 정보를 얻을 수 있게 해 운영 병목을 줄인다.
bash
pg_dump -W --schema-only mydatabase > schema.sql

이 명령은 데이터베이스의 스키마만 추출해 파일로 저장하는 초간단 절차를 수행한다. 스키마 파일을 LLM에 제공하면 테이블 구조와 컬럼 타입을 모델이 참고하므로 잘못된 컬럼명을 사용한 쿼리 생성 확률이 떨어진다. 운영 비용을 낮추려면 인덱스·제약·주석 같은 불필요한 메타데이터를 제거해 전달하는 것이 권장된다.

근거
  • LLM은 데이터베이스 스키마를 제공하면 SQL을 정확히 생성할 수 있다. 글의 핵심 통찰 섹션과 실행 예시: pg_dump로 스키마 추출 후 Claude/ChatGPT에 업로드해 'Write a query to find all users who signed up last week' 같은 질의를 테스트하라고 권장함.
아키텍처는 도구 호출 패턴을 사용하며 핵심은 run_query라는 단일 함수 인터페이스다. AI에게 스키마, 도구 설명, 안전 규칙, 예제 질의를 함께 보내면 모델이 SQL을 생성해 run_query를 호출하고 시스템이 쿼리를 실행한 뒤 결과를 다시 LLM에게 보내 형식화하게 된다. 이 분리로 쿼리 실행 지점을 통제하고 로깅·권한·검증을 중앙에서 수행할 수 있어 운영 환경에서의 투명성과 추적 가능성이 높아진다.
sql
SELECT s.id, s.title, s.price_currency, s.price, s.store_id FROM public.listings_list s WHERE s.active = 1 AND s.visibility = 1 AND s.state = 0 ORDER BY s.price DESC NULLS LAST LIMIT 5

이 쿼리는 현재 유효한 목록 중 가격 상위 5건을 추출하는 예시로, run_query 도구에 전달될 형태를 보여준다. 프롬프트 예제에서는 모델이 스키마를 참고해 정확한 테이블명과 컬럼명을 사용하도록 유도하며 결과는 다시 LLM에 의해 사람이 읽기 쉬운 문장으로 포맷된다. 실무에서는 LIMIT와 정렬 기준, NULL 처리 등 세부 조건을 명확히 하는 것이 중요하다.

sql
WITH spans AS ( SELECT a.id, a.created, (a.created + (a.duration || ' hours')::interval + a.extra_time) AS ends_at FROM public.auctions_auction a ) SELECT COUNT(*) AS count FROM spans WHERE now() >= created AND now() < ends_at

경매가 현재 진행 중인지 계산하려면 created와 duration, extra_time을 합쳐 ends_at을 만든 뒤 now()와 비교하는 패턴이 필요하다. 이 WITH 절 예시는 비즈니스 로직을 SQL로 직접 표현해 모델에게 복잡한 상태 계산을 맡길 때 유용한 템플릿 역할을 한다. 프롬프트에는 이런 비즈니스 규칙을 사전에 명시해야 모델이 올바른 집계와 필터를 생성한다.

프로덕션 데이터에 대해 여러 안전 장치를 적용했으며 그 핵심은 DB 수준의 read-only 사용자 생성, 프롬프트 수준의 민감정보 비노출 규칙, 실행 전 쿼리 검증이다. 권한은 애플리케이션 레벨이 아니라 Postgres 권한으로 강제해 실수로 데이터가 변경되는 위험을 낮췄고, 모델에게는 비밀번호·토큰·해시를 절대 반환하지 못하게 명시적으로 지시했다. 또한 초기에는 SELECT만 허용하는 정책을 적용해 공격 표면과 사고 리스크를 축소했다.
근거
  • 운영 환경에서는 DB 수준의 읽기 전용 권한, 프롬프트 제한, 쿼리 검증 같은 안전 장치가 필요하다. Safety Measures 섹션에서 read-only DB 사용자 생성, 프롬프트 내 민감정보 비공개 지시, SELECT 전용 허용 등 구체적 조치를 나열한 부분.
비용 최적화 관점에서는 스키마 전송량과 모델 호출 횟수를 줄이는 전략이 제시되어 있다. 스키마 덤프에서 불필요한 메타데이터를 제거하고, 첫 패스에서 관련 테이블만 식별한 뒤 두 번째 패스에서 축약된 스키마만 제공하는 투패스 접근이 대표적이다. 여기에 생성된 쿼리 캐싱이나 프롬프트 캐싱을 결합하면 반복되는 질의에 대한 토큰 비용을 크게 낮출 수 있다는 실용적 제안이 포함되어 있다.

용어 해설

run_query 도구(run_query)
LLM이 생성한 SQL 문자열을 전달받아 데이터베이스에서 읽기 전용으로 실행하고 결과를 반환하는 단일 함수 인터페이스를 가리킨다. 입력은 SQL 쿼리 하나뿐이고 출력은 행/열 형태의 결과이므로 AI와 외부 DB 간 호출 표준을 단순화한다. 이 방식은 모델이 직접 DB를 수정하지 못하도록 제약을 걸고 호출·로깅 지점을 중앙화하기 때문에 운영 환경에서 안전성을 높인다.
스키마 덤프(schema.sql)
pg_dump 같은 도구로 데이터베이스 스키마만 추출한 파일로, 테이블·컬럼·타입 정보를 LLM에 제공해 정확한 SQL 생성 품질을 높인다. 불필요한 인덱스·제약·주석을 제거하면 컨텍스트 길이를 크게 줄여 토큰 비용을 절감할 수 있다. 질문에 필요한 테이블만 골라 재전송하는 방식으로 비용과 응답 속도를 개선할 여지가 있다.
프롬프트 수준 제한 규칙(Prompt-level restrictions)
AI에게 허용되는 쿼리 패턴과 금지 항목을 명시하는 규칙 셋으로, 예컨대 SELECT만 허용하고 비밀번호·토큰·해시 같은 민감정보를 절대 반환하지 못하도록 지시한다. 모델이 DB 스키마와 함께 이 규칙을 받으면 생성된 SQL의 안전성과 적합성이 향상된다. 운영 단계에서는 프롬프트와 실행 전후의 검증을 결합해 방어 깊이를 늘릴 필요가 있다.
투패스 접근(Two-pass approach)
첫 번째 패스에서 질의와 연관된 테이블 목록만 식별하고 두 번째 패스에서 해당 테이블들만 포함한 축약된 스키마로 정교한 SQL을 생성하게 하는 전략이다. 전체 스키마를 매번 전송하는 대신 관련 범위를 좁혀 토큰 사용량과 비용을 줄인다. 자주 묻는 질문 패턴이 반복될 때 캐싱과 결합하면 비용 효율성이 크게 개선된다.

기술

  • PostgreSQL
  • pg_dump
  • Claude
  • ChatGPT

활용 사례

  • 고객지원팀이 간단한 사용자·주문·리스트 조회를 직접 수행하도록 하여 개발자 의존도를 낮출 수 있다. 자연어로 질의를 입력하면 시스템이 SQL을 생성해 결과를 반환하므로 비기술직도 데이터 접근성이 개선된다. 이 방식은 실시간 운영 데이터 확인이나 빠른 지표 확인에 유용하다.
  • 비즈니스 규칙이 복잡한 집계나 상태 계산을 LLM이 생성한 SQL로 자동화해 시간 소모적인 수동 조사를 줄일 수 있다. 예를 들어 경매의 진행 여부나 특정 카테고리의 활성 리스팅 집계처럼 여러 컬럼을 계산해 판단해야 하는 작업에 적합하다. 다만 민감정보는 반환하지 않도록 규칙을 엄격히 적용해야 한다.
  • 자주 반복되는 조회 패턴을 캐싱하면 호출 비용을 줄이고 응답 시간을 개선할 수 있다. 스키마 축소와 투패스 접근을 결합하면 토큰 사용량을 상당히 낮출 수 있으며, 운영 모니터링·리포트용 쿼리 템플릿으로 활용하면 효율성이 올라간다.
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 06.수집 2026. 08. 06.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.