본문으로 건너뛰기
Kreath Archive
TechProjectsBooksAbout
TechProjectsBooksAbout

내비게이션

  • Tech
  • Projects
  • Books
  • About
  • Tags

카테고리

  • AI / ML
  • 웹 개발
  • 프로그래밍
  • 개발 도구

연결

  • GitHub
  • Email
  • RSS
© 2026 Kreath Archive. All rights reserved.Built with Next.js + MDX
홈TechProjectsBooksAbout
//
  1. 홈
  2. 테크
  3. 7장: 메모리 프레임워크 비교와 선택
2026년 3월 10일·AI / ML·

7장: 메모리 프레임워크 비교와 선택

Mem0, Zep, Letta, LangChain/LangGraph의 메모리 시스템을 상세 비교하고, 프로젝트 요구사항에 맞는 프레임워크 선택 의사결정 트리를 제시합니다.

16분377자10개 섹션
aillmai-agent
공유
agent-memory7 / 10
12345678910
이전6장: 메모리 압축과 통합다음8장: 프로덕션 듀얼 레이어 아키텍처

학습 목표

  • 주요 메모리 프레임워크 4종의 아키텍처와 설계 철학을 비교한다
  • 각 프레임워크의 강점과 약점을 실무 관점에서 평가한다
  • 프로젝트 유형별 최적의 프레임워크를 선택할 수 있다
  • 프레임워크 조합 사용의 가능성과 전략을 이해한다

프레임워크 개관

2026년 현재, 에이전트 메모리 영역의 주요 프레임워크는 네 가지로 압축됩니다. 각각 서로 다른 설계 철학을 기반으로 하며, 특정 사용 사례에 최적화되어 있습니다.


Mem0 — 사용자 선호도의 전문가

설계 철학

Mem0는 "모든 AI에 메모리를"이라는 비전 아래, 사용자 선호도와 개인화에 집중합니다. 대화에서 자동으로 저장할 가치가 있는 정보를 추출하고, 사용자별로 관리합니다.

핵심 특성

mem0-detailed-example.py
python
from mem0 import Memory
 
# 설정: 임베딩 모델과 LLM 지정
config = {
    "llm": {
        "provider": "anthropic",
        "config": {"model": "claude-sonnet-4-20250514"},
    },
    "embedder": {
        "provider": "openai",
        "config": {"model": "text-embedding-3-small"},
    },
    "vector_store": {
        "provider": "qdrant",
        "config": {"host": "localhost", "port": 6333},
    },
}
 
memory = Memory.from_config(config)
 
# 대화에서 자동으로 메모리 추출
result = memory.add(
    messages=[
        {"role": "user", "content": "저는 코드 리뷰할 때 타입 안전성을 가장 중시합니다"},
        {"role": "assistant", "content": "타입 안전성을 중시하시는군요."},
    ],
    user_id="user_123",
)
# 자동 추출: "사용자는 코드 리뷰에서 타입 안전성을 최우선시한다"
 
# 메모리 검색
memories = memory.search(
    "코드 리뷰 기준이 뭐였죠?",
    user_id="user_123",
)
 
# 메모리 업데이트: 충돌 시 자동 갱신
memory.add(
    messages=[
        {"role": "user", "content": "이제는 성능도 타입만큼 중요하게 봅니다"},
    ],
    user_id="user_123",
)
# 기존 메모리 갱신: "사용자는 코드 리뷰에서 타입 안전성과 성능을 동등하게 중시한다"

장점과 한계

장점

  • 간결한 API로 빠른 도입 가능
  • 자동 메모리 추출과 충돌 해소
  • 사용자별/세션별 메모리 분리 기본 지원
  • 다양한 벡터 DB 백엔드 지원

한계

  • 복잡한 관계 표현에 약함
  • 시간에 따른 변화 추적 미흡
  • 에피소딕 메모리 기능 제한적

Zep — 시간 인식 지식 그래프

설계 철학

Zep은 "시간에 따라 진화하는 에이전트 메모리"를 지향합니다. 5장에서 상세히 다뤘듯이, 에피소드/시맨틱 엔티티/커뮤니티의 3계층 지식 그래프가 핵심입니다.

핵심 특성

zep-detailed-example.py
python
from zep_cloud.client import Zep
 
client = Zep(api_key="your-api-key")
 
# 사용자 세션 생성
session = client.memory.add_session(
    session_id="session_001",
    user_id="user_123",
)
 
# 대화 추가 - 자동으로 지식 그래프 갱신
client.memory.add(
    session_id="session_001",
    messages=[
        {
            "role_type": "user",
            "content": "김철수가 리더인 A 프로젝트에 참여하게 되었습니다.",
        },
        {
            "role_type": "assistant",
            "content": "A 프로젝트에 합류하시는군요.",
        },
    ],
)
 
