engineering deep-dive

ZeroClaw의 하이브리드 메모리 작동 방식: SQLite 벡터 + FTS5 설명

ZeroClaws.io

ZeroClaws.io

@zeroclaws

February 25, 2026

9 분 소요

ZeroClaw의 하이브리드 메모리 작동 방식: SQLite 벡터 + FTS5 설명

대부분의 프로덕션 AI 에이전트 메모리 시스템이 어떻게 아키텍처되어 있는지 보면 익숙한 패턴을 발견한다: 시맨틱 검색을 위한 Pinecone이나 Weaviate 같은 벡터 데이터베이스, 키워드 검색을 위한 Elasticsearch나 OpenSearch, 핫 메모리 캐싱을 위한 Redis, 구조화된 데이터를 위한 Postgres. 배포할 4개의 서비스, 모니터링할 4개의 서비스, 장애가 날 수 있는 4개의 서비스, 월말의 4개의 청구서.

복잡성은 불가피한 것으로 취급된다——유능한 메모리를 위해 지불하는 대가로. 하지만 그것은 불가피하지 않다. 분산 시스템 도구를 필요로 하지 않는 문제를 해결하기 위해 그것들에 손을 뻗은 결과다.

ZeroClaw의 메모리는 단일 SQLite 파일이다. 왜 그것이 타협이 아닌지 설명하겠다.

인프라 함정

벡터 데이터베이스는 진정으로 강력한 도구다. 수백만 개의 문서에 대한 RAG 시스템이나 대규모 코퍼스에 대한 검색 엔진에는 올바른 선택이다. 하지만 AI 에이전트 메모리는 다른 문제다.

대부분의 에이전트는 수백만이 아닌 수천 개의 메모리를 저장한다. 1년간의 일일 대화는 50,000개의 대화 턴을 생성할 수 있다. 그것은 빅 데이터 문제가 아니다——다른 것을 위해 설계된 도구를 사용해 빅 데이터 문제로 취급되는 작은 데이터 문제다.

그 불일치의 비용은 실제다. Pinecone은 프로덕션 사용에 월 $70부터 시작한다. Weaviate는 실행 중인 서버가 필요하다. 모든 메모리 조회는 네트워크 라운드 트립——보통 10~50ms——으로 모든 응답에 지연을 추가한다. 메모리는 마이그레이션을 어렵게 만드는 독점 형식으로 저장된다. 그리고 운영 표면에 또 다른 서비스를 추가했다: 모니터링할 또 다른 것, 업데이트할 또 다른 것, 새벽 3시에 다운될 수 있는 또 다른 것.

Raspberry Pi나 $5 VPS에서 실행되는 AI 에이전트에게 이 아키텍처는 단순히 실행 불가능하다. 하지만 리소스가 풍부한 배포에서도 복잡성은 더 단순한 접근 방식이 제공할 수 없는 것을 아무것도 사지 않는다.

SQLite가 올바른 기반인 이유

SQLite는 세계에서 가장 많이 배포된 데이터베이스다. 모든 스마트폰, 모든 브라우저, 모든 임베디드 기기에서 실행된다. 2000년부터 지속적으로 개발됐고, 철저한 테스트 스위트를 가지고 있으며, 수십억 건의 트랜잭션을 처리하는 기업들이 프로덕션에서 사용한다. 장난감이 절대 아니다.

에이전트 메모리에 특히 적합한 이유는 제공하는 속성의 조합이다: 동시 읽기를 위한 WAL 모드의 ACID 컴플라이언스, 제로 구성(서버 없음, 자격 증명 없음, 설정 없음), 전체 메모리를 포함하는 단일 이식 가능한 파일, 그리고 에이전트가 실제로 사용하는 접근 패턴에 대해 이기기 어려운 성능 특성.

ZeroClaw는 두 개의 SQLite 확장을 함께 사용해 에이전트가 필요로 하는 두 가지——정확한 회상과 시맨틱 이해——를 처리하는 메모리 시스템을 구축한다.

FTS5: 전문 검색

SQLite의 FTS5 확장은 BM25 랭킹으로 빠른 키워드 검색을 제공한다:

```sql CREATE VIRTUAL TABLE memory_fts USING fts5(content, tokenize='porter');

-- "Rust 배포"에 관한 메모리 검색 SELECT * FROM memory_fts WHERE memory_fts MATCH 'rust deployment' ORDER BY rank; ```

