"Memory Systems — 컨텍스트 밖에서 정보를 보존하는 법 (하네스 시리즈 3/6)"

Part 2에서 컨텍스트 윈도우는 작게 쓰는 게 답이라고 했다. 그럼 옛 정보는 어디로 가는가? 답은 외부 메모리 시스템. 2026년 들어 메모리 자체가 별도 인프라 영역이 됐다.

이 글은 LLM 에이전트의 메모리를 다룬다. 단기·장기·세 종류, 벡터 vs 그래프, Mem0/Zep 같은 솔루션, 그리고 직접 구축할 때 SQLite+FTS5와 Pinecone 사이 어디가 실용적 출발점인지.

시리즈 (6편)

  1. 하네스 엔지니어링이란
  2. Context Engineering
  3. Memory Systems ← 이 글
  4. Tools & Sandboxing
  5. Multi-Provider Routing
  6. Evaluation & Ops

1. 메모리 = 컨텍스트 윈도우의 연장이 아니다

흔한 오해: "컨텍스트가 메모리다."

정확한 구분: - 컨텍스트 = 현재 turn의 모델 입력 (휘발성, 비용 발생) - 메모리 = 세션을 넘어 보존하는 외부 저장 (영속, 검색 가능)

컨텍스트는 매 turn 새로 채워진다. 메모리는 매 turn 어떤 부분만 골라 컨텍스트에 주입된다.

2026년 합의: "메모리는 first-class 아키텍처 컴포넌트다." 자체 벤치마크(LoCoMo, LongMemEval), 자체 연구 문헌, 측정 가능한 성능 격차, 전용 도구 생태계가 형성됨.


2. 세 가지 메모리 유형

2-1. Episodic (일화 기억)

무엇이 일어났는가. 시간 순서가 있는 사건들. - "사용자가 어제 X 함수를 만들었다" - "지난 세션에서 인증 모듈을 리팩터했다"

2-2. Semantic (의미 기억)

무엇을 알고 있는가. 시점 무관 사실. - "사용자는 Python 개발자" - "프로젝트는 PostgreSQL을 쓴다"

2-3. Procedural (절차 기억) — 2026년 새로 도입

어떻게 하는가. 반복되는 절차를 저장. - "이 프로젝트의 PR 절차: lint → test → review → merge" - "이 사용자는 commit 전에 conventional commits 형식 검증"

Mem0 v1.0.0 API에서 명시적으로 추가됨 (2026). 이전에는 episodic + semantic만 있었음.


3. 벡터 vs 그래프 vs SQL/FTS5

벡터 메모리 (semantic search)

  • 질문을 임베딩 → 가장 유사한 메모리 N개 회수
  • 장점: 의미적 근접, fuzzy 매칭
  • 단점: 정확한 관계 표현 약함

예: 사용자가 "Python 언급함"을 검색하면 잘 찾음.

그래프 메모리 (relational reasoning)

  • 사건·엔티티·관계를 그래프로 저장
  • 장점: 다단계 추론 ("X가 Y의 무엇이고, Y는 Z의 일부")
  • 단점: 구축·유지 비용 ↑

예: "사용자는 Python 개발, 데이터 파이프라인 담당, pandas 사용, 회사는 dbt 사용, Spark에서 마이그레이션 중" — 이런 연결된 사실을 회수.

SQL + FTS5 (키워드 + 구조화)

  • SQLite의 FTS5 모듈은 빠르고 가벼운 키워드 검색
  • 장점: 인프라 zero (단일 파일), 4,300 메모리 검색 1ms 미만
  • 단점: fuzzy 검색 약함, 임베딩 의미 검색 없음

Pinecone p95 지연 25~50ms. SQLite+FTS5는 같은 규모에서 1ms 미만. 단순 키워드 매칭이면 SQL이 압승.

하이브리드 (RRF — Reciprocal Rank Fusion)

  • 벡터 검색 결과 top-N + FTS5 결과 top-N → RRF로 결합
  • 의미 + 키워드 양쪽 강점 활용
  • OpenClaw memcore와 wikycore가 이 패턴 사용

4. 솔루션 비교 (2026-04 기준)

Mem0 (managed)

  • 포지션: 사용자 personalization + 비용 효율 최적화
  • 핵심 기술: Memory Compression Engine — chat history를 고밀도 표현으로 압축
  • 효과: prompt 토큰 80% 절감 주장
  • 가격: 관리형 SaaS. 자체 호스팅도 가능 (open source).

Zep (graph)

  • 포지션: 시간 인식 지식 그래프
  • 핵심 기술: Temporal Knowledge Graph — 사실의 시점까지 저장
  • 장점: "X가 과거에는 Python을 썼지만 현재는 Rust" 같은 시간 의존 질의 가능
  • 지연: 서브초

Memanto (학술)

  • arXiv 2604.22085
  • "Typed Semantic Memory with Information-Theoretic Retrieval for Long-Horizon Agents"
  • 정보이론 기반 회수 — 메모리 항목을 불확실성 감소로 정렬

MemMachine (학술)

  • arXiv 2604.04853
  • "Ground-Truth-Preserving Memory System for Personalized AI Agents"
  • 원본 정보 보존을 우선하는 압축 정책

memcore (OpenClaw)

  • SQLite + 벡터 + RRF + memory layers (3-tier)
  • Plan / Lessons / Sessions 패턴
  • v0.5에서 MemPalace 기법 도입 (위치 기반 회상)

