에이전트 메모리 엔진 (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 중심으로 쓰여 있어, 단일 사용자 시스템의 결정 차원과 어긋난다. 이 글은 다음 세 가지를 정리한다.
- 5개 후보를 7 차원으로 비교할 때 쓸 수 있는 채점표 템플릿
- 단일 사용자 환경에서 어떤 차원이 결정을 가르는가 (스포: 성능이 아니다)
- 로컬 임베딩(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가 한 자릿수를 넘어 두 자릿수 후반에 접어드는 시점, 혹은 벡터 수가 수천만 건을 초과하는 시점에서 이 프레임의 어떤 차원이 가장 먼저 흔들릴 것인가 — 이는 동일 매트릭스로 재평가해야 할 문제다.
시리즈 전체 안내: 시리즈 목차
댓글
댓글 쓰기