|
|
벡터 데이터베이스의 이해 및 활용 (feat. Chroma) https://blog.kbanknow.com/66
벡터 데이터베이스란? https://devocean.sk.com/blog/techBoardDetail.do?ID=164964&boardType=TECH_BLOG
📌 처음 사용할 벡터 DB 추천 기준 ~~~~~~~~~~~~~~~
: 무료 (오픈소스)
: 자바 또는 파이썬에서 사용 가능
: 커뮤니티 활발, 문서 풍부
: 로컬에서 실행 가능
📌 주요 벡터 DB 비교
이름 특징 자바 SDK 파이썬 SDK 비고
------------------------------------------------------------------------------------------------------------------------------------
FAISS 빠르고 간단한 벡터 검색 라이브러리 X O 완전한 DB 아님 (in-memory 전용)
Milvus 대규모 데이터, 고성능, 확장 가능 O O 가장 널리 쓰이는 오픈소스 벡터 DB
Weaviate GraphQL API, AI 기능 내장 X (REST) O AI 친화 기능, 쉬운 설정
Qdrant REST/gRPC 기반, 빠르고 가볍다 X (REST) O 도커 기반 실행 쉬움, 필터링 강력함
Chroma LangChain 최적화, 로컬 파일 기반 X O RAG 튜토리얼에서 자주 사용됨
------------------------------------------------------------------------------------------------------------------------------------
📌 RAG에서 많이 쓰는 벡터 DB
이름 특징 주요 언어 이유
------------------------------------------------------------------------------------------------------------------
FAISS 빠르고 가벼움 Python 인메모리 기반 실험용 벡터 검색
Chroma LangChain 최적화 Python RAG 튜토리얼 기본 탑재
Qdrant REST + 메타 필터링 Python 실용적인 검색 + 서버 배포 용이
Weaviate GraphQL + AI 기능 Python AI 기능 내장 (예: vectorizer 내장)
Milvus 대규모 고성능 벡터 검색 Python/Java 자바 SDK 제공, 대량 처리 성능 뛰어남
-------------------------------------------------------------------------------------------------------------------
📌 Chroma vs FAISS (파이썬 초보자 관점)
항목 Chroma FAISS
-----------------------------------------------------------------------------------------------------------
설치 pip install chromadb pip install faiss-cpu
난이도 쉬움 (고수준 API) 중간 (로우레벨 API)
파이썬 친화도 100% 파이썬 기반 C++ 기반 + 파이썬 바인딩
메타데이터 저장 지원 직접 구현 필요
저장 방식 파일 기반 (SQLite 내부 사용) 인메모리 (디스크 저장 불편함)
LangChain 통합 기본 지원 직접 연동 필요
튜토리얼 사용량 많음 (RAG 튜토리얼에 자주 등장) 적음 (직접 구현 예제 중심)
-------------------------------------------------------------------------------------------------------------
벡터 DB는 벡터(숫자 배열)를 저장하고 검색할 수 있기 때문에, 원래 문장(문서)을 함께 저장하거나 연결하는 게 굉장히 중요하다.
즉, 벡터는 검색을 위한 수단일 뿐이고, 검색 결과에서는 다시 문서 + 메타데이터를 함께 꺼내는 게 핵심이다.
📌 벡터 DB 저장 구조: 핵심 개념
구성 요소 역할
----------------------------------------------------------------------------------------------------------
벡터 (embedding) 텍스트의 의미를 수치로 표현한 것 (예: [0.1, 0.27, -0.05, ...])
문서 (document) 원래 텍스트, 예: "Chroma is a vector database."
메타데이터 문서에 대한 설명, 예: {"source": "page 1"}
ID 각 문서의 고유 식별자 (예: "doc-1")
----------------------------------------------------------------------------------------------------------
📌 Chroma 저장/검색 전체 흐름 (요약)
[원본 문장] → [임베딩 벡터] → [Chroma 저장: 벡터 + 다큐먼트 + 메타데이터]
→ 검색 시: 쿼리 → 임베딩 → 벡터 비교 → 유사한 문장 + 메타데이터 반환
📌 벡터 데이터베이스 활용 요약 (RAG, AI 검색, NLP 중심)
| 분야 | 벡터 DB 활용 이유 |
| RAG (지식보강생성) | 질문 → 임베딩 → 관련 문서 검색 → GPT에 컨텍스트 제공(prompt + 관련문서) |
| 시맨틱 검색 | 키워드가 아닌 의미 기반 검색 제공 (예: "빨간 과일" → 사과) |
| NLP (챗봇, QA) | 질문/대화/답변 등을 벡터화해 유사 질문 검색, 컨텍스트 유지 |
| 추천 시스템 | 사용자/아이템을 벡터로 표현해 유사도 기반 추천 |
| 이상 탐지 등 | 벡터 공간에서 이상치 탐색 (금융 사기, 보안 등) |
** 결론 **
- 벡터 DB는 RAG, 검색, 추천에서 필수 인프라로 자리잡음
- 벡터 DB는 Chroma, Qdrant, Milvus 등 상황별로 선택 가능
- PyTorch는 연구/신규 서비스 중심, TensorFlow는 기존 인프라 기반 기업 위주의 프로젝트를 많이 함
: 실무에서는 두 프레임워크 혼용 또는 케이스별 선택이 많음
---- RDBMS(관계형 데이터베이스) 와 Vector DB(벡터 데이터베이스) 의 차이 비교 -----
Vector DB는 “의미론적(Semantic)” 데이터베이스, RDBMS는 “구문론적(Syntactic)” 데이터베이스 이다
1. 기본 개념
구분 RDBMS (Relational DB) Vector DB (Vector Database)
-------------------------------------------------------------------------------------------------------------------------------------------
핵심 목적 정형 데이터 저장 및 관계 기반 질의 비정형 데이터(텍스트, 이미지 등)의 의미 기반 검색
데이터 구조 테이블 (행과 열) 벡터(embedding vector)와 메타데이터
주요 예시 MySQL, PostgreSQL, Oracle, MariaDB Chroma, Pinecone, Weaviate, Milvus, FAISS
2. 데이터 표현 방식
항목 RDBMS Vector DB
-------------------------------------------------------------------------------------------------------------------------------------------
저장 단위 스키마 기반 행(Row) 고정 차원 벡터(예: 768차원)
데이터 예시 {id:1, name:'홍길동', age:20} {id:'doc1', vector:[0.12, 0.88, …], metadata:{tag:'blog'}}
의미 표현 단어 그대로 저장 의미적 유사도를 수치화 (Embedding)
주요 연산 SELECT, JOIN, GROUP BY 유사도 검색 (Cosine, Euclidean, Dot Product)
3. 검색 및 질의 방식
구분 RDBMS Vector DB
-------------------------------------------------------------------------------------------------------------------------------------------
질의 언어 SQL 벡터 쿼리 API (예: .query() / .similarity_search())
검색 방식 정확 일치 기반 (WHERE name='홍길동') 의미 유사도 기반 ("홍길동 관련 문서")
결과 조건에 부합하는 행 벡터 간 거리(유사도)가 가까운 문서
정렬 기준 정렬 키 (ORDER BY) 유사도 점수 (similarity score)
4. 내부 동작 원리
항목 RDBMS Vector DB
-------------------------------------------------------------------------------------------------------------------------------------------
인덱싱 B-Tree, Hash Index HNSW, IVF, PQ 등 근사 최근접 탐색(ANN) 인덱스
확장성 수직 확장(Scale-up) 중심 분산 벡터 인덱싱으로 수평 확장(Scale-out) 용이
성능 최적화 쿼리 계획, 인덱스, 캐시 ANN(Search graph), Embedding 캐시
5. 활용 분야
분야 RDBMS Vector DB
-------------------------------------------------------------------------------------------------------------------------------------------
전통적 비즈니스 앱 회원 관리, 주문/결제, 재고, ERP ✖
AI / NLP ✖ 문서 검색, 챗봇, 추천 시스템
이미지/음성 검색 ✖ 이미지/음성 Embedding 기반 유사도 검색
하이브리드 메타데이터 저장 임베딩 저장 및 검색
6. 검색 예시 비교
-- RDBMS: 고객 이름으로 정확히 검색
SELECT * FROM customers WHERE name = '홍길동';
# Vector DB: "홍길동과 비슷한 고객" 검색
results = collection.query(
query_texts=["홍길동 관련 고객"],
n_results=3
)
→ RDBMS는 “문자 일치”, Vector DB는 “의미 유사성” 으로 검색한다.
7. 결합 활용 (Hybrid Search) : 실무에서는 두 DB를 함께 사용하는 형태가 많다.
단계 설명
① 문서를 임베딩(Embedding)으로 변환 → Vector DB 저장 의미 검색용
② 메타데이터(작성자, 날짜 등)는 RDBMS에 저장 필터링용
③ 검색 시 VectorDB에서 유사 벡터 Top-K 검색 → RDBMS에서 세부정보 Join 하이브리드 쿼리
😁 VectorDB + Python 활용 프로젝트 (RAG에 적용 X)
아이디어 예
- 이미지 중복/유사 탐지 API : 업로드된 이미지→임베딩→Chroma에서 근접 탐색→임계치로 중복 판정
- 제품 “비슷한 상품” 추천 : 상품 설명/카테고리/이미지 임베딩으로 유사 상품 카드 노출
- 부품/CAD 형상 유사 검색 : 3D 파트(썸네일/특징벡터)로 대체 부품 찾기
- 음악/사운드 유사 검색 : 짧은 오디오 샘플→임베딩(MFCC/VGGish 등)→비슷한 곡/효과음
- 코드 클론/유사 스니펫 탐색 : 함수 단위 임베딩→유사 코드 탐지(리팩토링/보안 점검)
- 로그/이벤트 이상 탐지 보조 인덱스 : 최근 정상 로그만 색인→새 로그와 거리 측정으로 ‘낯섦’ 점수
- 개인 사진 정리(인물/장소 클러스터) : 얼굴/장소 임베딩→유사도 기반 앨범 자동 분류
- 문서 표절/중복 등록 방지 : 제출물 임베딩→유사도 컷오프로 중복 경고(답안/리포트 접수 시스템)
- 지식 태그 자동화 : 새 글 임베딩→가까운 태그 대표 벡터로 토픽 자동 할당
- 광고/추천 슬롯 탐색 : 크리에이티브(문구/이미지) 임베딩→캠페인 자산 간 중복 최소화