5. 실전 패턴

5-1. 3-Layer Memory (CLAUDE.md 표준)

Layer 1: Project Knowledge (docs/) — 영구, 키워드 인덱스
Layer 2: Behavioral Rules (lessons.md) — 무엇을 할/말 것인가
Layer 3: Session Restore (sessions/) — 휘발성 스냅샷

CLAUDE.md 패턴은 이 3계층을 권장. Claude Code, OpenClaw, Hermes 모두 이 골조 사용.

5-2. Auto-Harvesting

세션 종료 시 자동으로 새 학습을 적절한 레이어에 저장: - 에러 해결 → lessons.md - 새 도메인 지식 → docs/{category}/ - 진행 상태 → sessions/

CLAUDE.md "Automatic Memory Harvesting (Instinct Pattern)" 섹션이 이 흐름.

5-3. Dedup + Cascade Update

  • 같은 패턴 2회 → 규칙 승격 (lessons.md count 증가)
  • 새 정보가 기존 메모리와 충돌 → 충돌 표시 + 사용자 확인
  • 한 사실 변경 → memory-map.md로 연결된 다른 파일까지 검토

5-4. Eviction 정책

무한 누적은 노이즈만 늘림. 정책 예: - Time-based: 90일 이상 미사용 → archive - Use-based: count < 2이고 30일 미사용 → 제거 - LRU: 컨텍스트 압박 시 가장 오래된 것부터


6. SQL vs Vector — 어느 것부터?

시작 단계 (개인 프로젝트, 사용자 1명)

SQL + FTS5 단독 - SQLite 파일 1개로 시작 - 100~10,000 메모리 규모는 충분 - 인프라 zero, 백업 = 파일 복사 - OpenClaw memcore 초기 버전이 이렇게 시작했음

중간 단계 (다중 사용자, 1만 메모리 이상)

SQL + FTS5 + 벡터 (하이브리드) - Chroma 또는 Qdrant 추가 - bge-m3 임베딩 (oMLX에서 무료 로컬 가능) - RRF로 결과 결합

대규모 (수백만 메모리)

Mem0 / Zep / 자체 인프라 - Mem0: 사용자 인격 추출 자동화 - Zep: 시간 그래프 + 복잡 관계 - 자체 구축: ElastiCache + Neptune Analytics (AWS) 패턴


7. Anti-patterns

7-1. "벡터 DB 안 쓰면 후진"

4,300 메모리에서 SQLite+FTS5는 1ms, Pinecone p95는 25~50ms. 인프라 비용도 SQLite가 zero. 시작은 SQL.

7-2. "다 넣자, 어차피 검색하면 됨"

무한 누적 → 노이즈 폭발. eviction 정책 없으면 1년 후 검색 정확도 떨어짐.

7-3. "메모리는 한 번 쓰고 끝"

메모리는 살아있는 시스템. 갱신·충돌 해결·archive 흐름 없으면 stale 메모리가 잘못된 답으로 이끔.

CLAUDE.md 인용: "memory records can become stale over time. Verify before using."

7-4. "임베딩 모델 한번 정하고 끝"

임베딩 모델이 바뀌면 기존 벡터 무용지물. 마이그레이션 비용 막대. 처음에 잘 골라야 함 (bge-m3, voyage-3 같은 검증된 것).


8. Knowledge Graph (KG) 관점

2026년 들어 그래프 메모리가 부상. 이유: - LLM이 multi-hop reasoning을 잘 못함 (벡터 단독 회수의 한계) - 사실 간 관계가 단순 유사도로 잡히지 않음 - 시간 차원 (X 사실이 언제 진실이었는가) 표현

KG 메모리 구축 흐름

  1. 입력 (대화·문서) → entity 추출
  2. entity 간 관계 추출 (LLM이 직접 추출하거나 NER + 관계 분류기)
  3. 그래프 저장 (Neo4j, Neptune, 자체 SQLite)
  4. 질의 시 starting node → graph traversal → 관련 사실 회수

비용 vs 가치

  • 구축: 매 입력마다 LLM 호출 → 비용 ↑
  • 검색: graph traversal은 빠름
  • 가치: multi-hop 질의에서 질적 차이

권장: 사용자별 personal assistant라면 Zep 같은 KG 메모리 권장. 단일 작업 에이전트(예: 코딩)라면 hybrid (SQL+벡터)로 충분.


정리

메모리 결정 권장
시작점 SQLite + FTS5
의미 검색 추가 + 벡터 (Chroma/Qdrant) + bge-m3
관계 추론 필요 KG (Zep)
사용자 personalization Mem0
학술적 최첨단 Memanto / MemMachine

핵심 한 문장: "메모리는 컨텍스트의 연장이 아니라 별도 시스템이다."

다음 편(4/6)은 에이전트가 실제로 행동하는 영역 — Tools & Sandboxing.


참고 자료 (1차 출처)

  • Mem0 State of AI Agent Memory 2026: mem0.ai/blog/state-of-ai-agent-memory-2026
  • Memanto 논문: arxiv.org/abs/2604.22085
  • MemMachine 논문: arxiv.org/abs/2604.04853
  • AWS Mem0 + Neptune 통합: aws.amazon.com/blogs/database/build-persistent-memory-for-agentic-ai
  • Zep Temporal Knowledge Graph: getzep.com

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"