Spring Boot와 MCP로 자연어 기반 MySQL 조회 서버 만들기Spring boot와 Spring AI로 구현한 자연어 기반 MySQL 조회 서버의 동작 학인과 프로젝트 회고를 정리했습니다. 1. 동작확인① Tool 호출 순서Claude desktop에서 자연어 질문을 입력하면 Claude가 스스로 필요한 Tool을 판단해서 순서대로 호출합니다.1. getTables() → 어떤 테이블이 있는지 확인 2. getTableSchema("xxx") → 해당 테이블의 컬럼 구조 확인 3. queryNaturalLanguage() → SQL 생성 후 실행이 순서를 개발자가 코드로 지정하는 것이 아니라, Claude가 스스로 판단해서 호출한다는 점이 MCP의 핵심입니다. ② 테스트 예시질문: "db-as..
jjuya
Dev Review the RecordSpring Boot와 MCP로 자연어 기반 MySQL 조회 서버 만들기Spring Boot로 MCP서버를 구축하면서 겪었던 환경 설정 오류들을 정리해 보았습니다. 1. 개발환경Java17Spring Boot3.4.4Spring AI1.0.0MySQL8 (Docker)Claude DesktopMCP Host 2. build.gradle 의존성 설정repositories { mavenCentral() // Spring AI는 Milestone 저장소 추가 필수 maven { name = "Spring Milestones" url = uri("https://repo.spring.io/milestone") }}Spring AI 1.0.0 공식 문서를 참고 3. ..
Spring Boot와 MCP로 자연어 기반 MySQL 조회 서버 만들기Spring boot에서 MCP Tool을 등록하고, 사용자의 자연어 질문을 받아 SQL을 생성한 뒤, Mysql에서 실행하는 과정을 구현해 보겠습니다.1. SchemaTool LLM은 기본적으로 현재 DB의 테이블 명과 컬럼을 알 수 없습니다.그래서 자연어 질문만 전달하면 실제 DB 구조와 맞지 않는 SQL이 생성될 수 있습니다.이를 해결하기 위해 SchemaTool을 통해 Mysql 의 테이블과 컬럼 정보를 조회하도록 구현했습니다.getTables() : DB의 모든 테이블 목록과 구조를 조회합니다.getTableSchema() : 특정 테이블의 컬럼 구조를 조회합니다. 2. QueryToolQueryTool은 사용자의 자연어 ..
Spring Boot와 MCP로 자연어 기반 MySQL 조회 서버 만들기1. 프로젝트 개요운영자나 개발자가 DB 데이터를 확인하려면 SQL을 직접 작성해야 합니다.하지만 매번 테이블 구조를 확인하고 쿼리를 작성하는 과정은 번거롭고, SQL에 익숙하지 않은 사람은 원하는 데이터를 바로 조회하기 어렵습니다.또한, 데이터를 확인하기 위해 개발자가 직접 DB에 접근하거나, 운영에서 사용할 별도의 관리 페이지를 만들어야 하는 경우도 있었습니다.이러한 불편을 줄이기 위해 자연어 질문만으로 DB 데이터를 조회할 수 있는 방법을 고민했습니다. 이번 프로젝트에서는 자연어 질문을 기반으로 DB 데이터를 조회할 수 있는 MCP 기반 MySQL 조회 서버를 구현했습니다. 2. MCP서버란?MCP 개념그래서 여기서 말하는 M..
이전 글에서 Kubernetes의 구조와 동작 원리를 다뤘다. 이번엔 실제로 kubectl로 클러스터를 다루는 방법, Namespace, Pod, Service, ReplicaSet, Deployment까지 실습 중심으로 정리해보자. kubectl 기본 설정kubectl은 Kubernetes 클러스터를 제어하는 CLI 도구다. Master 노드에서 사용한다.# 기본 명령어 형식kubectl [command] [type] [name] [flags]# 주요 명령어kubectl get nodeskubectl get podskubectl get pods -o wide # IP, 노드 정보 포함kubectl get pods --show-labels # 라벨 포함kubectl describe ..
Docker가 단일 서버에서 컨테이너를 관리하는 도구라면, Kubernetes는 여러 서버에 걸쳐 컨테이너를 자동으로 배포·관리·확장하는 컨테이너 오케스트레이션 표준이다. 이번 글에서는 Kubernetes가 등장한 배경과 내부 구조를 정리해 보자. 왜 Kubernetes가 필요한가Docker Compose는 단일 호스트에서 여러 컨테이너를 묶어서 관리할 수 있다. 하지만 서비스 규모가 커지면 다음과 같은 문제가 생긴다.서버 한 대가 다운되면 그 위의 컨테이너가 모두 중단됨트래픽이 늘어날 때 컨테이너를 수동으로 늘려야 함여러 서버에 걸쳐 컨테이너를 배포하고 관리하기 어려움Kubernetes는 이런 문제를 해결한다. 여러 서버(노드)를 하나의 클러스터로 묶고, 컨테이너의 배포·복구·확장을 자동으로 처리한다...
Docker Compose 더보기더보기Docker Compose이전 글까지 이미지를 만들고 배포하는 방법을 다뤘다. 이번엔 여러 컨테이너를 하나의 파일로 묶어서 관리하는 Docker Compose를 정리해보자. Docker Compose란여러 컨테이너를 하나의 YAML 파일(compose.yaml)로 정의하고, 한 번에 실행·중지·삭제할 수 있는 도구다.Compose 없이 컨테이너를 연결하려면 --link 옵션이나 네트워크를 일일이 설정해야 하지만, Compose를 사용하면 서비스 간 관계를 YAML로 선언적으로 관리할 수 있다.공식 문서 기준 현재 권장 파일명은 compose.yaml이다. 기존의 docker-compose.yml도 하위 호환으로 동작하지만 신규 작성 시에는 compose.yaml을 사..
Dockerfile 더보기더보기DockerFile이전 글에서 Dockerfile의 기본 명령어를 다뤘다. 이번엔 이미지를 더 가볍게 만드는 멀티 스테이지 빌드와, 만든 이미지를 어디에 어떻게 저장하고 공유하는지 Registry를 정리해보자. 멀티 스테이지 빌드 (Multi-Stage Build)하나의 Dockerfile 안에서 빌드 단계를 여러 개로 나눠, 최종 이미지에는 실행에 필요한 파일만 포함시키는 방법이다. 왜 필요한가컴파일 언어(C, Go, Java 등)는 빌드 도구(gcc, JDK 등)가 런타임에는 필요 없다.빌드 도구까지 이미지에 포함하면 크기가 수백 MB가 넘어간다.멀티 스테이지 빌드로 빌드 결과물(바이너리)만 최종 이미지에 복사할 수 있다. 기본 예시FROM ubuntu:latest AS..
Dockerfile 더보기더보기Dockerfile이전 글에서 Docker 네트워크 구조를 다뤘다. 이번엔 나만의 이미지를 직접 만드는 방법, 그리고 Dockerfile의 핵심 명령어를 정리해보자. 컨테이너로 이미지 만들기Docker 이미지를 만드는 방법은 크게 두 가지다.방법 1 — 실행 중인 컨테이너를 이미지로 저장 (commit)컨테이너를 직접 수정한 뒤 그 상태를 이미지로 저장할 수 있다.# 컨테이너에서 변경된 파일 확인docker diff apache# A: Added / C: Changed / D: Deleted# 컨테이너를 이미지로 저장docker container commit \ -a "juuYa" \ apache \ custom_httpd:1.0# 생성된 이미지로 컨테이너 실행dock..
이전 글에서 Volume으로 데이터를 컨테이너 밖에 저장하는 방법을 다뤘다. 이번엔 컨테이너끼리, 그리고 외부와 어떻게 통신하는지 네트워크 구조를 정리해보자. Docker 네트워크 기본 구조Docker를 설치하면 기본적으로 세 가지 네트워크가 자동 생성된다.docker network lsNETWORK ID NAME DRIVER SCOPExxxxxxxxxxxx bridge bridge localxxxxxxxxxxxx host host localxxxxxxxxxxxx none null local 네트워크 드라이버 종류드라이버설명사용 예시bridge기본값. 동일 호스트 내 컨테이너 간 통신. docker0 가상 브리지 사용웹 서버 ..