|
|
벡터 데이터베이스의 이해 및 활용 (feat. Chroma)
벡터 데이터베이스란? https://devocean.sk.com/blog/techBoardDetail.do?ID=164964&boardType=TECH_BLOG
📌 처음 사용할 벡터 DB 추천 기준 ~~~~~~~~~~~~~~~
: 무료 (오픈소스)
: 자바 또는 파이썬에서 사용 가능
: 커뮤니티 활발, 문서 풍부
: 로컬에서 실행 가능
📌 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 등)→비슷한 곡/효과음
- 코드 클론/유사 스니펫 탐색 : 함수 단위 임베딩→유사 코드 탐지(리팩토링/보안 점검)
- 로그/이벤트 이상 탐지 보조 인덱스 : 최근 정상 로그만 색인→새 로그와 거리 측정으로 ‘낯섦’ 점수
- 개인 사진 정리(인물/장소 클러스터) : 얼굴/장소 임베딩→유사도 기반 앨범 자동 분류
- 문서 표절/중복 등록 방지 : 제출물 임베딩→유사도 컷오프로 중복 경고(답안/리포트 접수 시스템)
- 지식 태그 자동화 : 새 글 임베딩→가까운 태그 대표 벡터로 토픽 자동 할당
- 광고/추천 슬롯 탐색 : 크리에이티브(문구/이미지) 임베딩→캠페인 자산 간 중복 최소화
chromadb 실습시 필요한 참고 데이터 --------------
texts = [ # 임베딩할 원본 문장 목록
"김치찌개는 김치와 돼지고기를 넣고 끓이는 한국의 대표적인 찌개이다.",
"된장찌개는 된장을 기본 재료로 하여 끓이는 한국 전통 음식이다.",
"비빔밥은 밥 위에 여러 가지 나물과 고추장을 넣어 비벼 먹는 음식이다.",
"불고기는 양념한 소고기를 구워 먹는 한국의 대표적인 고기 요리이다.",
"떡볶이는 매운 고추장 양념에 떡을 넣고 조리하는 간식이다.",
"파이썬은 문법이 간결하여 초보자가 배우기 쉬운 프로그래밍 언어이다.",
"자바는 기업용 백엔드 시스템 개발에 많이 사용되는 객체지향 언어이다.",
"자바스크립트는 웹 브라우저에서 동작하는 대표적인 프로그래밍 언어이다.",
"스프링 부트는 자바 기반의 웹 애플리케이션 개발을 쉽게 도와주는 프레임워크이다.",
"SQL은 데이터베이스에서 데이터를 조회하고 관리하기 위한 언어이다.",
"클라우드는 인터넷을 통해 서버와 저장소 같은 컴퓨팅 자원을 제공하는 기술이다.",
"AWS는 전 세계적으로 많이 사용되는 대표적인 클라우드 서비스 플랫폼이다.",
"가상 머신은 하나의 물리 서버 위에서 여러 운영체제를 실행할 수 있게 해준다.",
"컨테이너는 애플리케이션 실행 환경을 가볍게 패키징하는 기술이다.",
"쿠버네티스는 컨테이너를 자동으로 배포하고 관리하는 오케스트레이션 도구이다.",
"인공지능은 데이터를 학습하여 판단하거나 예측하는 기술이다.",
"머신러닝은 데이터에서 패턴을 찾아 새로운 데이터에 대한 예측을 수행한다.",
"딥러닝은 인공신경망을 이용하여 복잡한 문제를 학습하는 머신러닝 방법이다.",
"자연어 처리는 컴퓨터가 사람의 언어를 이해하고 생성하도록 만드는 기술이다.",
"컴퓨터 비전은 이미지와 영상을 분석하여 객체를 인식하는 인공지능 분야이다."
]