Text-to-SQL
IT 위키
더 많은 작업
Text-to-SQL(TEXT2SQL, NL2SQL)은 사용자가 자연어로 한 질문을 데이터베이스가 실행할 수 있는 SQL 질의문으로 바꾸어, SQL 을 모르는 사람도 데이터를 조회할 수 있게 하는 기술이다.
"지난달 서울 지점 매출 상위 5개 상품은?" 같은 질문을 받으면, 시스템은 데이터베이스 스키마(테이블·컬럼·관계)를 참고해 다음과 같은 SQL 을 만들고 실행해 결과를 돌려준다.
SELECT p.name, SUM(s.amount) AS total FROM sales s JOIN product p ON s.product_id = p.id WHERE s.branch = '서울' AND s.sold_at >= '2026-09-01' AND s.sold_at < '2026-10-01' GROUP BY p.name ORDER BY total DESC LIMIT 5;
초기에는 규칙·템플릿과 의미 파싱으로 접근했고, 이후 시퀀스-투-시퀀스 신경망을 거쳐, 지금은 대형 언어 모델(LLM)이 스키마 설명과 예시를 받아 SQL 을 생성하는 방식이 주류다.
| 단계 | 내용 |
|---|---|
| 질의 이해 | 질문의 의도, 조건, 집계·정렬 요구를 파악한다 |
| 스키마 연결(Schema Linking) | 질문의 낱말을 실제 테이블·컬럼·값에 대응시킨다. 대형 스키마에서는 관련 테이블만 골라 넣는다 |
| SQL 생성 | LLM 이 스키마·예시 질의(few-shot)를 담은 프롬프트로 SQL 을 만든다. 업무 용어 사전과 예시를 검색해 넣으면(RAG) 정확도가 오른다 |
| 검증·교정 | 문법 검사와 실행 시험, 오류 메시지를 다시 넣어 고치는 자기 교정, 결과 행 수·값의 타당성 확인 |
| 실행·응답 | 읽기 전용 계정으로 실행하고, 결과를 표·차트·자연어 요약으로 돌려준다 |
- 셀프서비스 BI·사내 데이터 조회 — 현업 담당자가 대시보드에 없는 지표를 자연어로 바로 묻는다. 데이터 팀에 보내던 단순 추출 요청이 줄어든다
- 고객 상담·업무 챗봇 — 상담원이나 고객이 "내 최근 3개월 결제 내역" 같은 질문을 하면 챗봇이 계정 범위 안의 데이터를 조회해 답한다
- 데이터 분석 보조 — 분석가가 초안 SQL 을 받아 고쳐 쓰고, 복잡한 조인·윈도 함수 작성 시간을 줄인다
- 공공 데이터 개방 — 시민이 통계 데이터베이스를 자연어로 검색한다
| 과제 | 대응 |
|---|---|
| 모호한 질문·업무 용어("매출"이 공급가인지 부가세 포함인지) | 비즈니스 용어 사전, 시맨틱 레이어, 되묻기 |
| 큰 스키마와 비슷한 컬럼명 | 스키마 연결·테이블 검색, 컬럼 설명 메타데이터 정비 |
| 그럴듯하지만 틀린 SQL(환각) | 실행 결과 검증, 사람 검토, 정답 질의 세트로 정확도 평가(Spider·BIRD 같은 벤치마크) |
| 보안·권한 | 읽기 전용 계정, 행·열 수준 접근 통제, 생성 SQL 의 DML·DDL 차단, 개인정보 마스킹. 프롬프트로 권한을 우회하는 프롬프트 인젝션에 대비 |
| 성능 | 비싼 전체 테이블 스캔을 막는 실행 계획 점검과 실행 시간 제한 |