
벡터 데이터베이스 완전 정복: AI가 '의미'를 검색하는 시대의 새로운 저장소
'강아지 사진'을 검색하면 'puppy', '댕댕이', '반려견' 사진도 찾아주는 검색. 키워드가 아닌 '의미'로 검색하는 기술의 핵심에 벡터 데이터베이스가 있다. 임베딩이 무엇이고, ANN 알고리즘이 어떻게 작동하며, RAG에서 왜 필수인지를 논문과 실전 사례로 풀어본다.

'강아지 사진'을 검색하면 'puppy', '댕댕이', '반려견' 사진도 찾아주는 검색. 키워드가 아닌 '의미'로 검색하는 기술의 핵심에 벡터 데이터베이스가 있다. 임베딩이 무엇이고, ANN 알고리즘이 어떻게 작동하며, RAG에서 왜 필수인지를 논문과 실전 사례로 풀어본다.
기존 검색의 한계를 생각해 보자:
WHERE name LIKE '%강아지%' → "강아지"라는 글자가 정확히 포함된 것만둘 다 키워드 매칭이다. "강아지"라는 단어가 문서에 있어야 찾는다.
하지만 인간은 다르게 검색한다. "강아지"를 검색하면 "puppy", "댕댕이", "반려견", "골든 리트리버 사진" — 단어는 다르지만 의미가 같은 결과를 기대한다.
"키워드가 아니라 '의미'로 검색할 수는 없을까?"
이것이 벡터 검색(Vector Search) 의 핵심이고, 이를 위한 전문 저장소가 벡터 데이터베이스(Vector Database) 다.
컴퓨터는 "강아지"라는 단어의 의미를 이해하지 못한다. 하지만 이 단어를 숫자 배열(벡터) 로 변환하면 "의미"를 수학적으로 다룰 수 있다.
이 변환을 임베딩(Embedding) 이라 부른다.
from openai import OpenAI
client = OpenAI()
# 텍스트를 벡터로 변환
response = client.embeddings.create(
model="text-embedding-3-small",
input="강아지는 귀엽다"
)
vector = response.data[0].embedding
# [0.012, -0.034, 0.056, 0.078, -0.023, ...] ← 1,536개의 숫자
"강아지는 귀엽다"라는 문장이 1,536개의 소수점 숫자 배열로 변환된다. 이 벡터가 문장의 "의미"를 수학적으로 인코딩한 것이다.
임베딩의 마법: 의미가 비슷한 텍스트는 벡터 공간에서 가까이 위치한다.
"강아지"의 벡터와 "puppy"의 벡터는 수학적으로 가깝고, "강아지"와 "자동차"의 벡터는 멀다. 이 거리(유사도)를 측정하여 "의미적으로 비슷한 것"을 찾는 것이 벡터 검색이다.
벡터 검색의 핵심 문제: 수백만~수십억 개의 벡터 중에서 쿼리 벡터와 가장 가까운 K개를 빠르게 찾는 것. 이것을 K-Nearest Neighbor(KNN) 검색이라 한다.
완벽하게 가장 가까운 것을 찾으려면(정확한 KNN) 모든 벡터와의 거리를 계산해야 한다. 10억 개의 1,536차원 벡터면? 계산이 수 분~수 시간.
해결: 100% 정확하지는 않지만 99%+ 정확도로 수 밀리초에 찾는 근사 알고리즘 — ANN(Approximate Nearest Neighbor).
| 알고리즘 | 원리 | 대표 구현 | 사용처 |
|---|---|---|---|
| HNSW | 계층적 그래프 탐색. 멀리서 대략 찾고, 가까이서 정밀 탐색 | hnswlib, FAISS | 가장 많이 사용 |
| IVF | 벡터를 클러스터로 나누고, 쿼리와 가까운 클러스터만 검색 | FAISS | 대규모 데이터셋 |
| PQ | 벡터를 압축하여 메모리 절약 + IVF와 결합 | FAISS | 메모리 제한 환경 |
| Annoy | 랜덤 투영 트리. 빌드 빠르지만 정확도 중간 | Annoy (Spotify) | 정적 데이터셋 |
HNSW(Hierarchical Navigable Small World) 가 2026년 현재 가장 많이 사용되는 알고리즘이다. 2016년 Malkov와 Yashunin의 논문 "Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs"에서 제안됐다.
FAISS(Facebook AI Similarity Search) 는 2017년 Meta AI가 공개한 벡터 검색 라이브러리다. 논문 "Billion-scale similarity search with GPUs" (Johnson 등, 2017)에서 GPU를 활용한 대규모 벡터 검색을 제시했다.
LLM(GPT, Claude)은 학습 데이터까지만 알고 있다. 당신 회사의 내부 문서, 최신 데이터, 도메인 지식은 모른다.
"우리 회사의 재택근무 정책이 뭐야?"라고 물으면 → LLM은 모른다 (학습 데이터에 없으니까).
RAG는 이 문제를 해결한다:
벡터 DB의 역할: 질문과 의미적으로 가장 관련 있는 문서를 빠르게 찾아주는 것. 이것이 없으면 LLM은 "모른다"고 답하거나, 있는 것처럼 지어낸다(환각).
| 제품 | 유형 | 강점 | 적합한 경우 |
|---|---|---|---|
| pgvector | PostgreSQL 확장 | 기존 PG에 추가만, SQL 통합, 무료 | PG 사용 중, 소~중규모 |
| Pinecone | 전문 벡터 DB (관리형) | 완전 관리형, 간단, 빠른 시작 | 빠른 프로토타이핑, 운영 부담 최소화 |
| Weaviate | 전문 벡터 DB (오픈소스) | 멀티모달, GraphQL API | 이미지+텍스트 통합 검색 |
| Milvus | 전문 벡터 DB (오픈소스) | 대규모 특화, GPU 지원 | 10억+ 벡터, 고성능 |
| Qdrant | 전문 벡터 DB (오픈소스) | Rust 구현, 고성능, 필터링 강력 | 고성능 + 복잡한 필터 |
| Chroma | 전문 벡터 DB (임베디드) | 경량, Python 네이티브 | 프로토타이핑, 로컬 개발 |
| OpenSearch k-NN | OpenSearch 확장 | 풀텍스트 + 벡터 하이브리드 | 키워드+의미 통합 검색 |
| MongoDB Atlas Vector | MongoDB 확장 | 문서 DB + 벡터 통합 | MongoDB 사용 중 |
| Aurora pgvector | Aurora PG 확장 | Aurora + 벡터, 관리형 | AWS Aurora 사용 중 |
pgvector는 PostgreSQL의 확장(Extension)으로, Aurora PostgreSQL에서도 사용 가능하다.
-- pgvector 확장 활성화
CREATE EXTENSION vector;
-- 벡터 열이 있는 테이블 생성
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
title TEXT,
content TEXT,
embedding VECTOR(1536) -- 1,536차원 벡터
);
-- 벡터 인덱스 생성 (HNSW)
CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);
-- 의미 검색: "재택근무 정책"의 벡터와 가장 가까운 5개 문서
SELECT title, content,
1 - (embedding <=> '[0.012, -0.034, ...]') AS similarity
FROM documents
ORDER BY embedding <=> '[0.012, -0.034, ...]'
LIMIT 5;
SQL로 벡터 검색을 할 수 있다. 기존 PostgreSQL 도구(pg_dump, pgAdmin, ORM)가 모두 작동한다. 새로운 도구, 새로운 인프라가 불필요.
연구에 따르면, 임베딩 벡터에서 원본 텍스트를 부분적으로 복원하는 것이 가능하다. 2023년 논문 "Text Embeddings Reveal (Almost) As Much As Text" (Morris 등)에서 텍스트 임베딩으로부터 원본 텍스트를 상당 부분 재구성할 수 있음을 증명했다.
| 방법 | 복잡도 | 벡터 저장소 | 적합한 경우 |
|---|---|---|---|
| Bedrock Knowledge Bases | 가장 간단 | OpenSearch Serverless (자동) | 빠른 시작, 관리 최소화 |
| Aurora pgvector | 중간 | Aurora PostgreSQL | 이미 Aurora 사용 중 |
| OpenSearch k-NN | 중간 | OpenSearch | 키워드+벡터 하이브리드 |
| 직접 구축 | 높음 | Pinecone/Milvus 등 | 완전한 커스터마이징 |
벡터 검색은 "의미"를 잡지만, 정확한 키워드 매칭에서는 전통적 검색보다 약할 수 있다. 예: 제품 코드 "A-1234"를 검색하면 벡터 검색은 의미적으로 비슷한 다른 제품을 반환할 수 있다.
하이브리드 검색: 키워드 검색(BM25)과 벡터 검색을 결합하여 둘의 장점을 모두 취한다.
| 키워드 검색 | 벡터 검색 | 하이브리드 | |
|---|---|---|---|
| "A-1234" | ✓ 정확히 찾음 | △ 비슷한 것을 찾을 수 있음 | ✓ 정확 + 관련 |
| "따뜻한 느낌의 케이스" | ✗ 키워드 없으면 못 찾음 | ✓ 의미적으로 찾음 | ✓ 의미적으로 찾음 |
| "MongoDB vs PostgreSQL" | △ 키워드 매칭 | ✓ 비교 문서 찾음 | ✓ 최적 |
OpenSearch와 MongoDB Atlas는 하이브리드 검색을 네이티브로 지원한다.
Notion AI는 사용자의 워크스페이스에 있는 모든 문서를 벡터화하여, "우리 팀의 Q3 목표는?"같은 질문에 관련 문서를 찾아 답변한다. 이것이 RAG다.
Spotify는 노래를 벡터로 변환하여, "이 곡과 비슷한 곡"을 벡터 유사도로 추천한다. 장르, 템포, 무드가 비슷한 곡이 벡터 공간에서 가까이 위치한다.
"바다가 보이는 조용한 숙소"라고 검색하면, 키워드 매칭이 아닌 의미적으로 비슷한 숙소 리스팅을 벡터 검색으로 찾는다. 숙소 설명, 리뷰, 이미지를 모두 벡터화.
2026년의 임베딩 모델은 2023년 대비 훨씬 강력하다:
PostgreSQL(pgvector), MongoDB(Atlas Vector), OpenSearch(k-NN), Redis(Vector), DynamoDB(곧 지원 예상) — 전문 벡터 DB 없이도 벡터 검색이 가능한 시대가 오고 있다.
장기적으로 전문 벡터 DB는 초대규모(10억+ 벡터)이거나 특수 기능(GPU 가속, 멀티모달)이 필요한 경우에 사용되고, 대부분의 서비스는 기존 DB의 벡터 확장으로 충분해질 것이다.
이 시리즈에서 다룬 데이터 저장소의 최종 완성판:
| 저장하는 것 | DB 유형 | 대표 제품 | 검색 방식 |
|---|---|---|---|
| 구조화된 관계 | 행 저장 RDBMS | Aurora, RDS | SQL (정확한 값) |
| 유연한 문서 | 문서 DB | MongoDB | 쿼리 언어 (필드 매칭) |
| 키-값 | 키-값 DB | DynamoDB | 키로 직접 조회 |
| 텍스트 | 검색 엔진 | OpenSearch | 역색인 (키워드 매칭) |
| 집계 분석 | 컬럼나 DW | Redshift | SQL (범위 집계) |
| 시간 순서 | 시계열 DB | Prometheus, Timestream | 시간 범위 쿼리 |
| 의미 | 벡터 DB | pgvector, Pinecone | 벡터 유사도 (의미 검색) |
| 파일 | 오브젝트 스토리지 | S3 | 키로 직접 접근 |
벡터 DB는 이 지도의 마지막 조각이다. 기존 DB들이 **"정확한 값"**을 검색했다면, 벡터 DB는 **"의미"**를 검색한다. 이것이 AI 시대의 데이터 저장소에서 가장 큰 변화다.
"강아지"를 검색하면 "puppy"도 찾아주는 것 — 이 간단해 보이는 기능 뒤에 임베딩 모델, ANN 알고리즘, 벡터 인덱스라는 기술의 탑이 쌓여 있다. 그리고 이 탑 위에서 RAG가 작동하고, AI 어시스턴트가 당신 회사의 내부 문서를 이해하고, 추천 시스템이 당신의 취향을 파악한다.
코어닷투데이의 AI 서비스에서 벡터 DB는 핵심 인프라다. 도메인 지식을 벡터로 저장하고, 사용자의 질문에 가장 관련 있는 정보를 밀리초 만에 검색하여, AI가 정확하고 신뢰할 수 있는 답변을 제공한다. 키워드가 아닌 의미로 검색하는 시대 — 벡터 DB가 그 시대의 기반이다.