← 목차로 돌아가기

22. DB 인사이트 AI 개발 예정

본 항목은 개발 예정 기능입니다. ERP 시스템의 데이터베이스에 직접 접근하여 자연어 질문에 답변하는 AI 챗봇 시스템입니다.

1. 개요

DB 인사이트 AI는 소스텔 ERP 데이터베이스에 읽기/쓰기 접근이 가능한 AI 챗봇입니다. 사용자가 자연어로 질문하면 AI가 적절한 SQL 쿼리를 생성하여 실행하고, 결과를 이해하기 쉬운 형태로 답변합니다.

핵심 가치

2. 기술 아키텍처


사용자
자연어 질문

PHP API
(프록시)

Python
AI 엔진

MySQL
쿼리 실행

답변 생성
+ 시각화

시스템 구성

구성요소기술역할
프론트엔드ERP 내 채팅 UI (JS)채팅 인터페이스, 대화 이력, 테이블/차트 렌더링
PHP APIPHP (프록시)인증 확인 → Python 서버로 요청 전달 → 응답 반환
AI 엔진Python (FastAPI)자연어 분석 → SQL 생성 → 실행 → 답변 생성
LLMClaude API / OpenAI API자연어 이해 + SQL 변환 + 답변 포맷팅
DB 접근MySQL Connector읽기(SELECT) + 쓰기(INSERT/UPDATE)

3. Python AI 엔진 상세

처리 흐름

  1. 자연어 입력 수신 — "이번 달 가장 많이 입고된 원자재는?"
  2. 의도 분류 — 읽기(조회) / 쓰기(등록/수정) / 분석(집계/비교) / 일반 질문
  3. DB 스키마 참조 — 테이블 구조, 컬럼명, 관계(FK)를 LLM에 컨텍스트로 전달
  4. SQL 생성 — LLM이 질문에 맞는 SQL 쿼리 작성
  5. 안전성 검증 — 위험 쿼리 차단 (DROP, TRUNCATE, DELETE 등)
  6. 쿼리 실행 — MySQL에서 실행, 결과 수신
  7. 답변 생성 — 결과를 자연어 + 테이블/차트로 포맷팅
  8. 대화 이력 관리 — 맥락 유지 (이전 질문 참조 가능)

DB 스키마 컨텍스트

AI가 정확한 SQL을 생성하려면 DB 구조를 알아야 합니다. Python 엔진에 아래 정보를 사전 로딩합니다:

정보내용
테이블 목록items, inventory, lots, serials, purchase_orders, receivings, production_orders, production_inputs, production_outputs, shipments, shipping_requests, disposals, warehouses, vendors, users, departments, approvals, 등 30+ 테이블
컬럼 정보각 테이블의 컬럼명, 타입, NULL 여부, 기본값, 코멘트
관계(FK)items.id → inventory.item_id, purchase_orders.vendor_id → vendors.id 등
ENUM 값status 컬럼의 DRAFT/PENDING_APPROVAL/CONFIRMED 등 상태값 의미
비즈니스 용어"입고" = receivings, "발주" = purchase_orders, "투입" = production_inputs 등 한글↔테이블 매핑
스키마 자동 동기화: Python 엔진 시작 시 INFORMATION_SCHEMA에서 테이블/컬럼 정보를 자동으로 가져옵니다. DB 구조가 변경되어도 재시작만 하면 반영됩니다.

4. 대응 가능한 질문 유형

A. 재고 관련

"현재 원자재A의 재고가 몇 개야?"
원자재A (RM-002 IC칩 MAC-GbE)의 현재 재고는 본사 창고 15개, 생산 창고 30개로 총 45개입니다.
"안전재고 이하인 품목 목록 보여줘"
안전재고 이하 품목 3건:
| 품목코드 | 품목명 | 현재고 | 안전재고 | 부족량 |
| RM-003 | DRAM 2GB | 8 | 20 | -12 |
| RM-004 | Flash 16GB | 3 | 15 | -12 |
| SF-001 | PCB 메인보드 A | 5 | 10 | -5 |
"이번 달 재고 변동이 가장 큰 품목은?"
2026년 3월 재고 변동 TOP 5: (입고+산출-투입-출고 기준)
...(집계 테이블 표시)

