Skip to main content

Embedding & Vector DB

텍스트를 숫자 벡터로 변환하고, 의미적으로 유사한 것을 찾는 기술 — RAG의 핵심 기반


1. 임베딩이란

1.1 핵심 개념

임베딩(Embedding)은 텍스트, 이미지 등을 **고정 크기의 밀집 벡터(dense vector)**로 변환하는 것. 의미가 유사한 것은 벡터 공간에서 가까이 위치함.

"서버 장애" → [0.12, -0.45, 0.78, ..., 0.33]  (1536차원 벡터)
"시스템 다운" → [0.11, -0.44, 0.77, ..., 0.35] (유사 → 벡터가 가까움)
"맛있는 음식" → [-0.82, 0.56, -0.11, ..., 0.91] (다름 → 벡터가 멀음)

1.2 임베딩 진화

세대대표특징
Word2Vec/GloVe단어 단위 고정 벡터"bank"가 금융/강둑 구분 못 함
ELMo문맥 반영 벡터 (RNN 기반)같은 단어도 문맥에 따라 다른 벡터
Sentence-BERT문장 단위 벡터 (Transformer)✅ 문장 유사도의 표준
OpenAI EmbeddingsAPI 기반, 고성능편리, 유료
E5 / BGE / GTE오픈소스 고성능✅ 자체 호스팅 가능

1.3 유사도 측정

방법수식특성
코사인 유사도cos(θ) = A·B / (|A|×|B|)✅ 가장 많이 사용. 방향만 비교
유클리드 거리√Σ(aᵢ-bᵢ)²크기+방향 모두 반영
내적Σaᵢ×bᵢ크기 반영. 정규화된 벡터에서는 코사인과 동일

2. Vector DB

2.1 왜 Vector DB인가

수백만 개의 문서 벡터에서 "이 쿼리와 가장 유사한 상위 K개"를 밀리초 안에 찾아야 함. 일반 DB의 B-Tree 인덱스는 고차원 벡터 검색에 적합하지 않음.

2.2 ANN (Approximate Nearest Neighbor)

정확한 최근접 이웃 검색은 O(n)이라 느림. ANN은 약간의 정확도를 포기하고 속도를 얻음.

알고리즘원리특성
HNSW계층적 그래프 탐색✅ 가장 많이 사용. 빠르고 정확
IVF벡터를 클러스터로 나누고, 관련 클러스터만 검색대규모에 적합
PQ벡터를 압축하여 메모리 절약IVF와 결합

2.3 주요 Vector DB 비교

DB유형특징적합한 환경
Chroma인메모리/로컬Python 네이티브, 간단, 개발용✅ 프로토타입, 소규모
Pinecone관리형 SaaS완전 관리, 빠른 시작, 유료운영 부담 없이 사용
Weaviate오픈소스하이브리드 검색(벡터+키워드), GraphQL중규모, 하이브리드
Milvus오픈소스대규모 분산, GPU 가속대규모 프로덕션
Qdrant오픈소스Rust 기반, 빠름, 필터링 우수중~대규모
pgvectorPostgreSQL 확장기존 PostgreSQL에 추가✅ 이미 PG 사용 중이면

2.4 선택 기준


3. 임베딩 모델 선택

모델차원오픈소스특징
OpenAI text-embedding-3-small1536편리, 유료, 고성능
OpenAI text-embedding-3-large3072최고 성능
BGE-M31024다국어, 한국어 우수
E5-mistral-7b4096LLM 기반 임베딩
GTE-Qwen2가변최신 고성능

💡 한국어를 다룬다면 다국어 모델(BGE-M3, multilingual-e5)을 선택해야 함. 영어 전용 모델은 한국어 성능이 떨어짐.


4. 실전 파이프라인

이 파이프라인이 **RAG(#12)**의 인덱싱 + 검색 단계에 해당함.


다음 글

프롬프트 엔지니어링


📝 참고 자료