305. 벡터 DB

핵심 인사이트 (3줄 요약)

  1. 본질: 벡터 DB(Vector Database)는 비정형 데이터(텍스트, 이미지, 오디오 등)를 임베딩(Embedding) 모델로 변환한 고차원 벡터를 저장하고, 유사도 검색(Similarity Search)을高速で実行するデータベース이다。
  2. 가치: AI/ML 모델의 맥락 기억(window) 한계를 극복하고, RAG(Retrieval-Augmented Generation)에서 외부 지식을 제공하며, 얼굴 인식, 추천 시스템 등에 활용된다.
  3. **융합]: 임베딩 모델, 유사도 검색, ANN 알고리즘, HNSW, RAG, LLM, Milvus, Pinecone과 밀접하게 연관된다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

개념 정의

벡터 DB(Vector Database)는 텍스트, 이미지, 오디오, 비디오 등 비정형 데이터를 임베딩(Embedding) 모델로 변환한 고차원 벡터(예: 1536차원, 3072차원)를 저장하고, 이 벡터들 사이의 유사도(Similarity)를高速で探索하는 数据库이다. 임베딩 모델(예: OpenAI text-embedding-3, Sentence-BERT)은非構造化データを固定長の数値ベクトル(埋め込み)に変換する。벡터 DB는 이러한 벡터를 인덱싱하여,"비슷한 데이터를 찾아줘"라는 쿼리에快速응답할 수 있게 한다.

필요성

LLM(대형 언어 모델)은固定のコンテキストウィンドウ(通常4K〜128K 토큰)만 처리할 수 있어, 대규모 외부 지식베이스나 документов를 직접 입력할 수 없다. 벡터 DB는 LLM의 이러한 한계를 극복하기 위한 핵심 인프라로, 먼저 문서를 임베딩하여 벡터 DB에 저장하고, 사용자의 질문과 관련된 문서를 벡터 검색을 통해 가져온 후, 이를 LLM에コンテキストとして提供を支援する(RAG 패턴)。또한 얼굴 인식, 음성 검색, 추천 시스템, 챗봇 등"비슷한 것을 찾아줘"라는需求에 효과적으로対応できる。

배경

벡터 검색은不是新しい技術이지만、2020년대 LLM의 폭발적 성장과 함께 부상했다. Faiss(Facebook AI), Annoy(Spotify), ScaNN(Google) 등 임베딩 검색 라이브러리가 먼저 등장했고, 이후 전용 벡터 DB(Milvus, Pinecone, Qdrant, Weaviate 등)가 등장했다. 2023년以降、RAG(Retrieval-Augmented Generation) 패턴의流行により、ベクトルDBはLLM应用の必須インフラとして广泛关注された。Redis、Elasticsearch、PostgreSQL도 벡터 검색 기능을 추가했으며, Chroma는 임베딩 검색을 위한专门화된 벡터 DB로 인기를얻고 있다.

비유

벡터 DB는大型미술관의 큐레이터와 같다. 각 그림(데이터)을 특성에 따라 3D 공간의 한 점(벡터)으로 표현하면, 비슷한 스타일, 색상, 주제의 그림은 공간적으로 가깝게 위치한다.来访者が「この絵に似たものを 찾아줘」と言えば, 큐레이터는 공간에서 가까운 그림을 빠르게 추천할 수 있다. 전통적인 DB가" exacte match"만 찾았다면, 벡터 DB는"類似한"을 semantics 단위로 찾는다.

📢 섹션 요약: 벡터 DB는 비정형 데이터를 임베딩 벡터로 변환하여 저장하고, 유사도 검색으로"비슷한 데이터"를 semantics 단위로 찾는 DB이다.


Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)

벡터 DB 아키텍처

