
메모리 관리(Memory Management)는 무상태 LLM에 기억을 달아 대화 연속성·개인화·학습을 가능하게 하는 핵심 에이전트 패턴입니다. 단기(Short-Term)와 장기(Semantic·Episodic·Procedural) 메모리의 구조, 인간 기억과의 매핑, Google ADK의 Session.state·output_key·state_delta·State 접두사, LangGraph의 Checkpointer·Store·thread_id·Namespace, 백엔드 선택(InMemory·PostgreSQL·Redis·VertexAI), CRM/ERP/Groupware 적용과 ROI까지 한 번에 정리했습니다.
TL;DR — 기본 LLM은 무상태(stateless)라 이전 대화를 기억하지 못합니다. 메모리 관리는 대화·상호작용 정보를 저장·검색·활용해 연속성·개인화·학습을 가능하게 하는 패턴입니다. 메모리는 세션 안에서만 사는 단기(Short-Term)와 세션을 넘어 영속하는 장기(Long-Term)로 나뉘고, 장기는 다시 의미·일화·절차 메모리로 갈라집니다. LangGraph는 Checkpointer(단기)+Store(장기), Google ADK는 Session.state+output_key / MemoryService로 구현합니다.
1. 왜 메모리인가 — 똑똑하지만 금붕어인 두뇌
지금까지 일곱 편을 지나왔습니다. 순서대로 쪼개는 체이닝, 입력에 따라 길을 나누는 라우팅, 독립 작업을 동시에 처리하는 병렬화, 쓴 다음 읽고 고치는 리플렉션, 모르면 도구를 쓰는 도구 사용, 언제 어떤 순서로 쓸지 짜는 플래닝, 전문가가 협력하는 멀티 에이전트. 그런데 이 모든 똑똑함에는 치명적 공백이 하나 있습니다.
기본 LLM은 무상태(stateless)입니다. 각 요청은 독립적으로 처리되고, 직전에 무슨 말을 했는지조차 기억하지 못합니다. 방금 이름을 알려줘도 다음 턴이면 깨끗이 잊습니다.
메모리가 붙는 순간 가능해지는 것: 컨텍스트 연속성(반복 질문 방지), 개인화(선호도·히스토리 기반 응답), 학습·개선(과거 경험 활용), 복잡한 작업(다단계 진행 상태 추적). 한마디로 "기억하는 AI Agent"가 됩니다.
2. 메모리 유형 체계 — 인간의 기억을 그대로 빌려오다
AI 메모리 설계는 인지과학의 인간 기억 분류를 거의 그대로 차용합니다. 크게 단기 메모리와 장기 메모리로 나뉘고, 장기는 다시 셋으로 갈라집니다.
| 인간의 기억 | AI Agent 메모리 | 저장 내용 | 예시 |
|---|---|---|---|
| 단기 기억 | Short-Term | 현재 대화·작업 상태 | 진행 중 대화, 작업 단계 |
| 의미 기억 | Semantic | 사실·개념 | 이름, 선호도, 회사 정보 |
| 일화 기억 | Episodic | 경험·사건 | 과거 상담, 해결한 문제 |
| 절차 기억 | Procedural | 규칙·방법 | 응대 스크립트, 업무 절차 |
3. 범위와 생명주기 — 무엇을, 얼마나 오래 기억할까
메모리 설계의 핵심 질문은 둘입니다. 누가 접근하는가(범위)와 언제까지 사는가(생명주기). 유형별로 정리하면 이렇습니다.
| 메모리 유형 | 범위 | 생명주기 | 저장 내용 |
|---|---|---|---|
| Short-Term | 현재 세션 | 세션 종료 시 소멸 | 대화 히스토리, 상태 |
| Semantic | 사용자/조직 | 영구적 | 프로필, 설정 |
| Episodic | 사용자 | 영구적 (TTL 가능) | 경험, 이벤트 |
| Procedural | 조직 | 영구적 | 규칙, 프로세스 |
Google ADK는 이 "범위"를 State 접두사로 아주 간결하게 표현합니다. 키 이름 앞에 붙이는 접두사 하나로 저장 범위와 수명이 정해집니다.
4. 핵심 구성요소 — 메모리를 이루는 6개의 부품
프레임워크가 달라도 메모리를 이루는 부품의 역할은 같습니다. 각 부품이 단기·장기 중 어디에 속하고 어느 프레임워크의 것인지 함께 보면, 뒤 구현 3종이 모두 이 표의 변주임이 보입니다.
| 구성요소 | 역할 | 메모리 | 프레임워크 |
|---|---|---|---|
| Session | 단일 대화 스레드(메시지+이벤트+상태) 컨테이너 | 단기 | ADK |
| State | 세션 내 동적 데이터(key-value) | 단기 | ADK |
| output_key | Agent 응답을 State에 자동 저장 | 단기 | ADK |
| state_delta | 여러 상태를 명시적으로 갱신 | 단기 | ADK |
| Checkpointer | 그래프 실행 상태 저장(단기 영속화) | 단기 | LangGraph |
| Store | 네임스페이스 기반 장기 저장소 | 장기 | LangGraph |
결국 한 문장으로 모입니다 — 단기는 Session·State·Checkpointer로, 장기는 Store(ADK는 MemoryService)로.
5. 구현 ① LangGraph Checkpointer — 단기 메모리의 기본기
LangGraph에서 단기 메모리는 Checkpointer가 담당합니다. 그래프 실행 상태를 턴마다 스냅샷으로 저장해, 같은 대화를 이어가게 해줍니다. 개발용은 휘발성 MemorySaver입니다.
핵심은 둘입니다. thread_id가 같으면 히스토리를 잇고, 다르면 완전히 독립된 새 대화가 됩니다(고객별 격리). 그리고 add_messages 리듀서가 노드 반환값을 자동으로 누적합니다. 저장된 체크포인트는 graph.get_state()·checkpointer.list()로 조회해 타임트래블(이전 상태 복원·디버깅·감사)도 가능합니다.
6. 구현 ② LangGraph 영속 메모리 — 프로덕션의 Checkpointer + Store
프로덕션에서는 휘발성 메모리로는 안 됩니다. 단기는 PostgresSaver(ACID 보장)로, 세션을 넘는 장기 메모리는 PostgresStore로 영속화합니다. Store는 네임스페이스 튜플로 메모리를 계층화합니다.
대용량·고동시성 환경이면 AsyncPostgresSaver로 비동기 처리하고, 캐싱·TTL이 중요하면 RedisSaver를 씁니다. Checkpointer는 "이 대화"를, Store는 "이 사용자"를 기억한다고 보면 정확합니다.
7. 구현 ③ Google ADK — output_key와 state_delta
Google ADK는 Session.state를 중심으로 메모리를 다룹니다. 가장 간단한 길은 output_key — Agent 응답이 자동으로 State에 저장되고, 다음 Agent가 {변수} 템플릿으로 참조합니다.
여러 값을 한 번에 바꾸거나 시스템 이벤트로 상태를 갱신할 땐 EventActions.state_delta를 쓰고 append_event()로 적용합니다(state를 직접 수정하지 않는 것이 원칙). 장기 메모리는 MemoryService가 맡아 add_session_to_memory()로 저장하고 search_memory()로 다른 세션에서 검색합니다.
8. 프레임워크 비교 — 같은 목표, 다른 어휘
두 프레임워크는 "기억한다"는 본질은 같고 부르는 이름과 추상화가 다릅니다. 한 표로 대응시켜 두면 어느 쪽을 읽어도 번역이 됩니다.
| 기능 | Google ADK | LangGraph |
|---|---|---|
| 단기 메모리 | Session.state + output_key | Checkpointer |
| 장기 메모리 | MemoryService | Store |
| 자동 저장 | output_key="변수명" | add_messages 리듀서 |
| 명시적 저장 | EventActions.state_delta | store.put(namespace, key, value) |
| 범위 지정 | 접두사 (user:, app:, temp:) | Namespace 튜플 |
| 시맨틱 검색 | VertexAI RAG | store.search(namespace, query=) |
| 세션 식별 | session_id, user_id | thread_id |
9. 백엔드 선택 — 개발은 InMemory, 운영은 영속 스토리지
메모리의 "그릇"은 요구사항에 따라 고릅니다. 빠르게 만들 땐 InMemory, 무결성이 중요하면 PostgreSQL, 속도가 생명이면 Redis, 의미 검색이 필요하면 Vector Store입니다.
10. 엔터프라이즈 — CRM·ERP·Groupware의 기억
메모리는 엔터프라이즈에서 가장 직접적으로 ROI로 환산됩니다. 시스템마다 기억해야 할 것이 다르고, 그 효과도 측정 가능합니다.
비용 관점으로도 분명합니다. PostgreSQL 메모리 인프라($500/월)로 상담 비용 $5,000/월을 절감하면 ROI 900%, 개발·통합($30,000 일회성)으로 연간 $120,000을 효율화하면 연 300%입니다.
11. 케이스 스터디 — 옴니채널 상담과 도입 로드맵
대표 시나리오는 옴니채널 고객 상담입니다. 고객이 채팅으로 문의를 시작해 전화로 이관하고 이메일로 후속 조치를 받아도, 모든 채널이 같은 메모리를 공유해 컨텍스트가 끊기지 않습니다. 단기(현재 상담)는 PostgresSaver가, 장기(고객 프로필·상담 이력)는 PostgresStore가 책임집니다.
12. 베스트 프랙티스 — 쓸지 말지, 어떻게 쓸지
메모리는 강력하지만 공짜가 아닙니다(저장 비용·검색 지연·개인정보 책임). 쓸 자리와 피할 자리를 먼저 가립니다.
실무 체크리스트: ① 범위 정의(세션/사용자/앱) ② 휘발성 판단(temp:로 분리) ③ 긴 대화는 요약·압축(50개 초과 시) ④ TTL 정책(개인정보 규정 준수) ⑤ 민감 정보 마스킹·암호화(GDPR 삭제권·이동권) ⑥ state 직접 수정 금지(append_event 사용) ⑦ 메모리 서비스 장애 시 graceful degradation.
"순서대로 쪼개라"가 체이닝, "입력에 따라 길을 나눠라"가 라우팅, "독립 작업은 동시에"가 병렬화, "쓴 다음 읽고 고쳐라"가 리플렉션, "모르면 도구를 써라"가 도구 사용, "언제 어떤 순서로 쓸지 계획하라"가 플래닝, "전문가가 협력하라"가 멀티 에이전트였다면 — 메모리 관리는 "겪은 것을 기억하라"입니다. 기억이 생긴 에이전트는 다음 편에서 그 기억으로 배우기 시작합니다.
시리즈: 01 Prompt Chaining → 02 Routing → 03 Parallelization → 04 Reflection → 05 Tool Use → 06 Planning → 07 Multi-Agent → 08 Memory Management → (다음) 09 Learning & Adaptation
안내: 본 글은 Agentic AI Design Patterns 학습 자료(교재·패턴정의·엔터프라이즈 적용전략·구현 3종)를 재구성한 교육용 콘텐츠입니다. 코드는 개념 설명용 예시이며, 프레임워크 API는 버전에 따라 달라질 수 있습니다.
'Agentic AI Design Patterns' 카테고리의 다른 글
| CH10-MCP는 '또 다른 API'가 아니다 — 표준 프로토콜로 모든 LLM에 외부 시스템을 연결하는 법 (1) | 2026.06.07 |
|---|---|
| CH09-기억하는 AI는 끝났다 — 이제 '배우는 AI'다 (피드백 루프부터 자기 개선까지) (0) | 2026.06.06 |
| CH07-혼자보다 팀 — 멀티 에이전트 협업(Multi-Agent Collaboration) 완벽 정리 (0) | 2026.06.04 |
| CH06-스스로 길을 그리는 AI — 플래닝(Planning) 패턴 완벽 정리 (0) | 2026.06.03 |
| CH05-AI 에이전트 도구 사용 입문 | @tool·ReAct·FunctionTool로 외부 API·DB 연동하기 (0) | 2026.06.03 |