Skip to content

AI 에이전트 메모리 시스템 개요

단기 메모리와 장기 메모리의 전체 그림


학습 목표

  • AI 에이전트에서 메모리 시스템이 왜 필요한지 이해한다.
  • 단기 메모리(Short-term Memory)와 장기 메모리(Long-term Memory)의 차이를 구분할 수 있다.
  • LangGraph에서 각 메모리 타입에 대응하는 구현 도구(InMemorySaver, InMemoryStore 등)를 파악한다.
  • 메모리 저장소의 영구성 수준(휘발성/반영구/영구)에 따른 선택 기준을 설명할 수 있다.

1. 메모리란 무엇인가

AI 에이전트에서 메모리란, 이전 상호작용에 대한 정보를 기억하고 이후 동작에 활용하는 시스템을 말한다. 사람이 과거 대화를 떠올리며 맥락에 맞는 응답을 하는 것처럼, 에이전트도 메모리를 통해 더 자연스럽고 개인화된 상호작용을 제공할 수 있다.

기본 LLM API는 메모리 관리 기능을 자체적으로 지원하지 않는다. 매번 호출할 때마다 독립적인 요청으로 처리되기 때문에, 이전 대화 내용을 기억하려면 개발자가 직접 메모리 시스템을 구축해야 한다.

메모리를 통해 에이전트가 할 수 있는 일:

  • 이전 대화 기억: 같은 주제에 대해 반복 질문하지 않아도 맥락을 유지한다.
  • 피드백 학습: 사용자의 수정 요청이나 선호 표현을 기억하여 다음 응답에 반영한다.
  • 사용자 선호 적응: "한국어로 답변해 주세요", "코드 예시를 항상 포함해 주세요" 같은 설정을 기억한다.

실무 예시: AI 고객센터 챗봇을 생각해 보자. 메모리가 없으면 사용자가 매번 자신의 문제를 처음부터 설명해야 한다. 메모리가 있으면 유저별 이전 상담 내역을 기억하여 "지난번 배송 지연 건은 해결되셨나요?"처럼 맞춤 응대가 가능해진다.

메모리 시스템 구조 다이어그램

사용자의 요청이 AI 에이전트에 도달하면, 에이전트는 메모리 시스템에서 관련 정보를 조회하여 응답에 활용하고, 새로운 정보가 생기면 메모리에 저장한다. 이 저장-조회 루프가 메모리 시스템의 핵심이다.


2. 단기 메모리 (Short-term Memory)

단기 메모리는 하나의 대화 스레드(thread) 내에서 유지되는 기억이다. 대화가 시작되고 끝날 때까지의 범위에서만 유효하며, 다른 대화 스레드에서는 접근할 수 없다.

ChatGPT 비유

ChatGPT에서 하나의 채팅방을 열면, 그 채팅방 안에서 주고받은 대화 내역을 ChatGPT가 기억하고 있다. 이것이 단기 메모리다. 새로운 채팅방을 열면 이전 채팅방의 내용은 알지 못한다.

저장 내용

저장 대상설명
대화 메시지사용자와 에이전트 간 주고받은 메시지 전체
파일/문서대화 중 업로드되거나 참조된 파일
생성된 산출물에이전트가 대화 중 생성한 코드, 분석 결과 등

LangGraph 구현

LangGraph에서 단기 메모리는 State 객체에 저장되며, InMemorySaver 체크포인터를 활용하여 같은 스레드 내에서 상태를 유지한다. 각 대화 스레드는 고유한 thread_id로 구분된다.

python
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.graph import StateGraph, MessagesState

# 체크포인터 생성
checkpointer = InMemorySaver()

# 그래프에 체크포인터 연결
graph = graph_builder.compile(checkpointer=checkpointer)

# thread_id로 대화 스레드 구분
config = {"configurable": {"thread_id": "thread-abc-123"}}

# 같은 thread_id로 호출하면 이전 대화 내역을 이어받는다
result = graph.invoke({"messages": [...]}, config=config)

핵심 특징:

  • 하나의 대화 스레드 안에서만 유효하다.
  • thread_id로 각 대화를 구분한다.
  • 대화가 끝나거나 스레드가 삭제되면 메모리도 사라진다.
  • InMemorySaver는 메모리에 저장하므로 서버 재시작 시 데이터가 소멸한다.

3. 장기 메모리 (Long-term Memory)

장기 메모리는 여러 대화 스레드를 넘나들며 유지되는 기억이다. 하나의 대화에서 학습한 정보를 다른 대화에서도 활용할 수 있다.

ChatGPT 비유

ChatGPT가 모든 채팅방의 전체 대화 기록을 종합하여, 새 채팅방을 열었을 때에도 "이 사용자는 한국어를 선호하고, 프론트엔드 개발자이며, 코드 예시를 좋아한다"는 것을 알고 있다면 --- 이것이 장기 메모리다.

