핵심 요약
데이터베이스의 복잡한 SQL 문법은 데이터 접근의 장벽이 되지만, LLM을 활용하면 자연어 질문만으로 쿼리를 자동 생성할 수 있다. 이 글은 MS SQL Server를 기반으로 Python을 사용하여 데이터베이스 스키마를 자동으로 추출하고 이를 LLM에 컨텍스트로 제공하는 방법을 다룬다. 특히 토큰 효율적인 Markdown 형식을 활용한 스키마 전달과 T-SQL 전용 프롬프트 엔지니어링 기법을 통해 생성 정확도를 높이는 과정을 상세히 기술한다. 최종적으로는 로컬 LLM인 Ollama나 OpenAI API를 선택적으로 사용하여 실무에 적용 가능한 쿼리 생성기를 완성한다.
배경
Python 3.11 이상, MS SQL Server 접근 권한, OpenAI API Key 또는 Ollama 설치, 기본적인 SQL 및 Python 지식
대상 독자
LLM을 데이터베이스 인터페이스에 통합하려는 데이터 엔지니어 및 백엔드 개발자
의미 / 영향
이 방식은 비전문가가 데이터에 직접 접근할 수 있는 데이터 민주화를 가속화하며, 복잡한 스키마를 가진 기업용 데이터베이스에서도 LLM 기반 인터페이스를 저비용으로 신속하게 구축할 수 있게 한다.
섹션별 상세
def format_schema_for_llm(self, target_tables: Optional[List[str]] = None) -> str:
tables = self.get_tables(include_tables=target_tables)
schema_description = "# Database Schema (MSSQL)
"
for table in tables:
schema = self.get_table_schema(table)
fks = self.get_foreign_keys(table)
schema_description += f"## Table: {table}
"
schema_description += "Columns:
"
for col in schema['columns']:
pk_marker = " (PRIMARY KEY)" if col['name'] in schema['primary_keys'] else ""
nullable = "NULL" if col['nullable'] else "NOT NULL"
schema_description += f"- {col['name']}: {col['type']} {nullable}{pk_marker}
"
if fks:
schema_description += "
Foreign Keys:
"
for fk in fks:
schema_description += f"- {fk['column']} → {fk['references_table']}.{fk['references_column']}
"
return schema_description데이터베이스 스키마 정보를 LLM이 이해하기 쉬운 Markdown 형식으로 변환하는 핵심 로직
def create_system_prompt(self, schema: str, dialect: str = "postgresql") -> str:
return f"""You are an expert T-SQL (Microsoft SQL Server) query generator.
Database Schema: {schema}
Rules:
1. Generate ONLY the SQL query. No explanations.
2. Use proper JOIN syntax and table aliases.
3. Use TOP for limiting results instead of LIMIT.
4. For temporal queries, use YEAR(order_date) = YEAR(GETDATE()).
"""T-SQL 문법 규칙과 스키마를 포함한 LLM 시스템 프롬프트 구성
실무 Takeaway
- 데이터베이스 스키마를 Markdown 형식으로 구조화하여 전달하면 LLM의 컨텍스트 이해도를 높이고 토큰 비용을 최적화할 수 있다.
- SQL 생성 작업에서는 temperature를 0.1 이하로 설정하여 모델의 환각 현상을 줄이고 구문 정확성을 확보해야 한다.
- 특정 SQL Dialect의 문법 오류를 방지하기 위해 시스템 프롬프트에 명시적인 제약 조건과 예시를 포함하는 것이 필수적이다.
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.