┌─────────────────────────────────────────────────────────────────────────────┐
│                    벡터 DB 아키텍처                                              │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  [임베딩 + 벡터 검색 전체 흐름]                                             │
│  ─────────────────────────────────                                         │
│                                                                             │
│       ┌──────────┐    ┌──────────┐    ┌──────────┐                        │
│       │ 비정형 데이터 │    │ 임베딩 모델 │    │ 벡터 DB   │                        │
│       │(문서, 이미지 │───▶│(Embedding │───▶│ (저장 +  │                        │
│       │ 오디오 등)  │    │  Model)   │    │  인덱싱) │                        │
│       └──────────┘    └──────────┘    └────┬─────┘                        │
│                                             │                               │
│       ┌────────────────────────────────────┼───────────────────────┐   │
│       │                                    │                       │   │
│       ▼                                    ▼                       ▼   │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │                    벡터 DB 내부                                   │   │
│  │  ────────────────────────────────────────────────────────────  │   │
│  │                                                                   │   │
│  │  ┌───────────────────────────────────────────────────────────┐  │   │
│  │  │  Collection / Index (HNSW, IVF, DiskANN 등)               │  │   │
│  │  │  ──────────────────────────────────────────────────────│  │   │
│  │  │    Vector[0]: [0.12, -0.45, 0.78, ...]  → 문서1       │  │   │
│  │  │    Vector[1]: [0.34, -0.12, 0.56, ...]  → 문서2       │  │   │
│  │  │    Vector[2]: [0.89, 0.23, -0.34, ...]  → 문서3       │  │   │
│  │  │    ...                                                       │  │   │
│  │  │    (수백만~수십억 벡터 저장 가능)                            │  │   │
│  │  └───────────────────────────────────────────────────────────┘  │   │
│  │                                                                   │   │
│  │  ┌───────────────────────────────────────────────────────────┐  │   │
│  │  │  Metadata Index (필터링용)                                 │  │   │
│  │  │  ──────────────────────────────────────────────────────│  │   │
│  │  │    문서1: {source: "web", date: "2024-01"}              │  │   │
│  │  │    문서2: {source: "pdf", date: "2024-02"}              │  │   │
│  │  │    문서3: {source: "web", date: "2024-03"}              │  │   │
│  │  │  ※ 메타데이터로 필터링 후 벡터 검색 수행                   │  │   │
│  │  └───────────────────────────────────────────────────────────┘  │   │
│  │                                                                   │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

ANN 알고리즘과 인덱스

┌─────────────────────────────────────────────────────────────────────────────┐
│                    ANN (Approximate Nearest Neighbor) 알고리즘                    │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  [정확한 검색 vs 근사 검색]                                                 │
│  ────────────────────────────                                              │
│                                                                             │
│  • 정확한 최근접 이웃(Exact NN) 검색: 모든 벡터와 거리를 계산               │
│    → 수백만~수십억 벡터에서 수십~수백ms 소요 (비현실적)                    │
│  • 근사 최근접 이웃(ANN) 검색: 정확도를 일부 희생하여 속도를 획기적으로 향상  │
│    → 수십ms 내에 수억 벡터에서도 관련 벡터 탐색 가능                        │
│                                                                             │
│  [주요 ANN 알고리즘]                                                        │
│  ──────────────────                                                          │
│                                                                             │
│  ┌────────────────┬──────────┬──────────┬──────────┐                      │
│  │     알고리즘    │  HNSW   │   IVF   │ DiskANN │                      │
│  │                │(그래프)  │ (역인덱스) │ (디스크)  │                      │
│  ├────────────────┼──────────┼──────────┼──────────┤                      │
│  │ 검색 속도      │ 매우 빠름 │ 빠름    │ 빠름    │                      │
│  ├────────────────┼──────────┼──────────┼──────────┤                      │
│  │ 메모리 사용량  │ 높음     │ 중간    │ 낮음    │                      │
│  ├────────────────┼──────────┼──────────┼──────────┤                      │
│  │ 구축 속도      │ 느림     │ 빠름    │ 중간    │                      │
│  ├────────────────┼──────────┼──────────┼──────────┤                      │
│  │ 대용량 적합성  │ 보통     │ 보통    │ 매우 적합│                      │
│  ├────────────────┼──────────┼──────────┼──────────┤                      │
│  │ 사용 产品      │ Milvus,  │ Milvus,  │ Milvus,  │                      │
│  │                │ Qdrant,  │ Pinecone │ Scann    │                      │
│  │                │ Weaviate │          │ (Google) │                      │
│  └────────────────┴──────────┴──────────┴──────────┘                      │
│                                                                             │
│  [HNSW (Hierarchical Navigable Small World)]                              │
│  ─────────────────────────────────────────────                             │
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐ │
│  │  HNSW 개념: 다중 레이어 그래프 (上层粗→下层细)                         │ │
│  │  ───────────────────────────────────────────────────────────────  │ │
│  │                                                                       │ │
│  │  Layer 2 (상위): ████     ████     ████     (빠른 이동)           │ │
│  │                    └──────────┴──────────┘                           │ │
│  │                         │              │                               │ │
│  │                         ▼              ▼                               │ │
│  │  Layer 1 (중간): ████████  ████████  ████████                      │ │
│  │                    └──────────┴──────────┘                           │ │
│  │                         │              │                               │ │
│  │                         ▼              ▼                               │ │
│  │  Layer 0 (하위): 모든 노드 연결 (정밀한 최근접 탐색)                  │ │
│  │                    ● ● ● ● ● ● ● ● ● ● ● ● ●                       │ │
│  │                                                                       │ │
│  │  검색: Layer 2에서 시작 → 빠른 점프 → Layer 1 → Layer 0 (정밀)     │ │
│  │  ※ 상위 레이어ほどノード数が少ないため、高速に粗い検索が可能             │ │
│  └─────────────────────────────────────────────────────────────────────┘ │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

