home
🌈

[사이오닉 Spring AI 시리즈 2] Storm Platform으로 쉽게 구축하는 AI 에이전트

Author
조하담 / Backend Engineer
Category
Hands-on
Tags
AI
AI Service
Spring AI
Published
2025/05/12
5 more properties
안녕하세요! 오늘은 Spring AI와 STORM Platform을 활용하여 RAG(Retrieval-Augmented Generation) 기반 챗봇을 구축하는 방법에 대해 알아보겠습니다. RAG는 외부 데이터를 검색하여 LLM에게 맥락을 제공함으로써, 더 정확하고 신뢰할 수 있는 답변을 생성하도록 도와주는 기술입니다.

RAG의 필요성과 개념

LLM은 아무리 뛰어난 모델이라도 학습한 지식 안에서만 답변할 수 있습니다. 특정 기업의 사내 문서나 최신 법률처럼 외부 도메인 지식이 필요한 경우에는, 전혀 엉뚱한 답을 하거나 틀린 정보(Hallucination)를 말하기도 합니다.
이런 문제를 해결하기 위해 등장한 개념이 RAG(Retrieval-Augmented Generation)입니다. RAG는 외부 데이터를 검색해 LLM에게 맥락(Context)으로 제공함으로써, 보다 정확하고 신뢰할 수 있는 답변을 생성하도록 돕습니다.
그리고 이 복잡한 RAG 파이프라인을 Spring 기반으로 깔끔하게 구현할 수 있게 도와주는 프레임워크가 바로 Spring AI입니다.

Spring AI로 구현하는 RAG 파이프라인

Spring AI로 구성할 수 있는 대표적인 RAG 흐름은 데이터 색인(Data Indexing)과 질의응답(Data Retrieval & Generation) 두 단계로 나눌 수 있습니다.

1단계: 데이터 색인 (Data Indexing)

첫째, 문서 청킹(Chunking) 단계에서는 PDF 또는 텍스트 문서를 업로드하고, 텍스트를 추출 및 정제한 후, LLM이 이해하기 좋은 단위로 청킹(Text Splitting)합니다.
둘째, 벡터화 및 저장 단계에서는 각 청크에 대해 임베딩을 생성하고, 메타데이터를 추가한 후, 벡터 저장소에 저장합니다.

2단계: 질의응답 (Data Retrieval & Generation)

사용자의 질문을 벡터화하고, 유사한 문서 청크를 검색한 후, 검색된 문서를 LLM에게 컨텍스트로 전달하여 최종 응답을 생성합니다.

Spring AI의 장점과 핵심 컴포넌트

RAG 시스템을 직접 구현하려면 텍스트 청킹 전략, 임베딩 모델 연동, 벡터 저장소 연동, 메타데이터 기반 필터링, LLM 프롬프트 구성 및 요청 처리 등 다양한 요소들을 직접 작성해야 합니다.
하지만 Spring AI는 이 복잡한 요소들을 표준화된 컴포넌트로 추상화해줍니다. 덕분에 개발자는 LLM 서비스 구현 그 자체에 집중할 수 있고, 인프라 구현 부담은 크게 줄어듭니다.

EmbeddingModel – 텍스트를 벡터로 변환하는 인터페이스

LLM과 검색 시스템을 연결하는 첫 번째 단계는 임베딩입니다. Spring AI는 EmbeddingModel 인터페이스를 통해 다양한 벤더의 임베딩 모델을 쉽게 연동할 수 있게 해줍니다.
public interface EmbeddingModel extends Model<EmbeddingRequest, EmbeddingResponse> { EmbeddingResponse call(EmbeddingRequest request); default float[] embed(String text) float[] embed(Document document); default List<float[]> embed(List<String> texts) default EmbeddingResponse embedForResponse(List<String> texts) default int dimensions() }
Java
복사

VectorStore – 문서 벡터 저장 및 검색을 위한 인터페이스

