Repository navigation
AI Platform Engineering
DBTower에서 AI의 역할은 도구를 골라 근거를 모으고, 사람이 판단할 수 있는 분석을 만드는 것입니다. 권한, 데이터 반출, 승인, 실행은 모델 밖의 플랫폼 코드가 책임집니다.

Web / MCP Client / Discord / Slack
|
인증된 호출자 문맥
|
REST 서비스 코어와 감사
|
Agent Runtime -> 읽기 도구 선택·호출
|
DbmsOperator -> 5개 DBMS의 실제 관측 데이터
웹, MCP, ChatOps는 별도 비즈니스 로직을 갖지 않습니다. 같은 서비스 코어와 권한 검사를 통과하므로 채널이 늘어나도 정책을 한 곳에서 바꿀 수 있습니다.
자연어 질문을 받으면 모델이 health, compare, sessions, explain 같은 읽기 도구를 선택하고 최대 단계 안에서 연쇄 호출합니다. 각 단계의 도구명, 입력, 결과 요약을 trace로 남기고 사용자에게 진행 상황을 스트리밍합니다.
설계 선택:
- 도구 목록은 MCP의
tools/list에서 가져와 웹과 외부 Agent가 같은 계약을 사용합니다. - 변경 실행·승인·되돌리기 도구는 제공하지 않습니다.
- 지원하지 않거나 수집하지 못한 값은 추정하지 않고 사유를 반환합니다.
- 대상 DB에서 읽은 쿼리 문자열은 신뢰하지 않는 입력으로 취급합니다.
JSON-RPC 2.0 프로토콜 코어와 stdio·HTTP 전송을 구현하고 19개 도구를 제공합니다. HTTP MCP는 OAuth 2.1, PKCE, 동적 클라이언트 등록을 지원합니다.
가장 중요한 수정은 대리 호출의 주체를 보존한 것입니다. 초기 구현은 MCP 요청을 관리자 서비스 토큰으로 REST에 위임했습니다. 그 결과 실제 요청자가 감사 기록에서 사라지고, 같은 관리자가 자기 요청을 승인할 수 있었습니다.
수정 후에는 MCP를 인증한 사용자의 토큰으로 위임합니다.
수정 전: MCP 변경 요청자 api-token -> 같은 관리자의 승인 HTTP 200
수정 후: MCP 변경 요청자 실제 사용자 -> 자기 승인 HTTP 409
세션 SQL 주석처럼 대상 DB 사용자가 만든 문자열도 AI 입력에 들어옵니다. 따라서 시스템 프롬프트의 다른 인스턴스를 보지 마라는 보안 경계로 충분하지 않습니다.
- 허용된 도구와 대상 인스턴스를
DiagnosisGuard에서 검사합니다. - 인스턴스 인자를 현재 대상 ID로 고정합니다.
- 검사한 값을 정규화한 뒤 실제 실행에도 같은 값을 사용합니다.
- 질문, 도구 실행, 거부를 실제 사용자 이름으로 감사 기록에 남깁니다.
- 가드를 제거하면 공격 재현 테스트가 실패하도록 뮤테이션으로 확인했습니다.
AI SQL 제안에는 전체 데이터를 무조건 싣지 않습니다.
| 입력 | 기본 정책 |
|---|---|
| 스키마 | 질문과 선택한 테이블 우선, 글자 예산 안에서 제공 |
| 조회 결과 값 | 기본 차단, 인스턴스별 관리 설정으로만 허용 |
| 허용된 결과 | 최대 50행, 마스킹 후 전달 |
| SQL 리터럴 | 외부 전송 전에 마스킹 |
| 대화와 버전 | 워크시트 단위로 저장, AI 제안은 자동 실행하지 않음 |
정확도를 위해 컨텍스트는 늘리되, 데이터 반출 결정은 관리자 정책으로 분리했습니다.
NL2SQL 품질을 문장 유사도가 아니라 같은 워크벤치에서 SQL을 실행한 결과로 비교합니다.
| 평가 | 결과 | 의미 |
|---|---|---|
| Lenient | 12/12 | 핵심 결과 집합이 일치 |
| Strict | 7/12 | 열 구성과 순서까지 일치 |
데이터셋은 테이블 2개, 질문 12개, 1회 실행이므로 일반 벤치마크 성능으로 주장하지 않습니다. 이 평가의 목적은 프롬프트·스키마 컨텍스트·모델 변경 전후의 회귀를 같은 기준으로 확인하는 것입니다.

- 규칙 분석과 실행계획을 먼저 보여주고 AI 결과는 도착하는 대로 흘립니다.
- 스트리밍 조각은 표시용이고, 저장·분류·버전 생성은 완성본을 다시 파싱합니다.
- 외부 AI 호출을 DB 트랜잭션 밖으로 옮겨 동시 4요청의 active 커넥션을
4 -> 0으로 줄였습니다. - AI 작업 동시성에 상한을 두고 초과 요청은 명시적으로 거부합니다.
- 시간 초과 시 셸뿐 아니라 자식 프로세스까지 종료해 Linux CI에서 20초를 넘기던 작업을 약 2초에 끝냈습니다.
- API 키가 없거나 AI 호출이 실패해도 규칙 기반 분석과 핵심 알림은 계속 동작합니다.
| 영역 | 현재 상태 |
|---|---|
| Agentic tool-use | 읽기 도구 선택·연쇄 호출·trace·단계 제한 구현 |
| MCP | stdio·HTTP, OAuth 2.1, 19개 도구 구현 |
| 품질 평가 | 실행 결과 기반 NL2SQL 회귀 평가 구현 |
| 모델 | Anthropic 연동, 규칙 기반 폴백 |
| Model Router | 미구현. 품질·비용·지연 평가셋부터 필요 |
| A2A Agent Mesh | 미구현. MCP 호출자의 신원 보존 경험을 인증 기반으로 활용 가능 |
| 장기 Agent Memory | 미구현. 출처·유효기간·권한 상속을 먼저 설계해야 함 |
백엔드는 Python/FastAPI가 아니라 Java/Spring, 프론트는 React가 아니라 의존성 없는 정적 SPA입니다. 특정 프레임워크 일치를 주장하기보다 Agent Runtime, 프로토콜, 권한, 평가, 스트리밍, 운영 안정성을 제품 수준의 한 흐름으로 만든 경험을 보여줍니다.
상세 사례: PORTFOLIO-AX.md
DBTower 저장소 · 문서 안내 · 이슈