벡터 유사도 측정

┌─────────────────────────────────────────────────────────────────────────────┐
│                    벡터 유사도 측정 방법                                          │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  [1] 코사인 유사도 (Cosine Similarity)                                      │
│  ─────────────────────────────────────                                      │
│  • 두 벡터 간의 각도(θ)를 측정: similarity = cos(θ)                         │
│  • [-1, 1] 범위, 1에 가까울수록 유사                                        │
│  •テキスト 임베딩에서 가장 많이 사용                                          │
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐ │
│  │  A = [1, 2, 3]  B = [2, 4, 6]                                       │ │
│  │  cos(A, B) = (1*2 + 2*4 + 3*6) / (√14 × √56) ≈ 0.98 (높은 유사)    │ │
│  └─────────────────────────────────────────────────────────────────────┘ │
│                                                                             │
│  [2] 유클리디안 거리 (L2 Distance)                                         │
│  ─────────────────────────────────                                         │
│  • 두 벡터 간의 직선 거리: distance = √(Σ(Ai - Bi)²)                     │
│  • [0, ∞) 범위, 0에 가까울수록 유사                                           │
│  • 이미지 임베딩에서 자주 사용                                                │
│                                                                             │
│  [3] 내적 (Dot Product)                                                    │
│  ───────────────────────                                                    │
│  • 벡터 성분의 곱의 합: dot = Σ(Ai × Bi)                                  │
│  • 정규화되지 않은 벡터에서 크기 정보 포함                                     │
│  • 추천 시스템 등 일부 사용场景에서 선호                                      │
│                                                                             │
│  [선택 가이드]                                                             │
│  ───────────                                                              │
│  ✅ 코사인 유사도: 텍스트 임베딩, 방향(의미) 중요할 때                      │
│  ✅ 유클리디안 거리: 절대적 위치 중요할 때 (이미지 등)                       │
│  ✅ 내적: 이미 정규화된 벡터, Rankings 등                                    │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

RAG 패턴과 벡터 DB

┌─────────────────────────────────────────────────────────────────────────────┐
│                    RAG (Retrieval-Augmented Generation) 패턴                   │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  [LLM의 한계]                                                             │
│  ───────────                                                              │
│  • 고정된 훈련 데이터 이후의 지식 → 최신 정보 부재                          │
│  • Hallucination (그럴듯한 거짓 정보 생성) 위험                              │
│  • 전문 도메인 지식 부족                                                    │
│                                                                             │
│  [RAG 아키텍처]                                                           │
│  ───────────────                                                          │
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐ │
│  │                    RAG Pipeline                                       │ │
│  │  ────────────────────────────────────────────────────────────────  │ │
│  │                                                                       │ │
│  │  [인덱싱 단계]                                                        │ │
│  │  ┌──────────┐    ┌──────────┐    ┌──────────┐                     │ │
│  │  │ Document │───▶│ Chunker │───▶│Embedding│───▶Vector DB       │ │
│  │  │          │    │(분할)    │    │ Model   │    │                │ │
│  │  └──────────┘    └──────────┘    └──────────┘    │                │ │
│  │                                                           │                │ │
│  │  [검색 단계]                                                        │ │
│  │  ┌──────────┐    ┌──────────┐    ┌──────────┐                     │ │
│  │  │ User     │───▶│Embedding│───▶│ Vector   │──┐                  │ │
│  │  │ Query    │    │ Model   │    │ Search   │  │                  │ │
│  │  └──────────┘    └──────────┘    └──────────┘  │                  │ │
│  │                                                      │                  │ │
│  │  [생성 단계]                                                    │                  │ │
│  │  ┌──────────┐    ┌──────────┐                       │                  │ │
│  │  │  LLM     │◀───│ Prompt  │◀──────────────────────┘                  │ │
│  │  │(GPT-4,   │    │(+검색결과│                        │                  │ │
│  │  │ Claude)  │    │  포함)   │                        │                  │ │
│  │  └──────────┘    └──────────┘                       │                  │ │
│  │       │                                                       │                  │ │
│  │       ▼                                                       │                  │ │
│  │  ┌──────────┐                                                 │                  │ │
│  │  │ Response │ (정확하고 관련성 높은 답변)                     │                  │ │
│  │  └──────────┘                                                 │                  │ │
│  │                                                                       │ │
│  └─────────────────────────────────────────────────────────────────────┘ │
│                                                                             │
│  [벡터 DB가 RAG에 필수적인 이유]                                         │
│  ────────────────────────────────                                         │
│  • 수백~수천 페이지의 문서에서 관련 단락을 빠르게 찾아야 함                │
│  • 키워드 검색(BM25 등)보다 의미적 유사도 검색이 효과적                     │
│  •"비슷한 내용을 가진 문서를 찾아줘"라는 쿼리에 능동적 대응                │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] 벡터 DB는 ANN(Approximate Nearest Neighbor) 알고리즘을活用하여 대규모 벡터의近似最近傍探索을高速で実行する。HNSW는 다중 레이어 그래프로高速かつ精密な検索を提供し、현재 가장 널리 사용되는 알고리즘이다。벡터 유사도 측정에는 코사인 유사도, 유클리디안 거리, 내적 등이 있으며,用途에 따라選択한다。RAG 패턴에서 벡터 DB는"메모리" 역할을 하여, LLM이 접근할 수 있는 외부 지식베이스를 제공한다.