저장 내용

저장 대상설명
사용자 선호도언어, 응답 스타일, 관심 분야 등
과거 전체 상호작용 이력여러 대화에 걸친 중요 정보의 요약
학습된 패턴사용자의 반복적인 요청 패턴, 자주 묻는 질문 유형

LangGraph 구현

LangGraph에서 장기 메모리는 InMemoryStore를 사용하며, Namespace(네임스페이스) 기반으로 데이터를 구분한다. 사용자별, 애플리케이션별로 계층적 네임스페이스를 설정하여 메모리를 체계적으로 관리한다.

python
from langgraph.store.memory import InMemoryStore

# 스토어 생성
store = InMemoryStore()

# 그래프에 스토어 연결
graph = graph_builder.compile(store=store)

# 네임스페이스로 사용자별 데이터 구분
namespace = ("user_preferences", "user-456")

# 장기 메모리에 저장
store.put(namespace, key="language", value={"preference": "ko"})
store.put(namespace, key="expertise", value={"level": "senior", "domain": "frontend"})

# 다른 대화 스레드에서도 조회 가능
items = store.search(namespace)
# [Item(key="language", value={"preference": "ko"}),
#  Item(key="expertise", value={"level": "senior", "domain": "frontend"})]

핵심 특징:

  • 여러 대화 스레드에 걸쳐 유지된다.
  • namespace 튜플로 데이터를 계층적으로 구분한다.
  • 더 큰 범위에서 사용자 수준 또는 애플리케이션 수준으로 관리한다.
  • store.search()로 관련 메모리를 검색하여 에이전트의 컨텍스트에 주입할 수 있다.

4. 단기 vs 장기 메모리 비교

비교 다이어그램

비교 테이블

구분단기 메모리장기 메모리
범위단일 대화 스레드여러 대화 스레드
구분 키thread_idnamespace 튜플
LangGraph 구현InMemorySaverInMemoryStore
저장 방식체크포인터 (Checkpointer)스토어 (Store)
비유하나의 채팅방모든 채팅방 통합

단기 메모리는 "지금 이 대화"에 집중하고, 장기 메모리는 "전체 사용 이력"에 집중한다. 두 가지를 조합하면, 에이전트는 현재 맥락을 정확히 파악하면서도 사용자의 전반적인 선호와 이력을 반영한 응답을 생성할 수 있다.


5. LangGraph 메모리 구현 도구 매핑

실무에서 메모리 시스템을 구축할 때, 데이터의 영구성 수준에 따라 선택할 수 있는 구현 도구가 달라진다.

영구성 수준별 설명

수준도구특징적합한 상황
휘발성InMemorySaver / InMemoryStore메모리에 저장, 서버 재시작 시 소멸개발/테스트, 프로토타이핑
반영구LangGraph Dev (클라우드)LangGraph 플랫폼에서 관리, 인프라 설정 불필요빠른 배포, 관리형 서비스 선호 시
영구PostgreSQL / MongoDB / Redis외부 데이터베이스에 영구 저장프로덕션 환경, 데이터 보존 필수 시

단기 메모리와 장기 메모리 모두 동일한 영구성 단계(휘발성 → 반영구 → 영구)를 거칠 수 있다. 프로토타이핑 단계에서는 InMemorySaverInMemoryStore로 빠르게 시작하고, 프로덕션으로 이행할 때 PostgreSQL이나 MongoDB 같은 영구 저장소로 전환하는 것이 일반적인 패턴이다.


6. 핵심 정리

AI 에이전트의 메모리 시스템은 단기 메모리와 장기 메모리로 나뉘며, 각각 다른 범위와 목적을 가진다.

  • 메모리의 필요성: 기본 LLM API는 메모리를 지원하지 않으므로, 이전 대화 기억, 피드백 학습, 사용자 적응을 위해 별도 시스템을 구축해야 한다.
  • 단기 메모리: 하나의 대화 스레드 안에서 유지되는 기억이다. thread_id로 구분하며, LangGraph에서는 InMemorySaver로 구현한다.
  • 장기 메모리: 여러 대화 스레드를 넘나들며 유지되는 기억이다. namespace 튜플로 구분하며, LangGraph에서는 InMemoryStore로 구현한다.
  • 영구성 단계: 두 메모리 타입 모두 휘발성(InMemory) → 반영구(LangGraph Dev) → 영구(PostgreSQL/MongoDB/Redis) 순으로 저장 수준을 높일 수 있다.

단기 메모리로 현재 대화의 맥락을 유지하고, 장기 메모리로 사용자의 전체 이력과 선호를 관리하면 --- 에이전트는 매 대화에서 사용자에게 최적화된 응답을 제공할 수 있다.