티스토리 뷰

LLM 기반 기능이 실제 서비스에 도입되기 시작하면서, 단순히 어떤 모델을 선택할 것인가보다 어떤 방식으로 지식을 검색하고 제공할 것인가가 더 중요한 설계 요소로 자리 잡고 있습니다. 특히 Spring Boot 기반 MSA 환경에서 langchain4j를 활용해 RAG(Retrieval Augmented Generation)를 구축하려는 경우, Vector Store 선택은 시스템 구조와 운영 방식에 직접적인 영향을 주게 됩니다.

 

이 글에서는 RAG 아키텍처에서 Vector Store가 필요한 이유부터 시작해, langchain4j 환경에서 고려할 수 있는 주요 선택지들을 설계 관점에서 비교합니다. 그리고 이미 MongoDB Atlas Cluster를 사용 중인 환경에서 MongoDB Atlas Vector Search가 현실적인 대안이 되는 이유를 실제 활용 흐름 중심으로 정리합니다. 특정 기술을 추천하기보다는 설계 판단에 도움이 되는 기준을 공유하는 데 목적을 둡니다.

 


 

RAG 구조에서 검색 단계가 중요한 이유

 

RAG는 LLM이 학습하지 않은 외부 데이터를 검색해 응답에 반영하는 구조입니다. 기존 LLM은 사전 학습된 데이터 범위 내에서만 응답할 수 있으며, 최신 데이터나 내부 문서 기반 응답에는 한계가 있습니다. 이 문제를 해결하기 위해 등장한 구조가 RAG입니다.

 

그러나 단순히 외부 문서를 추가한다고 해서 문제가 해결되지는 않습니다. 모든 문서를 프롬프트에 포함시키는 방식은 토큰 제한과 비용 문제를 즉시 발생시킵니다. 또한 문서 전체를 전달하는 방식은 LLM이 필요한 정보를 정확히 선택하기 어렵게 만듭니다.

 

결국 중요한 단계는 질문과 가장 관련 있는 문서 일부만 정확하게 찾아내는 과정입니다. 이 검색 단계가 정확하지 않으면, 이후 LLM이 아무리 뛰어나더라도 잘못된 정보를 기반으로 응답하게 됩니다.

 

이 지점에서 Vector Store가 등장합니다.

 


 

Vector Store가 필요한 이유

 

Vector Store는 문서를 단순 텍스트가 아니라 의미 기반 벡터 형태로 저장하고, 질의와 의미적으로 가까운 문서를 검색하기 위한 구조입니다. 일반적인 키워드 검색과 달리 의미 기반 검색이 가능하다는 점이 핵심입니다.

 

예를 들어, 사용자가 표현을 다르게 입력하더라도 의미가 유사하면 검색 결과로 추출할 수 있습니다. RAG에서 요구되는 것은 정확한 키워드 매칭이 아니라 의미적 연관성 기반 검색이기 때문에 벡터 검색 방식이 필수적인 구조가 됩니다.

 

또한 벡터 검색을 사용하면 필요한 일부 문서만 LLM에 전달할 수 있어 토큰 비용을 줄이고 응답 속도도 개선할 수 있습니다. 결국 Vector Store는 단순 저장소가 아니라 RAG 품질을 결정하는 핵심 구성 요소라고 볼 수 있습니다.

 


 

langchain4j 기반 RAG 환경에서의 선택 기준

 

langchain4j는 Java 환경에서 LLM 기반 애플리케이션을 구성하기 위한 프레임워크로, Spring Boot 기반 서비스와 자연스럽게 결합할 수 있다는 장점이 있습니다. 하지만 Vector Store 선택 시에는 단순히 연동 가능 여부만 확인해서는 충분하지 않습니다.

 

실제 설계 단계에서는 다음과 같은 요소들이 함께 고려됩니다.

 

먼저 운영 복잡도입니다. 별도의 Vector DB를 도입하면 새로운 클러스터 운영, 백업 정책, 모니터링, 장애 대응 체계를 추가로 운영해야 합니다. 이는 인프라와 운영 부담을 동시에 증가시킵니다.

 

다음으로 비용 구조입니다. 벡터 데이터는 일반 데이터보다 용량이 크며, 검색 쿼리 역시 비용에 영향을 줍니다. 따라서 단순 기능 비교보다 장기 운영 비용 관점에서 검토가 필요합니다.

 

마지막으로 네트워크 구조와 데이터 일관성 문제입니다. 데이터 저장소와 Vector Store가 분리되면 동기화 문제와 지연 시간이 발생할 수 있습니다. 실제 운영에서는 이러한 구조적 복잡성이 장애 원인이 되기도 합니다.

 


 

