메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

Spring AI로 구현하는 최신 AI 기술: RAG부터 MCP까지

 

Spring AI가 등장하면서, 기존에 익숙했던 Spring 방식 그대로 최신 AI 기술들을 다룰 수 있게 되었습니다. 그 중에서도 핵심이 되는 RAG와 MCP 기술에 대해 알아보겠습니다.

 

 

 

✅임베딩: 벡터 검색의 핵심 개념

 

임베딩Embedding은 텍스트나 이미지와 같은 데이터를 부동 소수점 숫자로 이루어진 벡터로 변환하는 과정을 말합니다. 이 작업을 수행하는 모델을 임베딩 모델Embedding Model이라고 합니다. 다음은 다양한 입력 데이터를 임베딩 모델이 벡터로 변환하는 과정을 시각적으로 보여주는 그림입니다.
 

 

 

 

데이터를 벡터로 변환하는 이유는, 벡터가 방향과 크기를 갖는 다차원 공간의 한 점으로 표현될 수 있기 때문입니다. 이렇게 벡터화된 데이터는 수학적으로 유사도를 계산하기 쉬워집니다. 두 벡터의 방향과 크기가 비슷할수록 해당 데이터 간의 유사도Similarity가 높다고 판단할 수 있으며, 반대로 방향과 크기가 다를수록 유사도는 낮다고 볼 수 있습니다.

 

예를 들어, "강아지"와 "반려견"은 의미적으로 유사한 텍스트로, 이 둘은 임베딩 벡터의 방향과 크기가 서로 비슷합니다. 반면, "강아지"와 "물고기"는 의미적으로 유사도가 낮기 때문에, 해당 벡터들의 방향과 크기 또한 크게 다릅니다. 

 

AI 분야에서 임베딩Embedding과 벡터 저장소Vector Store는 밀접한 관계를 가지고 있습니다. 임베딩 모델이 벡터를 출력하면, 벡터 저장소는 이들 벡터들을 저장합니다. 이후, 벡터 저장소에서 제공하는 유사도 검색 기능을 활용해서 쿼리로 제공되는 벡터와 가장 유사한 벡터를 찾을 수 있습니다. 

 

다음은 벡터 저장소에 저장된 벡터들을 2차원 공간의 점으로 시각화한 그림입니다. 점들 사이의 거리가 가까울수록 유사도가 높은 벡터를 의미하며, 유사한 벡터들은 같은 색상으로 구분해 표시했습니다.

 

 

 

 

예를 들어 대한민국 헌법에 포함된 문장들이 각각 벡터화되어 벡터 저장소에 저장되어 있다고 가정해 보겠습니다. 사용자가 대통령의 임기와 관련된 질문을 입력하면, 해당 질문도 임베딩 모델을 통해 벡터로 변환됩니다. 이 벡터를 가지고 벡터 저장소에서 유사도 검색을 수행하고, 가장 유사한 벡터를 검색합니다. 검색된 벡터는 대통령 임기와 관련된 문장일 것입니다.

 

주의할 점은, 벡터 저장소에 데이터를 저장할 때 사용한 임베딩 모델과 유사도 검색 시 입력 데이터를 벡터화하는 임베딩 모델이 동일해야 한다는 것입니다. 임베딩 모델마다 사전 학습된 데이터와 임베딩 방식이 다르기 때문에, 동일한 입력 데이터라도 서로 다른 벡터로 임베딩될 수 있습니다. 따라서 서로 다른 모델을 사용할 경우, 벡터 간의 유사도 비교 결과가 부정확해질 수 있습니다.

 

 

 

 

 

✅RAG: 임베딩을 활용한 지능형 답변 시스템

 

이렇게 구축된 임베딩과 벡터 저장소를 실제 AI 서비스에서 어떻게 활용할까요? 바로 검색 증강 생성RAG이라는 기술을 통해서입니다. LLM과 같은 생성형 AI 모델은 사전 학습된 데이터에 기반해 동작하기 때문에, 학습 이후의 정보에 대해서는 정확한 답변을 할 수 없습니다. 예를 들어, gpt-4o-mini 모델은 2023년 10월까지의 데이터로 학습되었기 때문에 그 이후의 사실에 대한 질문에는 답변을 하지 못하거나, 실제와 다른 내용을 생성하는 할루시네이션이 발생할 수 있습니다. 

 

또한 특화된 도메인이나 기업의 내부 지식 기반으로 훈련되어 있지 않기 때문에, 이런 주제에 대해서는 AI 모델의 응답을 받기 힘듭니다. 이와 같은 문제점을 해결하기 위해 파인 튜닝Fine-tuning, 검색 증강 생성RAG, 도구 호출Tool Calling 등의 기술을 사용할 수 있습니다. 

 

