벡터 데이터베이스
벡터 데이터베이스는 텍스트·이미지 등을 임베딩한 고차원 벡터를 저장하고, 근사 최근접 이웃(ANN) 검색으로 질의 벡터와 의미가 가장 가까운 벡터를 빠르게 찾아 주는 데이터베이스입니다. 정확히 일치하는 값을 찾는 전통 DB와 달리 유사도(거리)를 기준으로 검색합니다.
- 벡터 데이터베이스는 임베딩 벡터를 저장하고 근사 최근접 이웃(ANN) 검색으로 유사도 질의를 처리하는 데이터베이스입니다.
- 전통 DB가 값의 정확한 일치를 찾는 것과 달리, 벡터 DB는 코사인 유사도·유클리드 거리 같은 유사도 척도로 "가장 비슷한 벡터"를 찾습니다.
- 전수 비교(brute force)는 느리기 때문에 HNSW·IVF 같은 인덱스로 정확도와 속도를 맞바꾸어 대규모에서도 밀리초 단위로 검색합니다.
- 의미 검색, 추천, 그리고 LLM에 외부 지식을 붙이는 RAG의 핵심 인프라로 쓰입니다.
개요
벡터 데이터베이스는 임베딩 벡터를 저장하고 근사 최근접 이웃(Approximate Nearest Neighbor, ANN) 검색으로 유사도 질의를 처리하는 데이터베이스입니다. 텍스트·이미지·오디오 같은 데이터를 임베딩 모델에 통과시키면 의미를 담은 수백~수천 차원의 숫자 배열(벡터)이 나오는데, 이 벡터들을 인덱싱·저장하고 "질의 벡터와 가장 가까운 N개"를 빠르게 찾아 주는 것이 벡터 DB의 핵심 역할입니다. Pinecone은 벡터 데이터베이스를 "빠른 검색과 유사도 질의를 위해 벡터 임베딩을 인덱싱·저장하며, CRUD·메타데이터 필터링·수평 확장 같은 기능을 제공하는 시스템"으로 정의합니다.
의미가 비슷한 데이터일수록 벡터 공간에서 거리가 가깝다는 성질을 이용하기 때문에, 키워드가 정확히 일치하지 않아도 "의미가 통하는" 결과를 찾을 수 있습니다. 이 때문에 벡터 DB는 의미 검색(semantic search), 추천 시스템, 그리고 LLM이 답변을 만들 때 외부 지식을 끌어오는 검색 증강 생성(RAG)의 기반 인프라로 자리 잡았습니다.
전통 데이터베이스 vs 벡터 데이터베이스
가장 근본적인 차이는 "무엇을 일치로 보는가"에 있습니다. Pinecone은 "전통 데이터베이스에서는 보통 값이 질의와 정확히 일치하는 행을 찾지만, 벡터 데이터베이스에서는 유사도 척도를 적용해 질의와 가장 비슷한 벡터를 찾는다"라고 설명합니다.
| 구분 | 전통(관계형/스칼라) DB | 벡터 데이터베이스 |
|---|---|---|
| 검색 방식 | 값의 정확한 일치(=, LIKE, 범위) | 유사도(거리) 기반 근사 검색 |
| 데이터 형태 | 숫자·문자열 등 스칼라 값, 정형 행/열 | 고차원 임베딩 벡터(수백~수천 차원) |
| 질의 결과 | 조건을 만족하는 정확한 행 집합 | 질의 벡터와 가까운 상위 N개(근사) |
| 핵심 인덱스 | B-트리, 해시 인덱스 | HNSW, IVF 등 ANN 인덱스 |
| 트레이드오프 | 정확성 보장 | 정확도와 속도를 맞바꿈(근사 결과) |
| 대표 용도 | 트랜잭션, 집계, 정형 질의 | 의미 검색, 추천, RAG |
전통 스칼라 기반 DB는 고차원 벡터의 복잡성과 규모를 감당하기 어렵습니다. 벡터 DB는 "질의 벡터가 주어졌을 때 컬렉션에서 가장 가까운 N개를 찾는다"는 한 가지 연산에 최적화되어 있고, 이 연산이 바로 근사 최근접 이웃 검색입니다.
근사 최근접 이웃(ANN)과 인덱스
저장된 모든 벡터를 질의 벡터와 일일이 비교하는 전수 검색(brute force)은 정확하지만, 고차원 벡터가 수백만~수십억 개로 늘어나면 너무 느려집니다. 그래서 벡터 DB는 해싱·양자화·그래프 기반 기법을 동원한 ANN 알고리즘으로 전체를 훑지 않고도 가까운 벡터를 찾습니다. Pinecone의 설명처럼 "벡터 DB가 근사 결과를 제공하므로 우리가 고려하는 주된 트레이드오프는 정확도와 속도 사이의 균형"입니다. AWS 역시 "인덱싱은 유사도 검색을 크게 빠르게 하지만, 결과를 만들 때 근사 최근접 이웃(ANN) 알고리즘을 사용하며, ANN은 정확도를 내주는 대신 성능과 메모리 효율을 얻는다"라고 정리합니다.
HNSW
HNSW(Hierarchical Navigable Small World)는 가장 널리 쓰이는 그래프 기반 인덱스입니다. 여러 해상도의 계층으로 이루어진 다층 그래프를 만들어, 가장 거친 상위 계층의 진입점에서 시작해 점점 세밀한 하위 계층으로 내려가며 질의 벡터에 가까운 이웃을 탐색합니다. Pinecone은 HNSW를 "벡터 유사도 검색에서 최고 수준의 성능을 내는 인덱스 중 하나로, 매우 빠른 검색 속도와 우수한 재현율(recall)을 제공한다"고 평가하면서, 다만 "메모리 효율 측면에서는 최선이 아니다"라고 덧붙입니다.
IVF
IVF(Inverted File) 계열 인덱스는 벡터 공간을 여러 리스트(클러스터)로 나눈 뒤, 질의 벡터와 가까운 일부 리스트만 검색합니다. 일반적으로 그래프 기반 인덱스보다 빌드가 빠르고 메모리 사용이 적은 대신, 질의 성능은 HNSW가 더 우수한 편입니다. Milvus는 IVF_FLAT·IVF_SQ8·IVF_PQ 등으로 정확도·속도·메모리 사이의 서로 다른 균형점을 제공합니다.
거리 척도
"가깝다"의 기준이 되는 유사도 척도는 보통 다음 세 가지입니다.
- 코사인 유사도: 두 벡터가 이루는 각도의 코사인으로 -1에서 1 사이 값을 가집니다.
- 유클리드 거리: 벡터 공간에서 두 점 사이의 직선 거리입니다.
- 내적(dot product): 두 벡터의 크기와 사이 각도의 코사인을 함께 반영합니다.
주요 솔루션
벡터 DB는 크게 전용 벡터 DB와 기존 DB의 확장 형태로 나뉩니다. Pinecone은 대표적인 관리형 전용 벡터 DB이고, Milvus와 Weaviate는 널리 쓰이는 오픈소스 전용 벡터 DB입니다. Milvus는 IVF·HNSW·DiskANN·GPU 가속 인덱스 등 다양한 인덱스를 지원해 지연시간과 정확도 사이의 균형을 세밀하게 조정할 수 있습니다.
한편 별도의 전용 시스템을 도입하지 않고 기존 PostgreSQL에 벡터 검색을 더하는 길도 있습니다. 오픈소스 확장 pgvector는 임베딩을 관계형 데이터와 같은 곳에 저장하면서 ACID·시점 복구·JOIN을 그대로 유지하고, HNSW와 IVFFlat 두 인덱스를 지원합니다. 거리 연산자로는 L2 거리(<->), 내적(<#>), 코사인 거리(<=>) 등을 제공합니다.
-- pgvector: 3차원 벡터 컬럼과 HNSW 인덱스 생성
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
CREATE INDEX ON items USING hnsw (embedding vector_l2_ops);
-- 질의 벡터와 L2 거리가 가까운 상위 5개 조회
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;근거·사례
생성형 AI에서 벡터 DB의 역할은 RAG 파이프라인에서 분명하게 드러납니다. AWS는 벡터 DB를 "효율적인 최근접 이웃 질의 알고리즘과 적절한 인덱스로 벡터를 대규모로 저장하고 질의할 수 있게 해 주는 시스템"으로 정의하면서, RAG에서는 "앞서 사용한 것과 동일한 임베딩 모델로 사용자 입력을 벡터로 만든 뒤, 그 입력에 대해 벡터 공간에서 최근접 이웃을 질의한다"고 설명합니다. 즉 사용자의 질문을 임베딩해 가장 관련 있는 문서 조각을 벡터 DB에서 꺼내고, 이를 근거로 LLM이 답변을 생성합니다.
이 구조 덕분에 RAG는 모델을 재학습하거나 파인튜닝하지 않고도 최신·도메인 지식을 답변에 반영할 수 있어, 사실에 근거한 응답을 만드는 표준 패턴으로 자리 잡았습니다.