FTS5는 토큰화, 스테밍, 랭킹을 자동으로 처리한다. 빠르다——일반적인 에이전트 메모리 크기에서 서브 밀리초——그리고 정확한 회상에 탁월하다. 특정 사실, 특정 이름, 특정 기술 용어를 찾아야 할 때 키워드 검색이 안정적으로 찾아낸다.

벡터 검색: 시맨틱 유사성

ZeroClaw는 텍스트와 함께 임베딩 벡터를 저장하고 SQLite 내에서 직접 코사인 유사도 검색을 수행한다. 이것은 키워드 검색이 부족한 경우를 처리한다: 정확한 단어를 공유하지 않아도 개념적으로 관련된 메모리를 찾는 것.

"내 Raspberry Pi 설정"은 "ARM 하드웨어에 배포"와 매칭된다——키워드를 공유하지 않아도. "프로젝트 마감일"은 "언제까지예요"와 매칭된다——표현이 완전히 달라도. 벡터 검색은 단어가 아닌 의미를 이해한다.

하이브리드 검색: 둘 다 올바르게

어느 접근 방식도 단독으로는 충분하지 않다. 키워드 검색은 시맨틱 연결을 놓친다——"차"는 "자동차"를 찾지 못한다. 벡터 검색은 정확한 매칭을 놓친다——"CVE-2026-25253"을 검색하면 찾고 있는 특정 CVE 대신 막연하게 관련된 보안 콘텐츠가 반환될 수 있다.

ZeroClaw는 두 검색을 병렬로 실행하고 Reciprocal Rank Fusion을 사용해 결과를 병합한다:

``` score(doc) = 1/(k + rank_fts) + 1/(k + rank_vector) ```

`k`는 상위 랭크 결과에 얼마나 많은 가중치를 줄지 제어하는 상수(보통 60)다. 두 검색에서 높게 랭크된 문서가 상위로 올라온다. 한 방법에만 매칭되는 문서도 나타나지만 더 낮은 위치에. 결과는 "X에 대해 정확히 무엇을 말했는가"와 "X와 관련해 무엇을 말했는가" 둘 다를 올바르게 처리하는 메모리 검색이다.

성능 수치

ZeroClaw가 일반적으로 실행되는 가장 제약된 하드웨어인 Raspberry Pi Zero 2 W에서 메모리 검색은 총 3ms 미만이 걸린다: FTS5 검색에 약 0.3ms, 벡터 검색에 2ms, 결과 병합에 0.1ms. x86 하드웨어에서 이 수치들은 서브 밀리초다.

비교를 위해 Pinecone이나 Weaviate로의 네트워크 라운드 트립은 보통 10~50ms가 걸린다. ZeroClaw의 메모리 검색은 단일 네트워크 패킷이 도시를 가로질러 이동하는 것보다 빠르다.

메모리는 그냥 파일이다

SQLite 기반 메모리의 실제적인 결과는 전체 대화 기록, 에이전트가 학습한 모든 컨텍스트, 당신에 대해 알고 있는 모든 것이——`memory.db`라는 단일 파일에 저장된다는 것이다.

백업은 `cp memory.db memory.db.bak`다. 새 머신으로 이동하는 것은 파일을 복사하는 것이다. 검사하는 것은 SQLite 클라이언트로 여는 것이다. 내보내기 도구 없음, 마이그레이션 스크립트 없음, API 호출 없음. 파일이며, 파일은 존재하는 가장 이식 가능하고, 가장 잘 이해되고, 가장 내구성 있는 데이터 형식이다.

이것은 보이는 것보다 더 중요하다. 메모리가 Pinecone에 있을 때, 그것은 Pinecone의 형식으로, Pinecone의 서버에, Pinecone의 API를 통해 접근 가능하다. Pinecone이 가격, API, 또는 서비스를 변경할 때 메모리가 영향을 받는다. 메모리가 머신의 SQLite 파일에 있을 때 그 중 어느 것도 적용되지 않는다.

인프라 제로, 비용 제로, 복잡성 제로, 그리고 외부 데이터베이스가 따라올 수 없는 성능——네트워크가 없기 때문에. AI 에이전트 메모리에게 그것은 타협이 아니다——올바른 설계다.

소식 받기

새 릴리스, 연동, Rust 기반 에이전트 인프라 소식을 받아보세요. 스팸 없음, 언제든 구독 취소 가능.