본문 바로가기
AI

벡터 데이터베이스(Vector DB)란? FAISS 예제와 함께 깊이 있게 살펴보기

by markbyun 2025. 5. 8.

벡터 데이터베이스(Vector DB)는 고차원 벡터를 효율적으로 저장, 인덱싱, 검색할 수 있도록 설계된 특수한 형태의 데이터베이스입니다. 이러한 벡터는 일반적으로 딥러닝 모델로부터 생성된 임베딩이며, 텍스트, 이미지, 오디오, 코드 등 다양한 데이터의 의미론적 표현을 담고 있습니다. 전통적인 관계형 데이터베이스가 키 기반 정확 매칭이나 구조화된 쿼리에 초점을 맞춘 반면, 벡터 DB는 근사 최근접 이웃 검색(ANN, Approximate Nearest Neighbor) 또는 정확한 최근접 이웃 검색을 최적화하여 시맨틱 검색, 추천 시스템, 이상 탐지, RAG(Retrieval-Augmented Generation) 등의 AI 애플리케이션에서 필수적입니다.

From Microsoft


벡터 DB의 핵심 구성 요소

실제 운영 환경에서 사용되는 벡터 DB는 다음과 같은 핵심 요소로 구성됩니다:

  • 임베딩 저장소: 고차원 벡터와 메타데이터를 저장하는 스토리지 엔진
  • 인덱싱 엔진: 빠른 ANN 검색을 위한 HNSW, IVF, PQ, ANNOY 등의 인덱스 구조
  • 검색 API: 코사인 유사도, 내적, 유클리디안 거리 기반 검색을 위한 인터페이스 (REST, gRPC, Python 등)
  • 메타데이터 필터링: 벡터 유사도와 함께 SQL과 유사한 조건으로 하이브리드 검색 지원
  • 영속성 계층: RocksDB, 디스크 스냅샷 등 장애 복구 및 수평 확장을 위한 저장 백엔드
  • 보안 및 동시성: ACL, 멀티 테넌트 분리, TLS, JWT 기반 접근 제어

대표적인 벡터 DB 솔루션

2025년 기준으로 널리 사용되는 벡터 데이터베이스는 다음과 같습니다:

  • FAISS (Facebook AI Similarity Search): Meta가 개발한 오픈소스 C++/Python 라이브러리로, GPU 지원을 통한 유사도 검색에 최적화됨. 완전한 DB는 아니나 내장 가능.
  • Pinecone: 메타데이터 필터링, 하이브리드 검색, 실시간 업데이트를 지원하는 완전관리형 클라우드 네이티브 벡터 DB
  • Weaviate: OpenAI, HuggingFace, Cohere와 연동 가능한 내장 ML 모듈 및 GraphQL 지원을 갖춘 오픈소스 DB
  • Qdrant: Rust 기반 고성능 엔진으로, JSON 필터링 및 실시간 벡터 검색에 최적화
  • Chroma: LangChain과 쉽게 통합되며, 빠른 프로토타이핑과 RAG 파이프라인에 적합한 Python 중심 경량 벡터 DB
  • Milvus: 수십억 개 벡터를 처리할 수 있는 분산형 고성능 벡터 DB

벡터 DB의 장점

  • 확장성: IVF, HNSW, PQ 등의 ANN 기법으로 수백만~수십억 개 벡터를 효율적으로 처리
  • 시맨틱 검색: 키워드 기반을 넘는 의미 기반 검색 구현 가능 – AI 추천, QA, 콘텐츠 탐색에 필수
  • 유연성: 텍스트, 이미지, 오디오 등 다양한 도메인에서 생성된 임베딩을 통합 가능
  • 통합 용이성: LangChain, RAG 기반 LLM 파이프라인과 쉽게 통합 가능
  • 지연 시간 최적화: 최적화된 인덱스를 통해 수백만 개 레코드에 대해 수 밀리초 이내 응답

벡터 DB의 단점

  • 인덱스 튜닝 복잡성: HNSW, IVF, PQ 등의 알고리즘 이해 및 튜닝이 필요
  • 하드웨어 의존성: 대규모 검색은 고메모리 노드 또는 GPU가 요구됨
  • 콜드 스타트 문제: 검색을 위해 사전학습 모델과 임베딩 생성 단계가 선행되어야 함
  • 표준 부재: 각 벡터 DB의 API 및 쿼리 구조가 상이하여 이식성 저하

FAISS 파이썬 예제

FAISS는 연구 및 로컬 환경에서 빠른 벡터 검색 파이프라인 구축에 널리 사용됩니다. 아래는 최소 예제입니다:

from google import genai
import faiss
import numpy as np

client = genai.Client(api_key="Your Gemini Key Value")
model = "gemini-embedding-exp-03-07"

# 예제 문서
documents = ["What is machine learning?", "Explain deep learning.", "Benefits of using FAISS in RAG."]

# documents에 대해서 임베딩 벡터들을 생성 
doc_embeddings = client.models.embed_content(model=model, contents=documents).embeddings

# 임베딩 벡터들을 float32 numpy array로 변환
embedding_list = [doc.values for doc in doc_embeddings]
embedding_matrix = np.array(embedding_list).astype('float32')

# FAISS index 생성
dimension = embedding_matrix.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(embedding_matrix)

# 질문에 대한 임베딩 벡터 생성
query = "Tell me about ML."
query_vec = client.models.embed_content(model=model, contents=query).embeddings
query_vec = np.array(query_vec[0].values).astype('float32').reshape(1, -1)

# 주어진 질문에 대한 Similarity search를 진행
D, I = index.search(query_vec, k=2)
print("Top matches:", [documents[i] for i in I[0]])

출력결과: Top matches: ['What is machine learning?', 'Explain deep learning.']

ML 워크플로우에서의 주요 활용 사례

  • LLM + RAG: 문서 저장소에서 임베딩 기반 관련 문서를 검색하여 LLM 응답 품질 향상
  • 유사성 탐지: 문장 임베딩을 활용한 법률/논문 등의 중복 콘텐츠 탐지
  • 이미지 검색 엔진: 시각적 유사성 기반 이미지 역검색
  • 멀티모달 AI: 텍스트, 이미지, 오디오 임베딩을 통합하여 추천 및 정렬

참고 문헌