Vector Databases
개요
벡터 데이터베이스는 텍스트, 이미지, 또는 기타 데이터의 의미를 표현하는 고차원 벡터(임베딩)를 저장하고, 쿼리 벡터와 가장 유사한 항목들을 찾아냅니다. 정확한 키워드를 매칭하는 대신, 코사인 유사도 같은 거리 척도를 사용해 의미적 근접성으로 결과의 순위를 매깁니다. AI 앱을 위한 시맨틱 검색, 추천, 검색 증강 생성(RAG)을 구동합니다.
강점
- ANN 인덱스를 통한 수백만 개 임베딩에 대한 빠른 유사도 검색.
- 키워드뿐 아니라 의미를 이해하는 시맨틱 검색과 RAG를 가능하게 합니다.
- 다양한 선택지: pgvector, Pinecone, Qdrant, Weaviate, Milvus, Chroma.
- 메타데이터 필터링으로 시맨틱 검색과 구조화된 제약 조건을 결합합니다.
- 근사 최근접 이웃(approximate-nearest-neighbor) 알고리즘으로 대규모 코퍼스까지 확장됩니다.
트레이드오프
- 결과는 근사값입니다. 튜닝은 재현율(recall)과 속도를 맞바꿉니다.
- 임베딩 품질은 벡터를 생성한 모델에 전적으로 달려 있습니다.
- 모델을 바꾸면 전체 코퍼스를 다시 임베딩해야 합니다.
- 저장 공간과 메모리는 차원 수와 데이터셋 크기에 따라 늘어납니다.
언제 사용하나
시맨틱 검색, 문서 Q&A, 추천, 중복 제거, 그리고 관련 컨텍스트를 LLM에 공급하는 RAG 파이프라인에 벡터 데이터베이스를 사용하세요. 규모가 크지 않다면 pgvector 확장을 통해 PostgreSQL의 관계형 데이터 옆에 벡터를 함께 둘 수 있습니다.
바이브 코딩 적합성
AI를 이끌 때는 세 가지를 명확히 하세요. 어떤 임베딩 모델을 쓰는지(벡터 차원이 인덱스와 일치하도록), 거리 척도(텍스트에는 코사인이 일반적), 그리고 임베딩 전에 원본 문서를 어떻게 청크(chunk)로 나누는지입니다. 필터링할 수 있도록(예: user_id나 doc_type으로) 각 벡터 옆에 유용한 메타데이터를 저장하고, 임베딩 코드와 쿼리 코드가 동일한 모델을 쓰게 하도록 AI에게 요청하세요. 좋은 팁: 상위 k개 청크와 그 소스 id를 함께 반환하는 RAG 검색 단계를 AI가 만들게 하세요. 그러면 답변의 추적이 가능해지고 모델이 실제로 어떤 컨텍스트를 사용했는지 검증할 수 있습니다.
-- PostgreSQL with the pgvector extension
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE documents (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
content TEXT NOT NULL,
doc_type TEXT,
embedding VECTOR(1536) -- 임베딩 모델과 반드시 일치해야 함
);
-- 코사인 거리를 위한 근사 최근접 이웃 인덱스
CREATE INDEX ON documents
USING hnsw (embedding vector_cosine_ops);
-- 쿼리 임베딩($1)과 가장 유사한 상위 5개 청크
SELECT id, content
FROM documents
WHERE doc_type = 'manual'
ORDER BY embedding <=> $1
LIMIT 5;