DM Log

[AI 개념 및 이해 #3] 벡터 DB(Vector Database) 개념: Chroma, Pinecone, Weaviate 비교 본문

개발공부/AI

[AI 개념 및 이해 #3] 벡터 DB(Vector Database) 개념: Chroma, Pinecone, Weaviate 비교

Dev. Dong 2025. 9. 7. 16:00

검색 시스템의 진화

  • 기존검색 시스템은 단어 일치에 의존
  • LLM 시대에서 검색 시스템은 의미 기반 검색을 가능하게 하는 벡터 데이터베이스 기술 등장

전통 DB  vs  벡터 DB

[전통 DB]

  • 키워드 기반 인덱싱 (역섹인, B-트리 등)
  • 정확히 같은 단어를 찾아서 검색
  • SQL 기반 쿼리

[벡터 DB]

  • 텍스트, 이미지, 오디오 등 비정형 데이터를 벡터(숫자 좌표)로 저장
  • 질의(query)도 벡터화 → 가장 가까운 벡터를 검색
  • 유사한 의미를 가진 데이터 검색 기능

👉 즉, 벡터 DB는 검색 키워드 ≠ 단순 문자열 → 검색 키워드 = 벡터(의미 표현)


벡터 DB

[벡터 DB 동작 원리)

  1. 문서 임베딩 생성 (예: OpenAI text-embedding-3-small)
  2. 벡터 DB에 저장 (텍스트 + 임베딩 + metadata)
  3. 사용자 질문 입력 → 임베딩 변환
  4. 최근접 이웃 검색 (ANN, Approximate Nearest Neighbor)으로 가까운 벡터 탐색
  5. 유사한 문서를 반환

[주요 벡터 DB]

1. Chroma

  • 특징: 오픈 소스, 로컬/임베디드 DB
  • 장점:
    • 설치 간단 (pip install chromadb)
    • LangChain 기본 지원
    • 작은 프로젝트 / 개인 실습에 최적화
  • 단점:
    • 대규모 확장성 부족
    • 클라우드 관리형 서비스 없음

👉 실습용 / 사이드 프로젝트에 적합

2. Pinecone

  • 특징: 클라우드 기반 벡터 DB SaaS
  • 장점:
    • 무제한 확장성 (수억~수십억 벡터)
    • 빠른 검색 성능 (ANN 최적화)
    • 관리형 서비스 (백업, 스케일링 자동 지원)
  • 단점:
    • 유료 (무료 플랜 제한적)
    • 클라우드 의존성 → 로컬 개발 어려움

👉 프로덕션 환경 / 상용 서비스에 적합

3. Weaviate

  • 특징: 오픈소스 + 클라우드 모두 지원
  • 장점:
    • 그래프 DB 성격 (데이터 간 관계 표현 가능)
    • 자체 내장 임베딩 기능 (OpenAi, Cohere 등) 지원
    • 유연한 schema 기반 검색
  • 단점:
    • 러닝 커브 있음 (설정이 복잡)
    • Chroma보다 무겁고, Pinecone보다는 관리 부

👉 지식 그래프 + 벡터 검색을 함께 쓰고 싶을 때 적합

활용 시나리오

  • Chroma: 로컬 RAG 챗봇, 연구 / 실험 프로젝트
  • Pinecone: 대규모 검색 서비스, 스타트업 SaaS 제품
  • Weaviate: 관계형 + 의미 검색이 동시에 필요한 도메인 (예: 논문 인용 네트워크, 지식 그래프)

주요 벡터 DB 예시

[Chroma 예시 (로컬)]

from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

# 1. 임베딩 모델 생성
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# 2. 문서 저장
texts = ["사과는 과일이다", "자동차는 탈것이다", "바나나는 노란색 과일이다"]
vectorstore = Chroma.from_texts(texts, embeddings)

# 3. 검색 실행
query = "노란 과일"
docs = vectorstore.similarity_search(query, k=2)

for d in docs:
    print(d.page_content)

[Pinecone 예시 (클라우드)]

import pinecone
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Pinecone

# 1. Pinecone 초기화 (API 키, 환경 지정 필요)
pinecone.init(api_key="YOUR_API_KEY", environment="us-east-1")

# 2. 임베딩 모델 생성
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# 3. 인덱스 연결 (사전 생성 필요)
index_name = "example-index"
vectorstore = Pinecone.from_texts(
    ["사과는 과일이다", "자동차는 탈것이다", "바나나는 노란색 과일이다"],
    embeddings,
    index_name=index_name
)

# 4. 검색 실행
query = "노란 과일"
docs = vectorstore.similarity_search(query, k=2)

for d in docs:
    print(d.page_content)

[Weaviate 예시 (그래프 + 벡터)]

import weaviate
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Weaviate

# 1. Weaviate 서버 연결 (로컬/클라우드)
client = weaviate.Client("http://localhost:8080")

# 2. 임베딩 모델 생성
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# 3. 문서 저장
texts = ["사과는 과일이다", "자동차는 탈것이다", "바나나는 노란색 과일이다"]
vectorstore = Weaviate.from_texts(texts, embeddings, client=client)

# 4. 검색 실행
query = "노란 과일"
docs = vectorstore.similarity_search(query, k=2)

for d in docs:
    print(d.page_content)

[결과]

바나나는 노란색 과일이다
사과는 과일이다

 


(부록) 용어 정리

  • 벡터 DB(Vector Database): 의미 벡터를 저장하고 검색하는 데이터베이스
  • ANN (Approximate Nearest Neighbor): 최근접 이웃을 빠르게 찾는 검색 기법
  • metadata: 문서 출처/태그 등 부가 정보
  • Chroma: 오픈소스 벡터 DB (실습용)
  • Pinecone: 클라우드 기반 관리형 벡터 DB
  • Weaviate: 그래프 기능을 가진 오픈소스/클라우드 벡터 DB