• 파인 튜닝(fine-tuning)

파인 튜닝Fine Tuning은 기존 모델을 추가 학습시키는 방법입니다. 고성능 하드웨어GPU가 필요하고,  훈련에 필요한 많은 양의 데이터와 훈련 시간이 필요합니다. 하지만 응답의 일관성, 추론 지연 감소, 적은 토큰량, 보안에 유리, 운영 및 배포의 단순성과 같은 장점도 있습니다.

 

• 검색 증강 생성(RAG, Retrieval Augmented Generation)

RAG는 사용자의 질문에 대한 해답을 얻기 위해 지식 기반 저장소(일반적으로 벡터 저장소를 말함)에서 우선 ① 검색을 합니다. 검색결과를 프롬프트 내에 문맥Context으로 추가해서 프롬프트를 ② 증강합니다. 그리고 LLM은 자신의 지식과 프롬프트 내에 증강된 내용을 참고해서 사용자의 질문에 맞는 자연스러운 ③ 응답을 생성합니다. 

 

 

 

 

 

 

 

✅MCP: AI의 행동 범위를 무한히 확장하는 표준

 

RAG가 AI의 '지식'을 확장했다면, MCPModel Context Protocol는 AI의 '행동'을 확장하는 기술입니다. 애플리케이션 내부 도구와 달리, 외부 도구는 애플리케이션 외부에서 제공되는 도구를 말합니다. MCP에서는 외부 도구를 MCP Server라고 합니다.

 

내부 도구는 자바로 개발해야 하지만, MCP Server는 다양한 언어로 개발할 수 있습니다. Spring Boot로 개발된 애플리케이션이라도 파이썬이나 Node.js로 개발된 MCP Server를 사용할 수 있습니다. 내부 도구는 애플리케이션과 코드로 강한 결합이 되지만, MCP Server는 코드로 결합되는 방식이 아니기 때문에 애플리케이션에서 쉽게 탈부착이 가능합니다.

 

 MCP는 호스트인 애플리케이션이 MCP Client가 되어, 여러 MCP Server와 연결하는 클라이언트-서버 아키텍처 구조를 가지고 있습니다.

 

 

 

 

MCP는 USB-C 포트와 유사합니다. USB-C 포트가 컴퓨터에 다양한 주변 장치를 연결하는 표준화된 방법을 제공하듯이, MCP는 애플리케이션에 다양한 MCP Server를 연결하는 표준화된 방법을 제공합니다. 내부 도구이건 외부 도구(MCP Server)이건 도구가 하는 역할은 동일합니다. 도구는 파일 관리, 실시간 인터넷 검색, 로컬 데이터베이스 검색, 다양한 조치(회원가입, 주문, 메일 전송, 일정 관리, 예약, 장치 제어) 등을 할 수 있습니다.

 

다음 그림에서 보면 USB-C 포트와 같이 MCP Server를 미리 연결해 놓습니다. 애플리케이션MCP Host은 LLM과 대화하는 도중에 LLM으로부터 외부 도구 호출 요청이 들어오면, MCP Client를 통해 MCP Server가 가지고 있는 외부 도구를 호출합니다.

 

 

 

 

LLM은 MCP Server가 실행하는 머신의 로컬 파일 시스템, 로컬 프로그램, 주변 장치를 도구를 통해서 사용하거나 제어할 수 있습니다. 예를 들어 MCP Server가 홈 서버에서 실행된다면 LLM은 도구를 이용해서 홈 서버와 연결된 모든 가정용 제품을 제어할 수 있습니다. 또한 건물 통제 서버에서 MCP Server가 실행된다면, LLM은 건물 통제 서버와 연결된 모든 장치를 제어할 수 있습니다. 

 

 


MCP는 LLM이 잘 할 수 없는 것을 외부 도구를 통해서 해결할 수 있도록 합니다. 연결되는 MCP Server의 개수는 제한이 없으며, 소프트웨어로 가능한 어떠한 기능이라도 MCP Server로 개발이 가능하기 때문에 LLM의 기능을 빠르게 확장시킬 수 있습니다. 

 

 

 



 

위 콘텐츠에서 소개한 임베딩, RAG, MCP의 구체적인 구현 방법과 Spring AI를 활용한 실전 코드는

 『이것이 Spring AI다』에서 확인하실 수 있습니다.


 

댓글

댓글 입력