15분
"벡터 만 개인데 검색이 3초나 걸려요"
Day 3: 벡터 DB (Chroma, Pinecone)
"벡터 만 개인데 검색이 3초나 걸려요"
RAG 기초 > Day 3: 벡터 DB (Chroma, Pinecone)
학습 목표
벡터 DB가 왜 필요한지 체감한다 파일/리스트 기반 검색의 한계를 이해한다
"벡터 만 개인데 검색이 3초나 걸려요"
"어제까지 잘 되던 RAG가 갑자기 느려졌어요."
김 대리가 만든 RAG 프로토타입. 처음에는 문서 50개로 잘 동작했다.
문서 50개: 검색 0.1초 ← OK
문서 500개: 검색 0.5초 ← 괜찮네
문서 5,000개: 검색 3초 ← 느리다...
문서 50,000개: 검색 30초 ← 못 쓰겠다!
원인을 찾아보니:
# 김 대리의 코드
embeddings = [] # 벡터를 리스트에 저장
def search(query):
query_vec = embed(query)
# 모든 벡터와 하나씩 비교!
for i, vec in enumerate(embeddings):
sim = cosine_similarity(query_vec, vec)
return top_k(sims)
문제: 전수 비교(Brute Force) 벡터 5만 개를 하나하나 비교하니 30초 걸린다. 실제 FAB에는 문서 38,000+ 페이지 = 벡터 수십만 개.
벡터 DB가 필요한 이유
벡터 DB = 수십만~수억 개 벡터에서 밀리초 단위로 유사 벡터를 찾는 전용 데이터베이스
[전수 비교]
Query → O(n) 비교 → 결과
50만 벡터 × 1536차원 = 수십 초
[벡터 DB (HNSW 인덱스)]
Query → O(log n) 탐색 → 결과
50만 벡터 × 1536차원 = 수십 밀리초
성능 차이: ~1000배
제조 현장에서 3초 기다리는 건 불가능하다. 설비가 멈춰 있는데 답변이 느리면 그냥 매뉴얼을 뒤진다.
▲ 고정 크기 vs 의미 기반 vs 재귀적 청킹 전략 비교
오늘은 벡터 DB 두 가지(Chroma, Pinecone)를 배우고 직접 구축한다.
AI로 학습하기 — 꿀팁
🧪벡터 만 개 검색 성능 병목 원인 분석AI 학습 팁
파일 기반 벡터 검색의 O(n) 스캔이 왜 실시간 제조 환경에서 허용 불가한지 구체적 수치로 이해하면 벡터 DB의 필요성이 명확해진다.
제조 공장 설비 문서를 벡터화했더니 10,000개 청크가 생성되었다. 현재 numpy 배열로 저장해 코사인 유사도를 전체 스캔하는 방식을 사용 중이다. 다음을 계산하고 분석해줘: 1) 768차원 벡터 10,000개의 메모리 사용량(float32 기준), 2) 검색 1회당 연산량(FLOPs 추정)과 예상 지연시간(CPU 기준), 3) 문서가 100,000개로 늘어날 경우 선형 스캔 vs HNSW 인덱스의 검색 시간 비교표, 4) 생산라인 작업자가 설비 이상 발생 시 허용 가능한 최대 응답 시간(SLA)과 현재 방식이 이를 만족하는지 여부. 실제 벡터 DB(Chroma, Pinecone) 도입 후 기대되는 성능 개선 수치도 포함해줘.
이 팁이 도움이 됐나요?