B. 생산 관련

"이번 주 생산오더 현황 알려줘"
이번 주(3/24~3/28) 생산오더 3건:
PRD-0001: ST-100 (완료, 산출 10/10)
PRD-0002: ST-500 (진행중, 투입 2/4)
PRD-0003: ST-500 (진행중, 투입 4/4, 산출 대기)
"ST-500을 10대 더 만들려면 부품이 충분해?"
ST-500 ONT단말 10대 생산에 필요한 BOM 분석:
| 부품 | 필요량 | 현재고 | 부족 |
| PCB 메인보드 A | 10 | 15 | 충분 |
| 전원모듈 PM-100 | 10 | 35 | 충분 |
| 광송수신모듈 | 10 | 25 | 충분 |
| 하우징 케이스 S | 10 | 50 | 충분 |
결론: 모든 부품 충분합니다. 바로 생산오더 가능합니다.

C. 구매/입고 관련

"이번 달 (주)한국반도체에서 얼마나 입고했어?"
(주)한국반도체 2026년 3월 입고 실적:
총 2건, 합계 3,520,000원
| 입고번호 | 품목 | 수량 | 금액 |
| RCV-0001 | IC칩 MAC-GbE | 100 | 3,200,000 |
| RCV-0002 | DRAM 2GB | 50 | 320,000 |
"아직 입고 안 된 발주 있어?"
미입고 발주 1건:
PO-202603-0002 (주)광통신솔루션 - 승인완료, 입고 대기 중 (IC칩 10개, 320,000원)

D. 출고/사업 관련

"KT 네트워크 장비 납품 사업의 투입원가 알려줘"
사업 "KT 네트워크 장비 납품" 투입원가:
총 출고 5건, 합계 15,200,000원
...(상세 테이블)
"이번 달 매출전표 합계가 얼마야?"
2026년 3월 매출전표(SALES) 합계: 28,500,000원 (7건)

E. 추적/이력 관련

"시리얼 ST100-202503-0001은 지금 어디 있어?"
시리얼 ST100-202503-0001 (ST-100 광통신모듈):
상태: SHIPPED (출고)
현재 위치: KT 네트워크 장비 납품 사업에 출고됨
출고일: 2025-03-11
이력: 생산(3/10) → 입고(3/10) → 출고(3/11, SR-202503-0001)
"LOT-202603-0001은 어디에 쓰였어?"
LOT-202603-0001 (IC칩 MAC-GbE, 초기 100개):
잔여: 50개
소비 이력: PRD-202603-0002에 10개 투입, PRD-202603-0003에 40개 투입

F. 쓰기(등록) 요청

"원자재A 500개 발주요청 올려줘, 사유는 생산 일정 필요"
발주요청을 생성하시겠습니까?
품목: RM-002 IC칩 MAC-GbE
수량: 500개
사유: 생산 일정 필요
[확인] [취소]
→ 확인 클릭 시 PRQ-202603-0005 생성 완료
쓰기 요청 안전장치: AI가 데이터를 변경하는 작업은 반드시 사용자 확인(확인/취소) 단계를 거칩니다. 실수로 인한 데이터 손상을 방지합니다. DELETE/DROP/TRUNCATE 쿼리는 원천 차단됩니다.

G. 복합 분석/의사결정 지원

"다음 달 생산 계획을 세우려면 지금 뭘 발주해야 해?"
현재 진행 중인 생산오더와 재고를 분석한 결과:

발주가 필요한 품목:
| 품목 | 다음달 필요량 | 현재고 | 입고예정 | 가용재고 | 부족량 | 발주 제안 |
| DRAM 2GB | 200 | 8 | 0 | 8 | -192 | 200개 발주 필요 |
| Flash 16GB | 100 | 3 | 0 | 3 | -97 | 100개 발주 필요 |

