에이전트 메모리 엔진 (6/10) — 벡터 DB 5개를 7차원으로 비교: sqlite-vec

의사결정 매트릭스 자체가 콘텐츠다


핵심 요약

  • 이 글은 단일 사용자 에이전트 시스템에서 벡터 DB를 선정할 때 사용할 수 있는 7 차원 비교 프레임을 제공한다.
  • 후보 5개 (sqlite-vec / Chroma / Qdrant / Weaviate / 자체 FAISS)를 7 차원 (포터빌리티 / 롤백 / 성능 / 통합 / 의존 / 운영 / 비용)으로 평가.
  • 결과: sqlite-vec + bge-m3-mlx-fp16 (1024d) 조합이 1위. 핵심 결정 차원은 검색 속도가 아니라 롤백 가능성단일 파일 이식성.

이 글이 전달하는 것

벡터 DB 선정은 한 번 내리면 최소 1년을 따라다니는 결정이다. 그리고 대부분의 비교 자료는 검색 속도QPS 중심으로 쓰여 있어, 단일 사용자 시스템의 결정 차원과 어긋난다. 이 글은 다음 세 가지를 정리한다.

  1. 5개 후보를 7 차원으로 비교할 때 쓸 수 있는 채점표 템플릿
  2. 단일 사용자 환경에서 어떤 차원이 결정을 가르는가 (스포: 성능이 아니다)
  3. 로컬 임베딩(bge-m3 + MLX fp16)이 이 프레임과 어떻게 맞물리는가

후보 5개

후보 한 줄
1 sqlite-vec SQLite 확장. 단일 파일. C 구현.
2 Chroma Python 친화. 임베디드 모드 가능.
3 Qdrant Rust 서버. HNSW. 프로덕션 지향.
4 Weaviate Go 서버. 모듈러 백엔드.
5 자체 FAISS Python에서 직접 인덱스 관리.

7 차원 점수표 (5점 척도)

차원 sqlite-vec Chroma Qdrant Weaviate FAISS
Portability 5 3 2 2 4
Rollback 용이성 5 3 2 2 3
성능 (단일 사용자 기준) 4 4 5 5 5
Hermes 통합 난이도 4 3 3 3 3
외부 의존 5 3 1 1 4
운영 복잡도 4 3 2 2 3
비용 (자체 호스팅) 5 4 3 3 5
합계 32/35 23/35 18/35 18/35 27/35

(초기 집계에서는 sqlite-vec 28/35, 재집계 시 32/35. 어느 쪽이든 1위 순위는 동일.)

성능은 결정 차원이 아닌가

단일 사용자 시스템의 질의 부하는 초당 약 5~20회 수준이다. HNSW 기반 분산 서버의 성능 여유분은 이 대역에서 의미를 갖지 않는다. 따라서 성능 차원은 점수표에는 포함하되, 가중치를 두지 않는 차원으로 분류하는 것이 타당하다.

결정을 가르는 축은 다음 두 차원이다.

차원 1: Portability (이식성)

sqlite-vec의 저장 단위는 DB 파일 한 개다.

  • 백업: cp memcore.db backup.db 한 줄.
  • 이식: 해당 파일을 다른 머신에 복사.
  • 버전 관리: 파일 해시 하나로 스냅샷 비교.

다른 후보는 "서버 프로세스 + 데이터 디렉터리 + 설정 파일"이 분리된 구조라, 백업과 이식이 다단계가 된다. 단일 사용자 환경에서 이 복잡도는 장기적으로 운영 비용으로 누적된다.

차원 2: Rollback (롤백 가능성)

마이그레이션 중 최대 리스크는 부분 실패 후 원상복귀 불가 상황이다. sqlite-vec의 트랜잭션은 SQLite의 트랜잭션과 같은 의미를 가진다.

BEGIN;
-- 마이그레이션 쿼리들
ROLLBACK;  -- 한 줄로 원상복귀

분산 인덱스 기반 후보(Qdrant, Weaviate)는 인덱스 재빌드 중 부분 커밋이 발생하는 구조이기 때문에, 중간 실패 시점에서의 완전한 원상복귀가 까다롭다. 이 차이가 단일 사용자 시스템에서는 결정적이다.

임베딩 모델 선정: bge-m3 + MLX fp16

벡터 DB와 함께 고정해야 할 축이 임베딩 모델이다. 선정 기준과 근거는 다음과 같다.

선택 근거
모델 bge-m3 한국어/영어 혼용 강건, 1024차원으로 저장 비용과 표현력 균형
실행 환경 MLX fp16 Apple Silicon 네이티브, 별도 GPU 불필요
호스팅 로컬 외부 API 호출 없음 → 토큰 비용 0, 네트워크 의존 0

이 조합은 단일 사용자 시스템에 한정할 경우 현재 시점에서 합리적 기본값에 가깝다. 트레이드오프는 모델 업데이트 주기가 외부 API보다 느리다는 점 하나다.

한계와 적용 범위

이 프레임은 다음 조건을 만족하는 시스템에서만 유효하다.

  • 단일 사용자 또는 소규모 팀 (QPS < 50)
  • 전체 벡터 수 수백만 건 이하 (sqlite-vec의 권장 상한대)
  • 로컬 실행 가능한 하드웨어 (Apple Silicon 또는 동급)

이 조건을 벗어나면 결정 차원의 가중치가 달라진다. 멀티 테넌트 / 고 QPS / 수천만 벡터 환경에서는 Qdrant·Weaviate의 감점이 복구되며, Portability의 프리미엄은 옅어진다.

정리

벡터 DB 비교는 종종 QPS 벤치마크 한 장으로 압축된다. 그러나 단일 사용자 시스템에서의 결정 차원은 성능이 아니라 얼마나 단순하게 백업하고 되돌릴 수 있는가다. 7 차원 매트릭스에서 sqlite-vec가 1위를 한 이유는 이 두 차원에서 만점을 받았기 때문이며, 나머지 5 차원은 동률 후보를 가르는 보조 축으로 기능했다.

열린 질문은 다음과 같다. QPS가 한 자릿수를 넘어 두 자릿수 후반에 접어드는 시점, 혹은 벡터 수가 수천만 건을 초과하는 시점에서 이 프레임의 어떤 차원이 가장 먼저 흔들릴 것인가 — 이는 동일 매트릭스로 재평가해야 할 문제다.

시리즈 전체 안내: 시리즈 목차

댓글