-
Spring AI 시리즈 6화 – RAG 구축하기 (1): Vector Store란 무엇인가기술과 산업/언어 및 프레임워크 2025. 6. 5. 12:19728x90
RAG(Retrieval-Augmented Generation)는 외부 지식과 LLM을 결합해 보다 정확한 응답을 생성하는 대표적인 아키텍처입니다. 본 글에서는 RAG의 개념과 핵심 요소인 Vector Store의 구조와 역할, Spring AI에서의 구현 방식을 심층적으로 분석합니다.
RAG, 이제 선택이 아닌 기본 전략이 되다
LLM을 활용한 서비스에서 자주 나오는 요구사항이 있습니다.
- “GPT에게 우리 회사 메뉴얼을 학습시켜야 합니다.”
- “PDF 문서를 기반으로 답을 해줬으면 해요.”
- “특정 용어는 우리 업계 기준에 맞게 설명되었으면 좋겠어요.”
이런 요구는 단순한 텍스트 생성만으로는 충족되지 않습니다.
바로 이때 등장하는 전략이 **RAG(Retrieval-Augmented Generation)**입니다.
RAG는 간단히 말해,
**“답을 생성하기 전에 관련 정보를 먼저 찾아서 넣고, 그걸 기반으로 응답을 생성”**하는 구조입니다.
이 구조에서 핵심적인 역할을 수행하는 것이 바로 **Vector Store(벡터 저장소)**입니다.
RAG의 기본 구성요소
RAG는 아래 세 가지 요소로 구성됩니다:
- Embedding 모델: 텍스트를 벡터로 변환합니다. (LLM이 아닌 별도 모델 사용)
- Vector Store: 벡터 형태로 저장된 문서에서 유사 벡터를 빠르게 검색합니다.
- LLM: 검색된 문서를 바탕으로 최종 응답을 생성합니다.
이 전체 과정은 다음과 같은 흐름으로 작동합니다:
[질문 입력] ↓ [질문을 벡터로 변환] ↓ [Vector Store에서 관련 문서 검색] ↓ [검색된 문서를 프롬프트에 삽입] ↓ [LLM이 응답 생성]
Vector Store란 정확히 무엇인가?
Vector Store는 문서나 텍스트의 임베딩(Embedding) 벡터를 저장하고,
사용자의 질문(문장)의 벡터와 가장 유사한 항목들을 검색하는 저장소 시스템입니다.
정확히는 다음 기능을 수행합니다:
- 텍스트 → 벡터 변환 결과 저장
- 벡터 간 유사도 검색 (Cosine similarity, Dot product 등)
- 메타데이터 및 원본 텍스트 반환
- 대규모 데이터셋에 대한 실시간 검색 지원
LLM은 과거 지식을 바탕으로 일반적인 답변을 생성하지만,
Vector Store는 실제 문서나 FAQ, 사내 문건 등에서 맥락을 가져와줍니다.
Vector Store는 DB일까?
이 질문은 자주 나옵니다. Vector Store는 단순한 NoSQL DB나 RDBMS가 아닙니다.
항목RDBMSVector Store
데이터 저장 방식 열 기반 테이블 N차원 벡터 검색 방식 WHERE 조건 벡터 유사도 (Nearest Neighbor) 대표 기술 MySQL, PostgreSQL FAISS, Milvus, Chroma, Weaviate, pgvector 목적 정형 데이터 처리 유사도 기반 문서 검색 일부 Vector Store는 DB와 결합된 형태(PGVector)로 존재하며,
일부는 클러스터형 독립 벡터 엔진(Milvus, Weaviate)으로 동작합니다.
Spring AI에서 Vector Store의 위치
Spring AI는 Vector Store를 다음과 같이 추상화합니다:
public interface VectorStore { void add(Document doc); List<Document> findRelevant(String query); }
즉, 개발자는 어떤 저장소든 간에 VectorStore 인터페이스만 사용하면 됩니다.
Spring AI는 내부적으로 다음 구현체를 제공합니다:
- ChromaVectorStore
- MilvusVectorStore
- PgVectorStore
- WeaviateVectorStore
각 저장소는 EmbeddingClient와 연동되어 텍스트를 벡터화하고,
VectorStore에 저장하거나 검색하는 구조로 구성됩니다.
실전 구성 예시 – Chroma 연동
Chroma는 로컬 환경에서 손쉽게 사용할 수 있는 벡터 DB입니다.
Spring AI에서는 아래와 같이 구성됩니다.
1. 의존성 추가
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-vectorstore-chroma</artifactId> <version>0.8.0</version> </dependency>
2. 설정
spring: ai: chroma: database: ./data/chroma
3. 코드 구성
@Autowired private VectorStore vectorStore; public void indexDocument(String text) { Document doc = new Document(text); vectorStore.add(doc); } public List<Document> search(String question) { return vectorStore.similaritySearch(question); }
유사도 검색의 핵심 – Embedding이 먼저다
중요한 점은 Vector Store는 벡터를 저장할 뿐이며,
벡터를 만드는 주체는 Embedding 모델이라는 점입니다.
따라서 RAG 시스템을 구성할 때는 다음 세 가지 컴포넌트를 반드시 구성해야 합니다.
- EmbeddingClient – 문장 → 벡터
- VectorStore – 벡터 저장 및 검색
- ChatClient – 최종 응답 생성
이 세 요소가 Spring AI에서는 모두 독립적인 Bean으로 관리됩니다.
실제 활용 시나리오
- 문서 Q&A: PDF, Markdown, HTML 파일을 벡터화하여 사용자가 질문할 때 해당 문서에서 답을 추출
- FAQ 봇: 자주 묻는 질문을 벡터화하고, 질문과 가장 유사한 FAQ를 찾아 LLM에 전달
- 지식 베이스 검색: 위키 형태의 기술 문서에 대해 자연어 검색 지원
이런 기능은 단순히 LLM을 API로 호출하는 것과는 완전히 다른 수준의 사용자 경험을 제공합니다.
요약 정리
구성 요소설명
EmbeddingClient 텍스트를 벡터로 변환하는 모델 (OpenAI, HuggingFace 등) VectorStore 벡터를 저장하고 유사도 검색을 수행하는 저장소 ChatClient 검색된 문서를 바탕으로 최종 답변을 생성하는 LLM Spring AI 역할 이 세 요소를 모듈화하고 추상화하여 쉽게 통합 가능하게 함 728x90'기술과 산업 > 언어 및 프레임워크' 카테고리의 다른 글
Spring AI 시리즈 7화 – RAG 구축하기 (2): Chroma 연동 실습과 문서 기반 검색 (0) 2025.06.09 Spring Boot 고급 시리즈 3화 – 트랜잭션 전파와 고립 수준, 언제 어떻게 사용할까? (2) 2025.06.05 Spring Framework 시리즈 13화 – @Controller와 @RestController 내부 구조와 처리 흐름 (0) 2025.06.05 Spring Framework 시리즈 12화 – Spring MVC 구조의 출발점: DispatcherServlet과 요청 처리 흐름 (0) 2025.06.03 Spring AI 시리즈 5화 – Prompt Template과 Prompt Engineering 전략 (2) 2025.06.03