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 | 31 | 
                            Tags
                            
                        
                          
                          - heapq
- VectoreStore
- frontend
- turbo
- typescript
- 프로그래머스
- 알고리즘
- modbus
- CI/CD
- ansible
- monorepo
- retriever
- 스택/큐
- LLM
- React
- InfluxDB
- queue
- javascript
- DP
- 파이썬
- AI
- javascirpt
- Two Pointer
- Algorithm
- BFS
- dfs
- rag
- python
- 완전탐색
- OpenAI
                            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 실습 #1] Chroma 실습: 벡터DB를 활용한 문서 검색 (0) | 2025.09.13 | 
|---|---|
| [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 | 
 
          