
벡터 데이터베이스는 텍스트, 이미지, 음성 등을 숫자 벡터로 변환해 저장하고, 의미적 유사도를 빠르게 검색할 수 있는 전용 데이터베이스 이다. RAG(Retrieval-Augmented Generation) 시스템에서 LLM이 정확한 정보를 생성하려면 관련 문서를 빠르게 찾아야 하는데, 전통적인 키워드 검색으로는 문맥과 의미를 제대로 이해하지 못한다. 벡터 데이터베이스는 문서를 임베딩으로 변환해 저장하고, 사용자 질문과 가장 유사한 문서를 밀리초 단위로 찾아내어 RAG의 핵심 인프라 역할을 수행한다.
벡터 데이터베이스란?
벡터 데이터베이스는 고차원 벡터 데이터를 저장하고 검색하기 위한 특수 목적 데이터베이스 이다. 전통적인 관계형 데이터베이스가 정확한 매칭(예: WHERE name = ‘John’)에 최적화되어 있다면, 벡터 데이터베이스는 근사 검색(Approximate Nearest Neighbor Search)에 최적화되어 있어 “의미가 비슷한” 데이터를 빠르게 찾을 수 있다.
벡터와 임베딩
텍스트, 이미지, 오디오 등의 데이터를 임베딩 모델을 통해 숫자 벡터로 변환한다. 보통 384차원, 768차원, 1536차원 등의 고차원 벡터로 표현된다. 예를 들어 “고양이”라는 단어는 [0.23, -0.45, 0.67, …] 같은 숫자 배열로 변환되며, 비슷한 의미의 단어는 벡터 공간에서 가까운 위치에 배치된다.
유사도 계산
벡터 간 유사도를 계산하는 방법으로는 코사인 유사도(Cosine Similarity)와 유클리드 거리(Euclidean Distance)가 널리 사용된다. 코사인 유사도는 벡터 간 각도를 측정하여 -1부터 1까지의 값을 가지며, 1에 가까울수록 유사하다는 의미이다.
RAG 시스템에서의 역할
RAG 시스템에서는 질문 임베딩과 유사한 문서 임베딩을 검색해 LLM에게 컨텍스트로 제공하여 환각을 줄이고 정확도를 높인다.
작동 방식
- 문서를 임베딩으로 변환한다.
- 벡터 데이터베이스에 저장한다.
- 사용자 질문도 임베딩으로 변환한다.
- 벡터 데이터베이스에서 유사한 문서를 검색한다.
- 검색된 문서를 LLM의 프롬프트에 컨텍스트로 주입한다.
- LLM이 컨텍스트를 기반으로 정확한 답변을 생성한다.
실제 예시
회사 문서 10,000개를 저장하고 싶다면, 각 문서를 OpenAI의 text-embedding-ada-002 모델(1536차원 벡터)로 변환해 벡터 DB에 저장한다. 사용자가 “퇴직금 계산 방법은?”이라고 질문하면, 질문도 동일 모델로 임베딩하여 벡터 DB에서 유사도가 높은 상위 5개 문서를 검색한다.
예를 들어 아래와 같은 결과가 반환된다.
| 문서 | 유사도 | 설명 |
|---|---|---|
| 문서 A | 0.89 | 퇴직금 계산 규정 |
| 문서 B | 0.85 | 근속 연수별 퇴직금 산정 |
| 문서 C | 0.82 | 퇴직금 지급 방법 |
이 문서들을 LLM의 프롬프트에 컨텍스트로 주입해 답변을 생성한다. 벡터 검색 없이 LLM만 사용하면 “퇴직금은 근속 연수에 따라 계산됩니다” 같은 일반적 답변만 나오지만, 벡터 DB로 관련 문서를 찾으면 해당 회사의 정확한 규정을 반영한 답변을 생성할 수 있다.
주요 벡터 데이터베이스 종류
Pinecone
Pinecone은 관리형 서비스로 빠른 설정이 가능하다. 초기 프로토타이핑이나 소규모 프로젝트에 적합하다.
특징
- 클라우드 기반 관리형 서비스
- 빠른 설정과 배포
- 자동 스케일링
- 비용이 상대적으로 높음
Milvus
Milvus는 오픈소스 벡터 데이터베이스로 자체 호스팅이 가능하다. 대규모 데이터에 유리하다.
특징
- 오픈소스
- 자체 호스팅 가능
- 대규모 데이터 처리
- 커스터마이징 가능
Weaviate
Weaviate는 키워드 검색과 벡터 검색을 모두 지원하는 하이브리드 검색 기능이 있다.
특징
- 하이브리드 검색 지원 (BM25 + 벡터)
- GraphQL API
- 자동 스키마 생성
- 실시간 업데이트
벡터 데이터베이스 선택 시 고려사항
스케일
프로젝트 규모에 따라 적합한 벡터 DB가 다르다. 빠른 프로토타이핑이 필요하면 Pinecone이 좋고, 대규모 데이터와 자체 호스팅이 필요하면 Milvus가 적합하다.
검색 성능
인덱싱 방식에 따라 정확도와 속도가 달라진다. HNSW(Hierarchical Navigable Small World)는 빠른 검색 속도를 제공하고, IVF-Flat(Inverted File Index)은 정확도에 중점을 둔다. 데이터 규모와 검색 속도 요구사항을 고려해 선택해야 한다.
하이브리드 검색
키워드 검색(BM25)과 벡터 검색을 결합하면 정확도가 더욱 향상될 수 있다. 두 방식을 모두 지원하는 Weaviate 같은 솔루션이 유리할 수 있다.
메타데이터 필터링
“2023년 이후 문서만” 같은 조건으로 벡터 검색 결과를 필터링할 수 있어야 실무에서 유용하다. 모든 벡터 DB가 메타데이터 필터링을 지원하는 것은 아니므로 확인이 필요하다.
임베딩 모델 선택
OpenAI Embeddings
OpenAI의 text-embedding-ada-002가 가장 널리 사용된다. 1536차원 벡터를 생성하며, 영어에 최적화되어 있다.
한국어 특화 모델
한국어 특화 모델(예: Ko-SBERT)을 사용하면 더 나은 성능을 얻을 수 있다. 도메인 특화 모델을 사용하는 것도 효과적이다.
모델 선택 기준
- 언어 지원 범위
- 도메인 특화 여부
- 벡터 차원 크기
- API 응답 속도
- 비용
벡터 검색 정확도 평가
Recall@K
정답 문서가 상위 K개 검색 결과에 포함되는 비율을 의미한다. 예를 들어 Recall@5가 0.8이면 5개 중 4개가 정답이라는 의미이다.
MRR (Mean Reciprocal Rank)
평균 역순위로, 정답 문서의 순위의 역수를 평균한 값이다. 높을수록 좋다.
실무 평가
실무에서는 실제 사용자 피드백으로 지속적으로 개선한다. A/B 테스트를 통해 검색 품질을 향상시킨다.
FAQ
Q: 벡터 데이터베이스와 일반 데이터베이스의 차이는 무엇인가요?
A: 일반 DB는 정확한 값 매칭에 최적화되어 있고, 벡터 DB는 의미적 유사도 검색에 최적화되어 있습니다. “회사 정책”과 “기업 규정”은 단어가 다르지만 벡터 DB는 의미가 비슷하다고 인식합니다.
Q: 어떤 벡터 DB를 선택해야 하나요?
A: 빠른 프로토타이핑이 필요하면 Pinecone, 대규모 데이터와 자체 호스팅이 필요하면 Milvus, 키워드+벡터 하이브리드 검색이 필요하면 Weaviate를 고려해보세요.
Q: 임베딩 모델은 어떤 것을 사용하나요?
A: OpenAI의 text-embedding-ada-002가 가장 널리 쓰이지만, 한국어 특화 모델(예: Ko-SBERT)이나 도메인 특화 모델을 사용하면 더 나은 성능을 얻을 수 있습니다.
Q: 벡터 검색의 정확도는 어떻게 평가하나요?
A: 정답 문서가 상위 K개 검색 결과에 포함되는 비율(Recall@K)과 평균 순위(MRR)를 사용합니다. 실무에서는 실제 사용자 피드백으로 지속적으로 개선합니다.
Q: 벡터 데이터베이스의 비용은 어떻게 되나요?
A: Pinecone 같은 관리형 서비스는 사용량에 따라 과금되고, Milvus 같은 오픈소스는 자체 인프라 비용만 들면 됩니다. 데이터 규모와 트래픽에 따라 다릅니다.
Q: 실시간 업데이트가 가능한가요?
A: 대부분의 벡터 DB는 실시간 업데이트를 지원하지만, 인덱싱 방식에 따라 업데이트 속도가 다릅니다. Weaviate는 실시간 업데이트에 최적화되어 있습니다.