충분한 품목: IC칩 MAC-GbE (가용 45개, 필요 30개), PCB 메인보드 (가용 15개, 필요 10개)

발주요청을 바로 생성할까요?
"올해 1분기 거래처별 매입 금액 비교해줘"
2026년 1분기 거래처별 매입 금액:
| 거래처 | 1월 | 2월 | 3월 | 합계 |
| (주)한국반도체 | 5,000,000 | 3,200,000 | 3,520,000 | 11,720,000 |
| (주)광통신솔루션 | 2,000,000 | 0 | 320,000 | 2,320,000 |
총 매입액: 14,040,000원
...(차트 시각화 가능)

5. 보안 설계

보안 항목대책설명
SQL 인젝션 차단파라미터 바인딩 강제AI가 생성한 SQL도 반드시 파라미터화 처리
위험 쿼리 차단화이트리스트 방식SELECT, INSERT만 허용. UPDATE는 특정 테이블만. DROP/DELETE/TRUNCATE 원천 차단
쓰기 확인2단계 확인INSERT/UPDATE 실행 전 사용자에게 확인 요청 필수
권한 연동역할 기반 제한대표: 전체 테이블 접근 / 실무자: 본인 관련 테이블만 (자기 부서, 자기 요청)
감사 로그모든 쿼리 기록AI가 실행한 모든 SQL을 audit_logs에 저장 (who, when, what)
데이터 노출 방지민감 컬럼 마스킹password_hash, API 키 등 민감 컬럼은 조회 결과에서 자동 제외
실행 제한쿼리 타임아웃5초 이상 걸리는 쿼리 자동 중단, 결과 1,000행 제한

6. 구현 파일 구조

Python 서버 (FastAPI)

파일역할
ai_server/main.pyFastAPI 앱 진입점, API 라우터
ai_server/db_schema.pyDB 스키마 자동 로딩 (INFORMATION_SCHEMA)
ai_server/query_builder.pyLLM에 스키마 컨텍스트 전달 → SQL 생성 요청
ai_server/query_validator.py생성된 SQL 안전성 검증 (화이트리스트 체크)
ai_server/query_executor.pyMySQL 쿼리 실행 (타임아웃/행 제한 적용)
ai_server/response_formatter.py쿼리 결과 → 자연어 답변 + 테이블/차트 변환
ai_server/conversation.py대화 이력 관리 (맥락 유지)
ai_server/permissions.py역할 기반 테이블/컬럼 접근 제어
ai_server/config.pyDB 접속 정보, LLM API 키, 보안 설정

PHP 프록시 (ERP 연동)

파일역할
pages/ai/api/chat.php프론트 → Python 서버 프록시 (인증 체크 + 요청 전달)
pages/ai/index.php채팅 UI 페이지 (ERP 레이아웃 내)

프론트엔드

파일역할
pages/ai/chat.js채팅 UI, 메시지 렌더링, 테이블/차트 표시
pages/ai/chat.css채팅 스타일 (말풍선, 코드 블록, 테이블)

7. UI 설계

접근 방법 (2가지)

방법위치용도
전용 페이지사이드바 메뉴 "AI 인사이트"깊은 분석, 복합 질문, 대화 이력 관리
플로팅 위젯우하단 채팅 버블빠른 질문 (어느 페이지에서든 접근)

채팅 UI 기능

8. 대응 가능 범위