벡터 저장소는 임베딩된 문서를 저장하고, 질문과 유사한 문서를 빠르게 검색해주는 핵심 컴포넌트입니다. 처음에는 인메모리 기반의 SimpleVectorStore로 시작했다가, 서비스 확장 시 PGVector, Qdrant, Milvus 등 외부 DB로 손쉽게 전환할 수 있습니다.
public interface VectorStore extends DocumentWriter { default String getName() { ... }; void add(List<Document> documents); void delete(List<String> idList); void delete(Filter.Expression filterExpression); default void delete(String filterExpression) { ... }; List<Document> similaritySearch(String query); List<Document> similaritySearch(SearchRequest request); } VectorStore prodStore = PgVectorStore.builder(jdbcTemplate, model) .dimensions(1536) .distanceType(PgDistanceType.COSINE_DISTANCE) .build();
Java
복사

TokenTextSplitter - 텍스트 분할 전략 내장

LLM은 긴 문서를 한 번에 처리하지 못하기 때문에, 문서를 적절한 길이로 나누는 작업이 필요합니다. Spring AI는 이를 위해 TextSplitter를 기본으로 제공합니다.
TextSplitter splitter = new TokenTextSplitter() List<Document> chunks = splitter.split(document);
Java
복사

FilterExpression - 메타데이터 기반 검색 필터링

단순히 유사한 문서를 찾는 것만으로는 부족할 수 있습니다. Spring AI는 문서 메타데이터를 기반으로 조건 필터링을 지원합니다. SQL의 WHERE 절과 유사한 방식으로 필터링할 수 있어 "2023년 이후 계약서"처럼 조건을 추가하여 더욱 정확한 검색이 가능합니다.
SearchRequest request = SearchRequest.builder() .query("계약 기간은 언제야?") .filterExpression("type == 'contract' AND year >= 2023") .build(); List<Document> results = vectorStore.similaritySearch(request);
Java
복사

Spring AI는 배웠지만, AI Agent를 만들기는 여전히 어렵다

Spring AI 강의를 통해 AI의 기초 개념과 예제는 익혔지만, 실제 서비스를 개발하고 적용하는 일은 여전히 어렵습니다. 특히 임베딩 모델 선택 및 학습, 벡터 데이터베이스 연결, 리랭킹을 통한 정확도 향상 등은 진입장벽이 꽤 높습니다.
결국 Spring AI를 직접 활용해서 RAG 시스템을 구축하려면, 문서를 청킹하고, 임베딩 모델로 벡터를 생성한 후, 벡터 DB에 저장하고, 질의 시 검색 및 리랭킹 과정을 거쳐야 합니다.
그러나 위와 같은 AI의 세부적인 기술들을 모두 알지 못하더라도, STORM 플랫폼을 사용하면 아주 쉽게 문서학습부터 질의응답까지 가능합니다.

AI Agent란?

AI Agent는 특정 도메인 지식에 특화되어 사용자의 질문이나 요청을 스스로 이해하고, 관련 정보를 찾아 가장 정확한 답변을 제공하는 AI입니다. 이는 굉장히 복잡하고 어려운 일이고, 단순한 Spring AI를 이용한 로직 구현으로 해결되는 문제가 아닙니다.
하지만 Sionic AI에서는 이 모든 과정을 클릭 몇 번으로 해결할 수 있도록 합니다. AI Agent는 STORM Platform이 제공하는 핵심 기능 중 하나로, 사용자의 데이터를 분석하여 최적의 답변과 해결책을 제공하는 지능형 AI 시스템입니다.
Sionic AI의 AI Agent는 단순히 미리 설정된 답변을 전달하는 챗봇이 아니라, 고객의 데이터를 기반으로 상황을 실시간으로 분석하고, 그에 맞는 맞춤형 대응을 제시합니다. 또한, 지속적인 학습을 통해 점점 더 정교해지는 학습형 AI의 역할을 수행합니다.
Sionic AI는 복잡한 AI 기술들을 추상화하여 "개발자가 손쉽게 AI 기능을 활용할 수 있는 플랫폼" 을 제공합니다. 고객은 복잡한 AI 기술을 신경 쓰지 않고, 자신의 비즈니스에만 집중하면 됩니다. 나머지 복잡한 모든 과정은 STORM Platform 이 해결해 드립니다.
STORM Platform 은 직접 임베딩 모델 구축 및 운영, 벡터 DB 구축/운영/스케일링, 리랭커 도입 및 파라미터 튜닝, 모델 업데이트 및 지속적 학습 등의 어려운 기술적 과제를 자동으로 해결해줍니다.