📢 섹션 요약: 벡터 DB는 ANN 알고리즘으로 대규모 벡터의 유사도 검색을 고속으로 수행하며, RAG 패턴에서 LLM의 외부 기억장치 역할을 수행한다.


Ⅲ. 결론

벡터 DB는 비정형 데이터를 임베딩 벡터로 변환하여 저장하고, ANN 알고리즘을 통해高速近似最近傍検索を提供する 특수 데이터베이스이다。HNSW, IVF, DiskANN 등의 ANN 알고리즘이 핵심이며, 코사인 유사도, 유클리디안 거리 등이 유사도 측정 방법으로 활용된다。 RAG 패턴에서 벡터 DB는 LLM의 컨텍스트 윈도우 한계를 극복하고, 외부 지식을 제공하여 Hallucination을 줄이는 핵심 인프라로 자리 잡았다. Milvus, Pinecone, Qdrant, Weaviate, Chroma 등 다양한 벡터 DB가 있으며, PostgreSQL의 pgvector 확장도 주목받고 있다.

📢 섹션 요약: 벡터 DB는 ANN 알고리즘으로 고차원 벡터의 유사도 검색을 고속 수행하며, RAG 패턴에서 LLM의 외부 지식 베이스로 필수적이다.


핵심 인사이트 ASCII 다이어그램 (Concept Map)

┌─────────────────────────────────────────────────────────────────────────────┐
│                    Vector Database Concept Map                                   │
│                                                                             │
│              ┌─────────────────────────────────┐                           │
              │      Vector Database (Vector DB)   │                           │
              │          (벡터 데이터베이스)           │                           │
              └───────────────┬─────────────────┘                           │
│                              │                                               │
│         ┌────────────────────┼────────────────────┐                        │
│         ▼                    ▼                    ▼                        │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐               │
│  │ ANN Algorithms│    │   Similarity  │    │Embedding    │               │
│  │ (HNSW, IVF,  │    │  Metrics     │    │  Models     │               │
│  │  DiskANN)    │    │ (Cosine, L2,  │    │ (OpenAI,    │               │
│  │              │    │  DotProduct)  │    │  SBERT)     │               │
│  └──────────────┘    └──────────────┘    └──────────────┘               │
│         │                    │                    │                       │
│         └────────────────────┼────────────────────┘                        │
│                              ▼                                               │
│                   ┌─────────────────────┐                                  │
│                   │   RAG Pattern     │                                  │
│                   │  + LLM Context    │                                  │
│                   │   Enhancement     │                                  │
│                   └─────────────────────┘                                  │
│                                                                             │
│  활용: RAG | 추천 시스템 | 얼굴 인식 | 음성 검색 | 챗봇                      │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

참고

  • 벡터 DB는 고차원 벡터를 저장하고 유사도 검색을高速で実行する。
  • ANN 알고리즘(HNSW, IVF, DiskANN)으로 근사 최근접 이웃을高速検索する。
  • 코사인 유사도, 유클리디안 거리, 내적 등이 유사도 측정 방법으로 활용된다.
  • RAG 패턴에서 LLM의 외부 지식 베이스로 필수적이다.
  • Milvus, Pinecone, Qdrant, Weaviate, Chroma 등이 있다.
  • PostgreSQL pgvector, Redis, Elasticsearch도 벡터 검색을 지원한다.
  • LLM应用, 추천 시스템, 얼굴/음성 인식 등에 활용된다.