/ POST·USAGE
AI 벡터 데이터베이스 입문 2026 — Pinecone, Weaviate, ChromaDB 비교
N
ninepiece.one
03-02 14:13Views2Likes0Comments0
AI 벡터 데이터베이스 입문 2026 — Pinecone, Weaviate, ChromaDB 비교
목차
- 벡터 데이터베이스란?
- 왜 RAG에 벡터 DB가 필요한가?
- Pinecone: 가장 쉬운 선택
- Weaviate: 오픈소스 강자
- ChromaDB: 로컬 개발용 최적
- Supabase pgvector: PostgreSQL 확장
- 벤치마크 성능 비교
- 실전 프로젝트: RAG 챗봇 만들기
벡터 데이터베이스란?
**벡터 데이터베이스(Vector Database)**는 텍스트, 이미지, 음성 등을 **숫자 배열(벡터)**로 변환해서 저장하고, 의미적 유사도로 검색하는 데이터베이스입니다.
일반 DB vs 벡터 DB 비교
| 검색 방식 | 일반 DB (PostgreSQL) | 벡터 DB (Pinecone) |
|---|---|---|
| 검색 기준 | 정확한 키워드 일치 | 의미적 유사도 |
| 예시 쿼리 | "iPhone 15" | "애플의 최신 스마트폰" |
| 결과 | "iPhone 15" 포함된 것만 | "iPhone 15", "아이폰 15", "Apple 최신 모델" 모두 |
| 속도 | O(log n) | O(√n) ~ O(n) (HNSW 알고리즘) |
벡터 임베딩(Vector Embedding)이란?
텍스트를 숫자 배열로 변환하는 과정입니다.
예시:
from openai import OpenAI
client = OpenAI()
# 텍스트 → 벡터 변환
response = client.embeddings.create(
model="text-embedding-3-small",
input="AI 벡터 데이터베이스"
)
embedding = response.data[0].embedding
print(len(embedding)) # 1536 (차원)
print(embedding[:5]) # [-0.002, 0.013, -0.007, 0.025, -0.011]
"AI 벡터 데이터베이스"라는 문장이 1536개 숫자로 이루어진 벡터로 변환됩니다. 의미가 비슷한 문장은 벡터 공간에서 가깝게 위치합니다.
왜 RAG에 벡터 DB가 필요한가?
**RAG(Retrieval-Augmented Generation)**는 AI가 외부 지식을 참고해서 답변하는 기술입니다.
RAG 워크플로우
- 사용자 질문: "2024년 애플 실적은?"
- 벡터 DB 검색: 질문과 유사한 문서 찾기
- 검색 결과를 AI에 전달: GPT-4에게 관련 문서 제공
- AI 답변 생성: 문서 기반으로 정확한 답변
벡터 DB 없이 RAG를 하면?
- 수백 개 문서를 모두 GPT-4에 넣음 → 컨텍스트 윈도우 초과
- 키워드 검색으로 찾음 → 관련 없는 문서 포함 (정확도 낮음)
벡터 DB 사용 시 장점
- ✅ 의미적 검색: "애플 실적" vs "Apple earnings" 같은 의미로 인식
- ✅ 빠른 속도: 수백만 개 문서에서 밀리초 단위로 검색
- ✅ 효율적 비용: GPT-4에 필요한 문서만 전달 → 토큰 비용 절감
Pinecone: 가장 쉬운 선택
Pinecone은 관리형(Managed) 벡터 DB로, 인프라 관리 없이 바로 사용할 수 있습니다.
핵심 특징
- ✅ 완전 관리형: 서버 설정 불필요, API만 호출
- ✅ 빠른 속도: HNSW 알고리즘으로 밀리초 응답
- ✅ 확장성: 수십억 개 벡터까지 자동 스케일링
- ⚠️ 비용: 무료 플랜 제한적 (100K 벡터)
가격 (2026년 기준)
- Starter: 무료 (100K 벡터, 1 pod)
- Standard: $70/월 (500만 벡터, 1 pod)
- Enterprise: 커스텀 가격
Python 예시
from pinecone import Pinecone, ServerlessSpec
pc = Pinecone(api_key="YOUR_API_KEY")
# 1. 인덱스 생성
pc.create_index(
name="my-index",
dimension=1536, # OpenAI text-embedding-3-small
metric="cosine",
spec=ServerlessSpec(cloud="aws", region="us-east-1")
)
# 2. 인덱스 연결
index = pc.Index("my-index")
# 3. 벡터 삽입
index.upsert(
vectors=[
{
"id": "doc1",
"values": embedding, # 1536차원 벡터
"metadata": {"text": "AI 벡터 데이터베이스 설명"}
}
]
)
# 4. 검색
results = index.query(
vector=query_embedding,
top_k=5,
include_metadata=True
)
for match in results["matches"]:
print(f"점수: {match['score']:.3f} | {match['metadata']['text']}")
Weaviate: 오픈소스 강자
Weaviate는 오픈소스 벡터 DB로, 자체 호스팅 또는 클라우드 버전 선택 가능합니다.
핵심 특징
- ✅ 오픈소스: 무료로 자체 서버에 설치 가능
- ✅ Hybrid Search: 키워드 + 벡터 검색 조합
- ✅ 내장 임베딩: OpenAI, Cohere, Hugging Face 통합
- ⚠️ 복잡함: 설정이 Pinecone보다 어려움
Python 예시
import weaviate
from weaviate.classes.config import Configure
client = weaviate.connect_to_weaviate_cloud(
cluster_url="https://my-cluster.weaviate.network",
auth_credentials=weaviate.auth.AuthApiKey("YOUR_API_KEY")
)
# 1. 스키마 생성
client.collections.create(
name="Document",
vectorizer_config=Configure.Vectorizer.text2vec_openai(),
properties=[
weaviate.classes.config.Property(
name="text",
data_type=weaviate.classes.config.DataType.TEXT
)
]
)
# 2. 데이터 삽입
documents = client.collections.get("Document")
documents.data.insert({
"text": "AI 벡터 데이터베이스는 의미적 검색을 가능하게 합니다."
})
# 3. 검색
response = documents.query.near_text(
query="벡터 DB 설명",
limit=5
)
for obj in response.objects:
print(obj.properties["text"])
ChromaDB: 로컬 개발용 최적
ChromaDB는 로컬 개발에 최적화된 오픈소스 벡터 DB입니다.
핵심 특징
- ✅ 극도로 간단: 설치 1줄, 코드 5줄
- ✅ 로컬 우선: 인터넷 없이 사용 가능
- ✅ LangChain 통합: RAG 파이프라인 빠르게 구축
- ⚠️ 확장성 제한: 대규모 프로덕션에는 부적합
Python 예시
import chromadb
# 1. 클라이언트 생성 (로컬 파일에 저장)
client = chromadb.PersistentClient(path="./chroma_db")
# 2. 컬렉션 생성
collection = client.create_collection(name="my_docs")
# 3. 문서 추가 (자동으로 임베딩 생성)
collection.add(
documents=["AI 벡터 데이터베이스", "RAG 구축 방법"],
metadatas=[{"source": "blog1"}, {"source": "blog2"}],
ids=["doc1", "doc2"]
)
# 4. 검색
results = collection.query(
query_texts=["벡터 DB 설명"],
n_results=2
)
print(results["documents"])
Supabase pgvector: PostgreSQL 확장
Supabase는 PostgreSQL에 pgvector 확장을 추가해서 벡터 검색 지원합니다.
핵심 특징
- ✅ 익숙한 PostgreSQL: SQL로 벡터 검색
- ✅ 관계형 + 벡터: 기존 DB에 벡터 기능 추가
- ✅ Supabase 무료 플랜: 500MB까지 무료
- ⚠️ 성능: 전문 벡터 DB보다 느림
SQL 예시
-- 1. 테이블 생성
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
embedding VECTOR(1536)
);
-- 2. 벡터 삽입
INSERT INTO documents (content, embedding)
VALUES ('AI 벡터 데이터베이스', '[0.01, 0.02, ...]');
-- 3. 유사도 검색
SELECT content, 1 - (embedding <=> '[0.01, 0.02, ...]') AS similarity
FROM documents
ORDER BY embedding <=> '[0.01, 0.02, ...]'
LIMIT 5;
벤치마크 성능 비교
검색 속도 (100만 벡터 기준)
| 서비스 | 평균 응답 시간 | 정확도 (Recall@10) |
|---|---|---|
| Pinecone | 15ms | 99% |
| Weaviate | 22ms | 98% |
| ChromaDB | 120ms | 95% |
| pgvector | 200ms | 92% |
가격 비교 (월간 100만 쿼리, 500만 벡터)
| 서비스 | 비용 | 비고 |
|---|---|---|
| Pinecone | $70 | Starter 플랜 |
| Weaviate Cloud | $50 | Standard 플랜 |
| ChromaDB | $0 | 자체 호스팅 (서버 비용 별도) |
| Supabase | $25 | Pro 플랜 |
실전 프로젝트: RAG 챗봇 만들기
프로젝트 개요
회사 문서 100개를 기반으로 질문 답변 챗봇 구축
1단계: 문서 준비
documents = [
"회사 휴가 정책: 연차는 입사 1년 후 15일 부여",
"출장 신청: 출장 3일 전까지 승인 필요",
"복지 제도: 점심 식대 월 10만원 지원"
]
2단계: 벡터화 및 저장 (ChromaDB)
import chromadb
from openai import OpenAI
client = OpenAI()
chroma_client = chromadb.PersistentClient(path="./company_kb")
collection = chroma_client.create_collection(name="company_docs")
# 임베딩 생성 및 저장
for i, doc in enumerate(documents):
embedding = client.embeddings.create(
model="text-embedding-3-small",
input=doc
).data[0].embedding
collection.add(
ids=[f"doc{i}"],
embeddings=[embedding],
documents=[doc]
)
3단계: RAG 질문 답변
def rag_chatbot(question):
# 1. 질문 임베딩
query_embedding = client.embeddings.create(
model="text-embedding-3-small",
input=question
).data[0].embedding
# 2. 유사 문서 검색
results = collection.query(
query_embeddings=[query_embedding],
n_results=3
)
# 3. 검색 결과를 컨텍스트로 GPT-4에 전달
context = "
".join(results["documents"][0])
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": f"다음 회사 규정을 참고해서 답변:
{context}"},
{"role": "user", "content": question}
]
)
return response.choices[0].message.content
# 사용 예시
answer = rag_chatbot("휴가는 언제 받을 수 있나요?")
print(answer)
# → "입사 1년 후 연차 15일이 부여됩니다."
결론: 어떤 벡터 DB를 선택할까?
선택 가이드
| 상황 | 추천 서비스 | 이유 |
|---|---|---|
| 프로토타입/개발 | ChromaDB | 무료, 설정 간단 |
| 중소규모 프로덕션 | Pinecone | 관리 편함, 빠름 |
| 대규모 엔터프라이즈 | Weaviate | 오픈소스, 커스터마이징 |
| 기존 PostgreSQL 사용 중 | Supabase pgvector | 기존 DB 확장 |
최종 추천
- 빠르게 시작: ChromaDB (무료, 5분 안에 구축)
- 스타트업: Pinecone ($70/월, 걱정 없이 확장)
- 대기업: Weaviate (자체 호스팅, 데이터 주권)
2026년, 벡터 데이터베이스는 모든 AI 애플리케이션의 필수 인프라가 되었습니다. RAG 챗봇, 추천 시스템, 이미지 검색 등 다양한 곳에서 활용되고 있습니다. 여러분도 지금 바로 시작해보세요!
참고 자료:
- Pinecone: https://www.pinecone.io
- Weaviate: https://weaviate.io
- ChromaDB: https://www.trychroma.com
- Supabase pgvector: https://supabase.com/docs/guides/ai/vector-columns