STORM Platform을 활용한 고객 사용 예시

다음은 STORM Platform에서 AI Agent를 만드는 구체적인 절차입니다.
1.
에이전트 생성
SionicAI 플랫폼에서 에이전트 생성 클릭
에이전트 이름 및 RAG ON/OFF 템플릿 선택
2.
문서 업로드
내가 원하는 PDF, Word 등 자료를 업로드
이미지나 표를 적절히 파싱하는 Storm Parse 사용 가능
Storm Parse는 단순 텍스트 추출이 아니라, 문서의 구조를 인식한 청킹을 수행합니다.
예를 들어, 표 제목과 데이터, 이미지 캡션 등을 함께 추출하여 질의응답 정확도를 높여줍니다.
3.
즉시 질의응답
내가 학습시킨 문서에 대해 즉시 질의응답 수행 가능
별도의 복잡한 설정 없이 즉시 사용 가능
참조한 문서 청크 확인 가능
4.
피드백 기반 학습
비개발자도 손쉽게 AI 모델을 직접 조정하고 개선할 수 있도록 지원

Storm Open API를 활용해서 AI Agent 사용하기

Storm API Key 발급

Storm Open API

Storm 페이지에서 올린 문서를 바로 AI가 학습하므로, 내부 운영자가 그에 대한 질문을 던져 응답을 받도록 자동화할 수 있습니다.
문서 학습 요청 POST /api/v2/documents/by-file
다양한 형태의 문서를 실시간 학습합니다.
채팅 전송 (non-stream) POST /api/v2/answer
실시간 질의 응답을 처리합니다.

AI Agent를 MCP로 연동하기

현재 준비 중인 UI로, GitHub를 통해 개발 코드 SDK도 공개되어 있습니다. 아래 Repository를 참고하세요.
Storm 플랫폼은 국내에서 최초로 B2B 엔터프라이즈 레벨에서 MCP 연동을 지원합니다.
아래 예시를 통하여 Storm MCP Server로 서버리스한 환경에서 고객 맞춤형 RAG를 구축해보세요.
serverless-rag-mcp-server
sionic-ai

마치며

지금까지 Spring AI 시리즈를 통해 기초 개념부터 실습까지 함께 살펴봤습니다.
이번 글에서는 복잡한 AI 기술을 직접 구현하지 않더라도, Sionic AI를 활용해 문서 기반 AI 에이전트를 쉽게 만들 수 있다는 점을 다뤘습니다.
이제 남은 것은 실제로 적용해보는 일입니다.
간단한 문서 하나로도 충분히 시작할 수 있고, 직접 다뤄보시면서 어떤 방식이 우리 서비스에 적합한지 판단할 수 있습니다. 필요에 따라 API를 연동하거나, 팀 내부에 파일 기반 지식베이스를 구축하는 등 확장도 가능합니다.
AI 도입은 더 이상 복잡한 기술 구현이 아니라, 적절한 도구를 선택하고 활용하는 일로 바뀌고 있습니다.
이번 시리즈가 그 첫걸음을 시작하는 데 도움이 되었기를 바랍니다.

인프런 강의와 함께하세요

5월 중순에 출시될 인프런 강의에서는 이번 시리즈를 통해 다룬 내용을 바탕으로,
1.
Spring AI를 활용해 RAG 챗봇을 만드는 실습과,
2.
Storm Open API를 활용해 AI Agent와 연동되는 초간단 챗봇을 만드는 실습을 진행할 예정입니다.
관심 있는 분들은 이어지는 실습 강의를 통해 직접 동작하는 예제를 함께 만들어보세요.