# 그래프 검색: 관계 기반 쿼리
results = client.graph.search(
    user_id="user_123",
    query="A 프로젝트의 리더는 누구인가?",
)
# -> 김철수 (source: 에피소드 graph traversal)
 
# 시간적 검색: 특정 시점의 상태
memory = client.memory.get(
    session_id="session_001",
    min_rating=0.5, # 관련성 임계값
)

장점과 한계

장점

  • 시간 인식 지식 그래프로 복잡한 관계 표현
  • 다단계 추론 지원
  • 엔티티와 관계의 자동 추출
  • 시간에 따른 변화 추적

한계

  • 도입 복잡도가 높음
  • 그래프 DB(Neo4j) 운영 필요
  • 단순 선호도 저장에는 과도할 수 있음

Letta (구 MemGPT) — OS 영감의 자율 메모리

설계 철학

Letta는 운영 체제의 메모리 관리에서 영감을 받았습니다. 에이전트가 자율적으로 메모리를 관리하도록 하며, 프로그래머가 메모리 구조를 명시적으로 설계할 수 있습니다.

3계층 메모리 아키텍처

letta-detailed-example.py
python
from letta import create_client
 
client = create_client()
 
# 에이전트 생성 시 Core Memory 구조 정의
agent = client.create_agent(
    name="assistant",
    memory_blocks=[
        # Core Memory: 항상 컨텍스트에 포함
        {
            "label": "human",
            "value": "이름: 미지정\n선호 언어: 미지정\n전문 분야: 미지정",
            "limit": 2000,  # 토큰 제한
        },
        {
            "label": "persona",
            "value": "나는 기술 어시스턴트입니다. 정확하고 도움이 되는 답변을 합니다.",
            "limit": 2000,
        },
    ],
)
 
# 대화 시 에이전트가 자율적으로 메모리 관리
response = client.send_message(
    agent_id=agent.id,
    message="저는 김영수이고 TypeScript 전문가입니다",
)
 
# 에이전트가 내부적으로 수행하는 동작:
# 1. core_memory_replace("human", "이름: 미지정", "이름: 김영수")
# 2. core_memory_replace("human", "선호 언어: 미지정", "선호 언어: TypeScript")
# 3. core_memory_replace("human", "전문 분야: 미지정", "전문 분야: TypeScript")

자율적 메모리 관리

Letta의 가장 독특한 특성은 에이전트가 스스로 메모리를 읽고, 쓰고, 검색하는 도구를 가지고 있다는 것입니다. 개발자가 메모리 관리 로직을 직접 구현할 필요 없이, 에이전트가 대화 중에 알아서 중요한 정보를 저장하고 필요할 때 검색합니다.

장점

  • 에이전트의 자율적 메모리 관리
  • 명시적 메모리 구조 설계 가능
  • Core Memory로 항상 사용 가능한 컨텍스트 보장
  • 도구 기반 메모리 접근으로 유연성 높음

한계

  • 자율적 메모리 관리의 품질이 LLM 능력에 의존
  • 메모리 관리에 추가 토큰 소비
  • 학습 곡선이 상대적으로 높음

LangChain / LangGraph 메모리

설계 철학

LangChain과 LangGraph는 범용 에이전트 프레임워크 내에 메모리 추상화를 내장하고 있습니다. 독립적인 메모리 플랫폼이라기보다, 기존 LangChain/LangGraph 애플리케이션에 메모리를 추가하는 확장 기능입니다.

LangGraph의 상태 기반 메모리

langgraph-memory-example.py
python
from langgraph.graph import StateGraph
from langgraph.checkpoint.memory import MemorySaver
from langgraph.store.memory import InMemoryStore
 
# 상태 기반 체크포인팅
checkpointer = MemorySaver()
 
# 장기 메모리 저장소
store = InMemoryStore()
 
# 그래프에 메모리 통합
graph = StateGraph(AgentState)
graph.add_node("agent", agent_node)
graph.add_node("memory", memory_node)
 
app = graph.compile(
    checkpointer=checkpointer,
    store=store,
)
 
# 대화 시 자동으로 상태 저장/복원
result = app.invoke(
    {"messages": [{"role": "user", "content": "안녕하세요"}]},
    config={
        "configurable": {
            "thread_id": "session_001",
            "user_id": "user_123",
        }
    },
)

장점

  • 기존 LangChain 생태계와 원활한 통합
  • 다양한 체크포인터 백엔드 (SQLite, PostgreSQL, Redis)
  • 상태 기반 워크플로우와 자연스러운 결합
  • 커뮤니티 생태계가 크고 자료가 풍부

한계

  • 메모리 전용 기능은 특화 플랫폼에 비해 제한적
  • 자동 메모리 추출/관리 기능 미흡
  • 고급 메모리 패턴은 직접 구현 필요

