왜 지금 봐야 하나
동적 선택 메모: ProxySQL 4.0.6이 2026-03-10에 출시됐다 (오늘 기준 141일 전). 90일 창에는 없지만 180일 창 안에 있어 폴백 기준을 충족한다. 현 최신은 4.0.8 (2026-04-17 기준). AI/MCP Tier는 실험적 단계이며 프로덕션 배포는 공식적으로 권장되지 않는다.
LLM 에이전트가 데이터베이스와 대화하려면 어떤 경로를 거쳐야 할까? 가장 흔한 답은 "앱 서버에 새 코드를 추가해 LLM API와 DB 드라이버를 연결한다"다. ProxySQL 4.0 AI/MCP Tier는 다른 경로를 제안한다: 이미 트래픽 앞에 있는 프록시 레이어 자체를 에이전트 인프라로 바꾸는 것이다.
애플리케이션 코드를 건드리지 않고 프록시 포트에 MCP 서버를 올리고, 거기서 스키마 자동 발견·RAG 인덱싱·NL2SQL·이상 탐지를 동시에 제공한다. 이 장에서는 그 아키텍처가 구체적으로 어떻게 동작하는지, 그리고 어떤 제약 속에서 사용해야 하는지를 살펴본다.
ProxySQL가 뭔지 먼저
ProxySQL은 MySQL 프로토콜을 구사하는 고성능 SQL 프록시다. 앱과 MySQL 백엔드 사이에 위치해 쿼리 라우팅(읽기/쓰기 분리, 샤딩), 연결 풀링, 쿼리 캐싱, 쿼리 규칙 기반 차단/변환을 수행한다. 2019년부터 Percona, GitHub 등 대형 운영 환경에서 쓰이는 성숙한 도구다.
ProxySQL은 자체 관리 인터페이스(Admin 포트 6032)를 MySQL 프로토콜로 노출한다. 모든 설정·모니터링이 SQL 테이블로 표현되기 때문에 기존 MySQL 클라이언트로 제어할 수 있다.
4.0은 여기에 Generative AI Module을 통째로 얹은 버전이다.
멀티티어 출시 전략
ProxySQL은 3.0 이후로 세 개의 릴리스 라인을 병행한다.
| 티어 | 버전 계열 | 성격 | 권장 대상 |
|---|---|---|---|
| Stable | 3.0.x | 핵심 기능만, 보수적 패치 | 프로덕션 |
| Innovative | 3.1.x | 신규 기능 얼리 어답터용 | 준프로덕션 |
| AI/MCP | 4.0.x | 실험적 GenAI + 에이전트 기능 | 개발·실험 |
AI/MCP Tier는 Stable/Innovative의 모든 수정사항을 포함하면서 GenAI 레이어를 추가한다. 프로덕션 배포는 공식적으로 AI/MCP Tier를 권장하지 않는다. 운영 환경은 3.0.x 혹은 3.1.x를 유지하고, 4.0.x는 개발·실험 목적으로만 사용해야 한다.
빌드 시에는 PROXYSQLGENAI=1 환경 변수와 Rust 툴체인이 필요했으나, 4.0.8부터 Rust 의존성이 제거됐다.
전체 아키텍처
MCP 서버: 프록시가 도구 제공자가 되는 방법
ProxySQL 4.0은 포트 6071에 MCP 서버를 올린다. HTTP/HTTPS와 stdio 전송을 모두 지원하므로 Claude Code, GitHub Copilot, Cursor, Warp 같은 MCP 클라이언트가 별도 드라이버 없이 연결할 수 있다.
주요 도구 목록
| 범주 | 도구 이름 | 설명 |
|---|---|---|
| 스키마 탐색 | list_schemas | 연결된 MySQL 인스턴스의 스키마 목록 |
list_tables | 특정 스키마의 테이블 목록 | |
list_columns | 테이블의 컬럼·타입·코멘트 | |
| 쿼리 실행 | run_sql_readonly | SELECT만 허용하는 안전한 실행 |
explain_sql | 실행 계획 반환 | |
| RAG 검색 | rag.search_fts | 전문 검색(Full-text search) |
rag.search_vector | 벡터 유사도 검색 (sqlite-vec) | |
rag.search_hybrid | FTS + 벡터 혼합 검색 | |
| 카탈로그 | llm.search | 시맨틱 스키마 검색 |
discovery.run_static | AutoDiscovery 수동 실행 |
핵심 설계 원칙: NL2SQL은 ProxySQL이 내부에서 자연어를 SQL로 번역하는 게 아니다. ProxySQL은 LLM 에이전트에게 도구 집합을 제공하고, 에이전트가 스스로 도구를 조합해 SQL을 만들어 실행한다. 프록시는 실행 경로를 제어할 뿐이다.
AutoDiscovery와 RAG 파이프라인
에이전트가 DB 스키마를 알려면 먼저 컨텍스트가 구축돼야 한다. AutoDiscovery는 두 단계로 이를 처리한다.
discovery.run_static
테이블·컬럼·FK 관계 수집
인덱스·통계 메타데이터
genai_variables 사용
비즈니스 도메인 태깅
임베딩 벡터 생성
SQLite + sqlite-vec
벡터 임베딩 인덱스
SQL 템플릿 캐시
sqlite-vec는 C 단독 SQLite 확장으로, 외부 벡터 DB(Pinecone, Weaviate 등) 없이 ProxySQL 프로세스 안에서 벡터 검색을 처리한다. 소규모·중규모 스키마에는 충분한 성능을 낸다.
NL2SQL 에이전트 루프
NL2SQL 흐름은 에이전트가 직접 운전한다. ProxySQL이 숨겨진 번역 단계를 실행하는 게 아니라, 에이전트가 도구를 순서대로 호출하며 SQL을 만들어 실행한다.
- 스키마 검색:
llm.search("주문 관련 테이블")으로 관련 스키마 찾기 - 컬럼 조회:
list_columns로 정확한 컬럼명·타입 확인 - SQL 합성: LLM이 검색 결과를 바탕으로 SELECT 쿼리 작성
- 안전 실행:
run_sql_readonly로 실행 (DML·DDL 차단) - 템플릿 학습: 성공한 쿼리 패턴을 카탈로그에 저장, 다음 요청에 재사용
이 루프의 핵심 장점은 ProxySQL이 실행 경로를 제어한다는 것이다. 에이전트가 어떤 LLM을 쓰든, 어떤 쿼리를 만들든, ProxySQL 레이어에서 읽기 전용 제약·쿼리 규칙·연결 풀이 항상 적용된다.
LLM 브리지: genai_variables
ProxySQL Admin 인터페이스(포트 6032)에는 genai_variables라는 설정 테이블이 추가됐다. MySQL 클라이언트로 접속해 API 키와 모델 파라미터를 설정하면 ProxySQL이 해당 LLM 엔드포인트를 비동기로 호출한다.
-- ProxySQL Admin 접속 후
INSERT INTO genai_variables (name, value) VALUES
('openai_api_key', 'sk-...'),
('default_model', 'gpt-4o-mini'),
('anthropic_api_key','sk-ant-...');
LOAD GENAI TO RUNTIME;
SAVE GENAI TO DISK;비동기 설계 덕분에 LLM 호출 지연이 일반 쿼리 경로에 영향을 주지 않는다. AutoDiscovery나 위협 탐지처럼 배경에서 실행되는 작업만 LLM 브리지를 사용한다.
AI 위협 탐지
4.0의 또 다른 실험적 기능은 쿼리 레벨 시맨틱 이상 탐지다.
- 모든 쿼리를 핑거프린트(파라미터 제거한 구조적 형태)로 변환
- 알려진 위협 벡터 DB와 시맨틱 유사도 비교 (sqlite-vec 활용)
- SQL 인젝션 패턴, 비정상 테이블 접근, 권한 밖 쿼리 구조 감지
- 탐지 시 로그 기록·차단·알림 중 선택 가능
기존 ProxySQL의 쿼리 규칙(정규식 기반 차단)과 달리 시맨틱 방식이므로, 우회 변형에도 어느 정도 대응할 수 있다는 게 설계 목표다. 다만 이 기능도 실험적 단계이며 정확도가 프로덕션 수준임을 보장하지 않는다.
운영 관점에서 알아야 할 것
무엇이 실험적인가
AI/MCP Tier(4.0.x) 전체가 실험적이다. ProxySQL 공식 문서는 다음을 명시한다:
- 프로덕션 환경에는 Stable(3.0.x) 또는 Innovative(3.1.x) 사용
- NL2SQL, RAG, 위협 탐지 기능은 API·동작이 버전간 변경될 수 있음
- 4.0.6 빌드 시 Rust 툴체인 필요 (4.0.8부터 제거됨)
mcp_catalog.db 위치와 크기
mcp_catalog.db는 ProxySQL 데이터 디렉터리에 생성된다. 대형 스키마(수천 개 테이블)에서는 LLM 보강 단계가 길고 DB 파일이 커질 수 있다. 주기적 재수집 전략을 세워야 한다.
run_sql_readonly 범위
run_sql_readonly는 SELECT, SHOW, EXPLAIN만 허용한다. 에이전트가 DML을 시도하면 ProxySQL 레벨에서 오류를 반환한다. 이 제약은 설정으로 완화할 수 있지만, MCP 도구가 데이터를 변경하는 상황은 세심한 검토 없이 열지 않는 것이 좋다.
포트 6071 인증
MCP 서버는 Bearer 토큰 인증을 지원한다. 6071 포트를 내부망이나 인증된 클라이언트에만 열어야 한다. 공개 인터넷에 노출하면 자유로운 스키마 탐색·쿼리 실행이 가능해진다.
체크리스트
- [ ] 실험 환경에서는 4.0.x, 프로덕션은 3.0.x 혹은 3.1.x 유지
- [ ] 빌드 시 4.0.6은 Rust 툴체인 필요, 4.0.8+는 불필요
- [ ]
genai_variables에 LLM API 키 설정 후LOAD GENAI TO RUNTIME - [ ] AutoDiscovery 첫 실행 전 LLM 브리지 동작 확인
- [ ]
mcp_catalog.db파일 크기와 재수집 주기 계획 - [ ] 포트 6071은 내부망·인증 클라이언트에만 개방
- [ ]
run_sql_readonly제약 의도적으로 완화하지 않음
한 문장으로
ProxySQL 4.0 AI/MCP Tier는 기존 MySQL 프록시 위에 MCP 서버·RAG·NL2SQL 루프를 얹어 앱 코드 변경 없이 LLM 에이전트가 DB를 안전하게 탐색·질의할 수 있게 하는 실험적 에이전트 인프라 레이어다.
References
- GitHub Release: ProxySQL 4.0.6 (AI/MCP Tier)
- ProxySQL Blog: Bringing GenAI to Every MySQL Instance
- ProxySQL Blog: Multi-Tier Release Strategy
- ProxySQL Docs: MCP Server
- ProxySQL Docs: NL2SQL
- ProxySQL Docs: RAG Overview
- ProxySQL Docs: MCP Catalog
- newreleases.io: ProxySQL v4.0.8
- InfoQ: ProxySQL Multi-Tier Release