주요 Vector Store 선택지와 특징

 

AWS 환경에서 자주 고려되는 선택지 중 하나는 OpenSearch 기반 벡터 검색입니다. 검색 엔진으로서 기능은 강력하지만, 클러스터 운영 부담이 존재하고 인덱스 설계 난이도가 높습니다. RAG 전용 용도로는 인프라 규모가 과도해질 수 있습니다.

 

Pinecone이나 Weaviate와 같은 전문 Vector DB 서비스는 벡터 검색 기능이 잘 최적화되어 있으며 사용이 편리합니다. 그러나 외부 SaaS 의존성이 생기며 네트워크 지연이나 데이터 관리 정책 측면에서 추가 검토가 필요합니다.

 

결국 Vector Store 선택은 성능뿐 아니라 현재 시스템 구조와 얼마나 자연스럽게 통합되는지가 중요해집니다.

 


 

MongoDB Atlas Vector Search가 현실적인 선택지가 되는 이유

 

이미 MongoDB Atlas Cluster를 운영 중인 환경에서는 판단 기준이 달라집니다. MongoDB Atlas Vector Search는 동일한 데이터 저장소에서 벡터 검색 기능을 제공하기 때문에 별도 Vector DB를 추가하지 않아도 됩니다.

 

가장 큰 장점은 데이터 일관성입니다. 원본 문서와 벡터 데이터가 동일한 컬렉션에 존재하기 때문에 동기화 문제가 줄어듭니다. 별도 데이터 파이프라인을 구성할 필요가 없으며 운영 복잡도도 낮아집니다.

 

또한 기존 Atlas 운영 방식과 동일한 관리 모델을 유지할 수 있습니다. 모니터링, 스케일링, 백업 체계가 그대로 적용되기 때문에 새로운 운영 체계를 학습할 필요가 없습니다.

 


 

Spring Boot + langchain4j 환경에서의 실제 활용 흐름

 

일반적인 활용 흐름은 다음과 같이 구성됩니다.

 

먼저 문서를 임베딩 모델을 통해 벡터로 변환하고 MongoDB 컬렉션에 저장합니다. 이후 해당 필드에 대해 Vector Search 인덱스를 생성합니다.

 

사용자 질의가 들어오면 동일한 방식으로 질의를 벡터로 변환한 뒤, 의미적으로 가장 가까운 문서를 검색합니다. 검색된 문서는 langchain4j를 통해 LLM 프롬프트 컨텍스트로 전달되고 최종 응답이 생성됩니다.

 

이 구조의 장점은 RAG 구축을 위해 별도 인프라를 추가하지 않아도 된다는 점입니다. 기존 MongoDB 기반 데이터 구조를 그대로 활용할 수 있어 시스템 변경 범위를 최소화할 수 있습니다.

 


 

성능과 비용 관점에서의 판단

 

MongoDB Atlas Vector Search가 모든 상황에서 최적의 선택은 아닙니다. 수억 건 이상의 벡터 검색이나 고속 추천 시스템과 같은 워크로드에서는 전문 Vector DB가 더 적합할 수 있습니다.

 

그러나 내부 문서 검색, 운영 지원 챗봇, 서비스 FAQ 검색 등 일반적인 RAG 활용 시나리오에서는 충분한 성능을 제공합니다. 또한 기존 Atlas 리소스를 공유하기 때문에 비용 예측이 상대적으로 쉽고 운영 부담도 적습니다.

 


 

설계 관점에서 정리해 보면

 

Vector Store 선택은 특정 기술의 우열 문제가 아니라 현재 시스템 구조와 운영 조건을 고려한 설계 판단의 문제에 가깝습니다. langchain4j 기반 RAG 환경에서 이미 MongoDB Atlas를 사용하고 있다면, Atlas Vector Search는 추가 인프라 부담 없이 도입할 수 있는 현실적인 선택지라고 볼 수 있습니다.

 

다만 프로젝트마다 요구사항과 환경이 다르기 때문에 하나의 정답이 존재한다고 보기는 어렵습니다. 실제 설계 과정에서는 성능 요구사항, 운영 인력 구조, 비용 제약 등을 함께 고려하게 됩니다.

 

개인적으로는 RAG 구조를 도입하면서 단순 기능 구현보다 데이터 흐름과 운영 복잡도를 함께 고민하게 되었고, 이러한 판단 기준을 정리하는 과정 자체가 설계 역량을 키우는 데 도움이 되었습니다.