카테고리질문 예시SQL 유형
재고현재고, 안전재고 이하, 로트별 잔여, 시리얼 위치, 창고별 분포SELECT + JOIN + GROUP BY
입고이번 달 입고 현황, 거래처별 입고 금액, 미입고 발주, 입고 지연SELECT + SUM + DATEDIFF
생산생산오더 현황, 투입 진행률, BOM 부품 충분 여부, 생산 실적SELECT + 서브쿼리 + BOM 재귀
출고출고 현황, 사업별 출고 금액, 미출고 건, 출고 지연SELECT + JOIN
구매발주 현황, 거래처별 매입 비교, 단가 변동, 발주 대기SELECT + GROUP BY + 기간 비교
추적시리얼 이력, 로트 소비 이력, 시리얼 계보(genealogy)SELECT + 다중 JOIN
회계매입/매출 전표 합계, 수금/지급 현황, 원가 분석SELECT + SUM + 기간별
분석월별 추이, 전월 대비, 거래처 비교, 재고 회전율복합 집계 + 비교
등록발주요청, 자재요청, 메모 등록INSERT (확인 후)
일반시스템 사용법, 메뉴 안내, 용어 설명SQL 불필요 (지식 응답)

9. 구현 계획

Phase 1: Python AI 서버 구축

  1. FastAPI 프로젝트 설정 + MySQL 연결
  2. DB 스키마 자동 로딩 (INFORMATION_SCHEMA)
  3. LLM 연동 (Claude API) — 스키마 컨텍스트 + 프롬프트 설계
  4. SQL 생성 → 검증 → 실행 파이프라인
  5. 안전성 검증 (화이트리스트, 타임아웃, 행 제한)

Phase 2: PHP 프록시 + 채팅 UI

  1. PHP 프록시 API (pages/ai/api/chat.php)
  2. 채팅 UI 페이지 (전용 페이지 + 플로팅 위젯)
  3. 답변 렌더링 (텍스트/테이블/차트)
  4. 대화 이력 관리 (세션 기반)

Phase 3: 고급 기능

  1. 쓰기 기능 (확인 UI + INSERT 실행)
  2. 권한 기반 접근 제어 (역할별 테이블 제한)
  3. 즐겨찾기 질문 + 엑셀 내보내기
  4. 차트 시각화 (Chart.js 연동)

Phase 4: 최적화

  1. 자주 묻는 질문 캐싱 (동일 질문 빠른 응답)
  2. 프롬프트 최적화 (정확도 개선)
  3. 비용 최적화 (토큰 사용량 관리)
  4. 한국어 특화 튜닝

22. DB 인사이트 AI — 점검 체크리스트

개발 예정 항목입니다. 구현 완료 후 아래 체크리스트로 점검합니다.
확인점검 항목 (Q)판단 기준 / 예시 답변 (A)비고
AI 채팅 페이지에 정상 진입 되는가?사이드바 "AI 인사이트" 클릭 시 채팅 화면 표시필수
자연어로 재고 질문이 가능한가?"현재 원자재A 재고 몇 개야?" → 정확한 수량 답변필수
테이블 형태로 결과가 표시되는가?목록형 답변 시 정렬 가능한 테이블로 렌더링필수
복합 분석 질문에 답변 가능한가?"다음 달 뭘 발주해야 해?" → BOM + 재고 분석 결과주요
쓰기 요청 시 확인 단계가 있는가?"발주요청 올려줘" → [확인]/[취소] 버튼 표시 후 실행필수
위험 쿼리가 차단되는가?DROP/DELETE/TRUNCATE 요청 시 차단 메시지 표시필수
역할 기반 접근 제어가 동작하는가?실무자 계정 → 민감 테이블(users, audit_logs) 조회 불가주요
대화 맥락이 유지되는가?"아까 그 품목" → 이전 대화의 품목을 참조하여 답변
실행된 SQL을 확인할 수 있는가?답변 하단 "SQL 보기" 클릭 시 실행된 쿼리 표시
결과를 엑셀로 내보낼 수 있는가?테이블 결과에 "엑셀 다운로드" 버튼 존재 및 동작
플로팅 위젯이 모든 페이지에서 동작하는가?우하단 채팅 버블 클릭 → 미니 채팅창 표시
점검일: 3월 29일     점검자: (주)플랫폼뱅크     확인자: ____________
© 2026 SOURCETEL. 본 문서는 사내 교육용이며 외부 배포를 금합니다.