종합 비교표

기준Mem0ZepLettaLangChain
핵심 강점개인화지식 그래프자율 관리생태계 통합
자동 추출우수우수에이전트 자율제한적
관계 표현약함매우 강함보통약함
시간 추적제한적매우 강함보통제한적
도입 난이도낮음높음중간낮음
운영 복잡도낮음높음 (Neo4j)중간낮음
비용 구조SaaS/오픈소스SaaS/오픈소스오픈소스오픈소스
최적 사용 사례챗봇 개인화복잡한 도메인자율 에이전트기존 LC 확장

선택 의사결정 트리

프로젝트의 요구사항에 따라 적합한 프레임워크를 선택하는 의사결정 흐름입니다.

조합 사용 전략

하나의 프레임워크만 선택해야 하는 것은 아닙니다. 프로덕션 시스템에서는 여러 프레임워크를 조합하여 사용하는 경우가 많습니다.

combination-examples.txt
text
조합 1: Mem0 + Zep
- Mem0: 사용자 선호도와 빠른 개인화
- Zep: 도메인 지식 그래프와 관계 추론
- 적합: 고객 서비스, 기술 지원 에이전트
 
조합 2: Letta + LangGraph
- Letta: 자율적 메모리 관리
- LangGraph: 워크플로우 오케스트레이션
- 적합: 복잡한 멀티스텝 에이전트
 
조합 3: Mem0 + LangGraph
- Mem0: 간편한 메모리 저장/검색
- LangGraph: 상태 관리와 체크포인팅
- 적합: 빠른 MVP, 점진적 확장
Tip

처음 시작할 때는 하나의 프레임워크로 시작하고, 요구사항이 명확해지면 추가하는 점진적 접근이 좋습니다. Mem0로 빠르게 개인화를 구현한 뒤, 관계 추론이 필요해지면 Zep을 추가하는 식입니다.


정리

이번 장에서 다룬 프레임워크 비교와 선택의 핵심 내용을 정리합니다.

  • Mem0는 사용자 선호도와 개인화에 특화되어 있으며 도입이 간편합니다
  • Zep은 시간 인식 지식 그래프로 복잡한 관계 표현과 시간적 추론에 강합니다
  • Letta는 OS 영감의 3계층 구조로 에이전트의 자율적 메모리 관리를 지원합니다
  • LangChain/LangGraph는 기존 생태계와의 통합에 적합하며 범용적입니다
  • 프로젝트 요구사항에 따라 단일 또는 조합 사용이 가능합니다

다음 장 미리보기

8장에서는 프로덕션 듀얼 레이어 아키텍처를 다룹니다. Hot Path(즉시 컨텍스트)와 Cold Path(외부 저장소)를 결합한 실전 아키텍처를 설계하고, 비용과 지연시간을 최적화하는 전략을 살펴봅니다.

이 글이 도움이 되셨나요?

관련 주제 더 보기

#ai#llm#ai-agent

관련 글

AI / ML

8장: 프로덕션 듀얼 레이어 아키텍처

Hot Path와 Cold Path를 결합한 듀얼 레이어 메모리 아키텍처의 설계, 하이브리드 검색, 메모리 라우팅, 비용-지연시간 최적화 전략을 다룹니다.

2026년 3월 12일·16분
AI / ML

6장: 메모리 압축과 통합

에이전트 메모리의 압축 기법, 3-6배 텍스트 압축과 5-40배 도구 호출 압축, 계층적 통합과 정보 손실 최소화 전략을 다룹니다.

2026년 3월 8일·16분
AI / ML

9장: 프로젝트 메모리와 코딩 에이전트

CLAUDE.md 기반 프로젝트 메모리, 코드베이스 컨텍스트 지속, 세션 간 학습, 팀 메모리 설계 패턴 등 코딩 에이전트에 특화된 메모리 시스템을 다룹니다.

2026년 3월 14일·18분
이전 글6장: 메모리 압축과 통합
다음 글8장: 프로덕션 듀얼 레이어 아키텍처

댓글

목차

약 16분 남음
  • 학습 목표
  • 프레임워크 개관
  • Mem0 — 사용자 선호도의 전문가
    • 설계 철학
    • 핵심 특성
    • 장점과 한계
  • Zep — 시간 인식 지식 그래프
    • 설계 철학
    • 핵심 특성
    • 장점과 한계
  • Letta (구 MemGPT) — OS 영감의 자율 메모리
    • 설계 철학
    • 3계층 메모리 아키텍처
    • 자율적 메모리 관리
  • LangChain / LangGraph 메모리
    • 설계 철학
    • LangGraph의 상태 기반 메모리
  • 종합 비교표
  • 선택 의사결정 트리
    • 조합 사용 전략
  • 정리
  • 다음 장 미리보기