Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- javascript
- VectoreStore
- 완전탐색
- Two Pointer
- queue
- Algorithm
- LLM
- modbus
- python
- 프로그래머스
- set활용
- 코딩테스트
- 좌표이동
- DP
- typescript
- React
- data platform
- 스택/큐
- dfs
- InfluxDB
- frontend
- 파이썬
- retriever
- Stack
- 개발브로그
- 인베딩
- AI
- 알고리즘
- Weaviate
- javascirpt
Archives
- Today
- Total
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 동작 원리)
- 문서 임베딩 생성 (예: OpenAI text-embedding-3-small)
- 벡터 DB에 저장 (텍스트 + 임베딩 + metadata)
- 사용자 질문 입력 → 임베딩 변환
- 최근접 이웃 검색 (ANN, Approximate Nearest Neighbor)으로 가까운 벡터 탐색
- 유사한 문서를 반환
[주요 벡터 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
'개발공부 > AI' 카테고리의 다른 글
[AI 개념 및 이해 #5] RAG: 검색과 생성을 결합하는 기술 (0) | 2025.09.07 |
---|---|
[AI 개념 및 이해 #4] LangChain: LLM 오케스트레이션 프레임워크 (0) | 2025.09.07 |
[AI 개념 및 이해 #2] 임베딩(Embedding) 이해: 텍스트-벡터 변환 기술 (0) | 2025.09.06 |
[AI 개념 및 이해 #1] LLM(Language Model) 이해: GPT의 동작 (0) | 2025.09.06 |