Tech

LLM Agent Memory는 왜 망가질까? Stale Memory부터 Memory Rot, Poisoning까지

#LLMAgent#AgentMemory#LongTermMemory#MemoryRot#MemoryPoisoning#AgentSecurity
Minchae Lim
Minchae Limminchae.lim@yonsei.ac.kr
Sep 15, 20268 min read
LLM Agent Memory는 왜 망가질까? Stale Memory부터 Memory Rot, Poisoning까지

AI가 틀린 답을 한 번 내는 건 생각보다 큰 문제가 아닙니다. 다시 물어보면 되니까요. 진짜 골치 아픈 건 그 답을 기억한 다음, 며칠 뒤에도 맞다고 믿는 경우입니다.

예를 들어 사용자가 예전에 “나는 매일 자전거로 출근한다”고 말했다고 해보겠습니다. 몇 달 뒤에는 농구를 하다가 다리가 부러졌다고 이야기했습니다. 그리고 다음 날 다시 출근 방법을 물었습니다. 사람이라면 아마 자전거를 먼저 권하지 않을 겁니다. 다리를 다쳤다는 이야기가 자전거를 직접 언급하지는 않았지만, 지금은 타기 어렵다는 걸 자연스럽게 연결하기 때문입니다.

그런데 Agent의 Memory에는 여전히 이런 문장이 남아 있을 수 있습니다.

사용자는 자전거로 출근하는 것을 선호함.

틀린 기억일까요? 저장될 당시에는 맞았습니다. 검색도 제대로 됐습니다. 문제는 그 다음입니다.

한때 맞았던 기억이 지금도 맞는가?

STALE은 이런 상황을 Implicit Conflict라고 부릅니다. 새로운 정보가 과거의 기억을 직접 부정하지 않았는데도, 사용자의 상태가 바뀌면서 이전 기억의 유효성이 사라지는 경우입니다. 논문에서도 자전거 출근과 다리 부상이라는 비슷한 사례로 이 문제를 설명합니다. Memory가 단순한 대화 기록이라면 크게 신경 쓰지 않아도 될 수 있습니다. 하지만 Agent에서는 이야기가 달라집니다. Microsoft의 Guarding AI Memory는 AI Memory를 앞으로의 답변을 개인화하는 정보뿐 아니라 Agent의 미래 행동을 바꾸는 persistent state로 설명합니다. 저장된 Memory가 reasoning에 다시 들어가고, 어떤 tool을 호출할지에도 영향을 줄 수 있기 때문입니다.

한 번의 오답이 아니라, 오답의 원인이 시스템 안에 남는 것입니다. 그렇다면 Agent의 Memory는 언제부터 망가지기 시작할까요?


잘 찾은 기억이 이미 낡았다면?

Long-term Memory에서 가장 먼저 떠오르는 문제는 검색입니다. 과거에 사용자가 무엇을 말했는지, 몇 달 전 작업에서 어떤 결정을 내렸는지, 수많은 기록 중 지금 필요한 정보를 다시 찾을 수 있어야 합니다. LongMemEval은 이 문제를 단순한 정보 검색보다 넓게 봅니다. 여러 세션에 걸친 reasoning, 시간 관계, 그리고 바뀐 정보를 반영하는 knowledge update까지 함께 평가합니다. 약 115K token 규모의 긴 대화에서는 long-context 모델들의 성능도 크게 떨어졌습니다.

그런데 필요한 정보를 정확하게 찾았다고 해서 문제가 끝나는 것은 아닙니다. Agent의 Memory에는 사용자가 Seattle에 산다고 적혀 있다고 해보겠습니다. 그런데 최근 대화에서는 Portland에서 새 집 계약을 했고, 수도와 전기를 신청했다는 이야기가 계속 등장합니다. 사용자는 한 번도 “Seattle에서 이사했어”라고 직접 말하지 않았습니다.

그러면 Seattle이라는 Memory를 계속 써도 될까요? STALE은 바로 이 지점을 파고듭니다. 새 정보가 기존 사실을 직접 부정하는 경우뿐 아니라, 한 상태의 변화가 관련된 다른 기억까지 무효화하는 경우를 따로 평가합니다.

LongMemEval에서는 긴 대화 전체를 입력했을 때 성능이 크게 하락했고, STALE에서는 최신 정보를 찾아낸 뒤에도 오래된 상태를 최종 판단에 사용하는 문제가 나타났습니다.
LongMemEval에서는 긴 대화 전체를 입력했을 때 성능이 크게 하락했고, STALE에서는 최신 정보를 찾아낸 뒤에도 오래된 상태를 최종 판단에 사용하는 문제가 나타났습니다.

결과는 꽤 좋지 않았습니다. 가장 높은 성능을 낸 모델도 전체 정확도가 55.2%였습니다. 더 흥미로운 것은 최신 정보를 retrieve한 뒤에도 최종 판단에서는 예전 상태를 따라가는 경우가 있었다는 점입니다.

Retrieval에 성공하는 것과 현재 상태를 이해하는 것은 다른 문제입니다.

그래서 단순한 similarity search만으로는 부족합니다. “이 질문과 관련 있는 기억인가?” 다음에 질문이 하나 더 붙습니다. “이 기억은 아직 유효한가?” 이 문제를 해결하려는 시도는 이전에도 있었습니다. MemoryBank는 시간이 흐르면 기억의 강도를 낮추고, 중요한 기억이나 다시 등장한 기억을 강화했습니다. Zep은 과거와 현재의 관계를 temporal knowledge graph 안에 넣었습니다.

하지만 시간만 본다고 해결되는 것은 아닙니다. 1년 전의 취향은 여전히 맞을 수 있고, 어제까지 맞았던 사실이 오늘 아침 한 사건 때문에 갑자기 틀릴 수도 있습니다. 결국 중요한 것은 기억의 나이보다 상태가 바뀌었는지 알아차리는 것입니다.


그런데 맞는 기억도 스스로 망가집니다

Agent가 오래 동작하면 경험은 계속 쌓입니다. 대화도 쌓이고, tool을 호출한 기록도 쌓이고, 성공과 실패도 쌓입니다. 이 모든 기록을 그대로 계속 context에 넣을 수는 없습니다. 그래서 자연스럽게 떠오르는 방법이 요약입니다. 비슷한 경험을 묶고, 다음에도 쓸 수 있는 규칙으로 정리합니다.

실제로 이 방향의 연구들은 꽤 좋은 결과를 보여줬습니다. ExpeL은 여러 경험에서 자연어 형태의 insight를 추출해 이후 문제에 활용했고, CLIN은 task를 수행할 때마다 textual memory를 수정했습니다. Agent Workflow Memory는 긴 action trajectory에서 반복해서 쓸 만한 workflow를 뽑아냅니다. Dynamic Cheatsheet 역시 문제를 풀면서 발견한 전략이나 코드 조각을 persistent memory에 남기고 다음 문제에서 다시 사용했습니다.

경험에서 배우고, 배운 내용을 정리하고, 다음에 다시 쓰는 방식은 Agent에게도 자연스럽습니다. 그런데 여기서 한 가지 질문이 생깁니다.

그 정리 작업을 계속 반복해도 괜찮을까요?

Useful Memories Become Faulty는 이 질문을 직접 실험했습니다.

Memory는 처음에는 도움이 되지만, consolidation이 반복되면 utility가 다시 떨어질 수 있습니다.
Memory는 처음에는 도움이 되지만, consolidation이 반복되면 utility가 다시 떨어질 수 있습니다.

처음에는 예상대로였습니다. Memory를 만들고 갱신하자 성능이 올라갑니다. 문제는 update가 계속되자 어느 시점부터 성능이 다시 떨어졌다는 점입니다. 논문은 이 구간을 Memory Erosion이라고 표현합니다. 더 흥미로운 실험도 있습니다. GPT-5.4가 Memory 없이 이미 풀 수 있었던 ARC-AGI 문제 19개를 준비하고, 그 문제들의 정답 trajectory만 Memory를 만드는 데 사용했습니다. 처음 들어간 경험에는 틀린 답이 없었던 셈입니다.

반복적인 update를 거친 Stream 설정은 94.7%에서 52.6%까지 성능이 떨어졌습니다
반복적인 update를 거친 Stream 설정은 94.7%에서 52.6%까지 성능이 떨어졌습니다

모든 경험을 모아 한 번 정리했을 때는 성능이 거의 유지됐습니다. 그런데 새로운 경험이 들어올 때마다 기존 Memory를 다시 고치도록 하자, 10번째 round에서는 성공률이 52.6%까지 떨어졌습니다. 정답만 가르쳐 줬는데, 기억한 뒤 오히려 못 풀기 시작한 것입니다. 왜 이런 일이 생길까요? 처음에는 다음과 같은 경험이 있었다고 해보겠습니다.

“이 조건에서는 A를 사용했더니 잘 됐다.”

여러 경험을 합치면서 문장이 바뀝니다.

“이런 상황에서는 A가 효과적이다.”

한 번 더 정리하면 이렇게 될 수 있습니다.

“A가 좋은 전략이다.”

각각의 변화만 보면 크게 이상하지 않습니다. 하지만 첫 번째 문장에 있던 조건이 조금씩 사라졌습니다. 이런 작은 손실이 한 번이면 별일 아닐 수 있습니다. 그런데 새 경험이 들어올 때마다 이전 요약을 다시 요약한다면, 작은 왜곡이 다음 update의 입력이 되면서 계속 누적될 수 있습니다. ACE도 비슷한 현상을 지적합니다. 기존 context 전체를 계속 다시 쓰다 보면 세부 내용이 깎여 나가는 context collapse가 발생할 수 있다는 것입니다.

Memory에서도 비슷한 일이 벌어지고 있는 셈입니다. 이 글에서는 이렇게 반복적인 update와 consolidation을 거치면서 Memory가 원래 경험에서 조금씩 멀어지는 현상을 편의상 Memory Rot이라고 부르겠습니다.

틀린 경험만 나쁜 기억을 만드는 것은 아닙니다. 맞는 경험도 잘못 정리하면 나쁜 기억이 됩니다.

실제 production agent 관점에서도 비슷한 문제가 관찰됩니다. Letta의 production memory evaluation에서는 시간이 지나면서 Memory에 stale한 정보와 중복 내용이 쌓이고, 이를 유지·정리하는 memory hygiene 자체를 별도의 평가 문제로 다룹니다. 그래서 최근 연구에서는 요약된 Memory만 남기는 대신, raw episode 자체를 다시 확인할 수 있게 보존하는 방향도 중요하게 보고 있습니다. 특히 Useful Memories Become Faulty는 raw episode를 근거로 유지하면서 consolidation 자체를 선택적으로 수행하는 방향을 제안합니다.

요약은 기억 그 자체라기보다, 원래 경험으로 돌아가기 위한 색인에 가까워질 필요가 있습니다.


누군가 일부러 잘못된 기억을 심는다면?

지금까지는 공격자가 없었습니다. 세상이 변해서 기억이 낡았고, Agent가 스스로 경험을 정리하다가 기억을 왜곡했습니다. 그런데 Memory가 앞으로의 행동을 계속 바꾼다면 누군가는 반대로 생각할 수 있습니다.

“내가 원하는 내용을 Agent가 기억하게 만들면 되지 않을까?”

Memory Poisoning입니다.

Memory Poisoning에서는 악성 입력이 Agent의 Memory에 정상적인 정보처럼 저장되고, 이후 다른 질의에서 다시 검색되어 잘못된 판단이나 행동으로 이어질 수 있습니다. Adapted from MINJA.
Memory Poisoning에서는 악성 입력이 Agent의 Memory에 정상적인 정보처럼 저장되고, 이후 다른 질의에서 다시 검색되어 잘못된 판단이나 행동으로 이어질 수 있습니다. Adapted from MINJA.

이 공격도 처음부터 Agent Memory에서 시작한 것은 아닙니다. PoisonedRAG는 RAG가 검색하는 knowledge database에 악성 문서를 넣어 특정 질문에서 공격자가 원하는 답을 끌어내는 방식을 보여줬습니다. AgentPoison은 공격 대상을 Agent의 long-term memory까지 넓혔습니다. 여기까지는 공격자가 Memory나 knowledge base에 악성 데이터를 넣을 수 있다고 가정합니다. MINJA는 조건을 더 까다롭게 만들었습니다.

Memory Bank에 직접 접근하지 못해도 공격이 가능할까요? MINJA의 공격자는 일반 사용자처럼 Agent에게 query를 보낼 수 있을 뿐입니다. 그런데 질문을 잘 구성해 Agent가 특정 reasoning 과정을 스스로 만들게 하고, 그 결과가 정상적인 경험처럼 Memory에 저장되도록 합니다. 나중에 다른 질문이 들어오면 그 악성 record가 다시 검색되어 Agent의 판단을 특정 방향으로 끌고 갑니다. 실험에서는 평균 98.2%의 malicious record injection 성공률과 76.8%의 attack success rate가 보고됐습니다.

일반적인 Prompt Injection과 비교하면 차이가 더 잘 보입니다. Prompt Injection은 대개 다음과 같습니다. 악성 입력 → 잘못된 행동 Memory Poisoning에는 중간 단계가 하나 더 생깁니다. 악성 입력 → Memory 저장 → 시간이 지남 → 다른 질문 → 잘못된 행동 공격한 순간에는 아무 일도 일어나지 않을 수 있다는 점이 Memory Poisoning의 까다로운 부분입니다. 며칠 뒤 전혀 다른 대화에서 문제가 생길 수도 있습니다. Guarding AI Memory가 Memory를 transient threat를 persistent threat로 바꿀 수 있는 상태로 보는 이유입니다.

실제 웹에서도 비슷한 시도가 등장했습니다. Microsoft는 AI Recommendation Poisoning에서 일부 웹사이트의 “Summarize with AI” 링크 안에 특정 회사를 신뢰할 만한 출처로 기억하거나 앞으로 먼저 추천하도록 AI에게 지시하는 prompt가 들어간 사례를 조사했습니다. 60일 동안 31개 기업에서 50개의 서로 다른 시도를 발견했습니다. 물론 50건이 모두 실제 Memory 조작에 성공했다는 의미는 아닙니다. 플랫폼마다 Memory 구현도 다르고 방어 방식도 다릅니다.

그래도 변화는 흥미롭습니다. 예전에는 검색 결과의 위쪽에 올라가기 위해 SEO를 고민했다면, 이제는 AI가 앞으로 무엇을 기억하게 할지까지 조작하려는 시도가 등장한 것입니다.


그럼 좋은 Memory는 무엇이 달라야 할까요?

지금까지 본 세 문제를 다시 놓아보면 원인은 다릅니다. Stale Memory는 저장할 때는 맞았지만 현실이 변했습니다. Memory Rot은 경험은 맞았지만 정리하는 동안 의미가 변했습니다. Memory Poisoning은 외부에서 잘못된 정보를 기억시키려 했습니다.

그런데 Agent 입장에서 세 문제는 결국 같은 질문으로 모입니다.

지금 꺼낸 이 기억을 믿어도 될까?

그래서 최근 Memory 연구를 보면 단순히 write → retrieve만 다루지 않습니다. Rethinking Memory in LLM-based Agents는 Memory를 consolidation, updating, indexing, forgetting, retrieval 등의 여러 operation으로 나눕니다. Memory-R1은 더 직관적입니다. 새 정보가 들어왔을 때 Memory Manager가 할 일을 ADD, UPDATE, DELETE, NOOP으로 나눕니다.

즉, 새로운 정보가 들어왔다고 무조건 저장하지 않습니다.

새로운 정보가 기존 Memory와 어떤 관계인지 판단해 ADD, UPDATE, DELETE, NOOP 중 하나를 선택하며, 이 판단이 장기 Memory의 일관성을 좌우합니다.
새로운 정보가 기존 Memory와 어떤 관계인지 판단해 ADD, UPDATE, DELETE, NOOP 중 하나를 선택하며, 이 판단이 장기 Memory의 일관성을 좌우합니다.

생각해보면 사람도 비슷합니다. 새로운 정보를 들었다고 기존 기억 옆에 계속 추가만 하지 않습니다. 생각이 바뀌면 고치고, 틀렸다고 알게 되면 버리고, 확신이 없으면 일단 판단을 보류합니다. Agent Memory도 단순한 저장소보다 계속 관리해야 하는 상태에 가까워지고 있습니다.

Guarding AI Memory가 제안하는 방향도 비슷합니다. Memory를 저장할 때는 어디에서 온 정보인지 provenance를 확인하고, 다시 꺼낼 때는 relevance뿐 아니라 freshness와 tampering 여부까지 재평가합니다. 그리고 무엇이 언제 저장되고 수정됐는지 전체 lifecycle을 추적할 수 있어야 한다고 말합니다.

Memory failure는 저장할 때만 발생하지 않습니다. 새로운 정보를 쓰고, 기존 기억을 수정하고, 다시 검색해 행동에 사용하는 전체 lifecycle이 관리 대상입니다.
Memory failure는 저장할 때만 발생하지 않습니다. 새로운 정보를 쓰고, 기존 기억을 수정하고, 다시 검색해 행동에 사용하는 전체 lifecycle이 관리 대상입니다.

앞에서 봤던 연구들을 이 관점으로 다시 보면 필요한 질문이 조금씩 달라집니다.

  • 이 Memory는 지금도 최신인가?
  • 최근 정보와 충돌하지 않는가?
  • 어디에서 들어온 정보인가?
  • 여러 번 요약되면서 원래 근거가 사라지지는 않았나?
  • 평소와 다른 방식으로 만들어지거나 수정되지는 않았나?

지금까지 Memory Retrieval의 핵심 질문이 “무엇을 가져올까?”였다면, 앞으로는 그 다음 질문도 중요해집니다.

“가져온 걸 믿어도 될까?”

Memory Retrieval이 단순한 검색 문제에서 신뢰성 판단 문제로 넓어지고 있는 셈입니다.


결국 좋은 Agent Memory란 무엇일까?

Memory가 없는 Agent는 매번 처음부터 시작합니다. Memory가 있으면 지난 대화를 기억하고, 사용자를 이해하고, 이전 실패를 다음 시도에 활용할 수 있습니다. ExpeL이나 Dynamic Cheatsheet 같은 연구가 보여주듯 경험을 다시 사용하는 것은 실제로 Agent를 더 강하게 만들기도 합니다. 그러니 답이 “기억하지 말자”일 리는 없습니다. 문제는 기억이 많아질수록 그 기억도 늙고, 섞이고, 때로는 공격받는다는 데 있습니다.

처음의 자전거 이야기로 돌아가 보겠습니다. Agent에게 필요한 것은 “사용자는 자전거로 출근한다”는 문장을 몇 년 동안 잊지 않는 능력만이 아닙니다. 다리를 다쳤다는 새로운 이야기를 들었을 때,

“아, 내가 알고 있던 그 기억은 지금은 쓰면 안 되겠구나.”

라고 알아차리는 능력입니다. LLM Agent Memory의 다음 과제는 더 많이, 더 오래 기억하는 것이 아닐지도 모릅니다.

좋은 Memory는 모든 것을 기억하는 Memory가 아니라, 자신의 기억을 언제 의심해야 하는지 아는 Memory입니다.


참고문헌

  1. Wu, D. et al. (2025). LongMemEval.
  2. Chao, H. et al. (2026). STALE.
  3. Zhang, D. et al. (2026). Useful Memories Become Faulty When Continuously Updated by LLMs.
  4. Zhong, W. et al. (2024). MemoryBank.
  5. Zhao, A. et al. (2024). ExpeL.
  6. Majumder, B. P. et al. (2023). LIN.
  7. Wang, Z. Z., Mao, J., Fried, D., & Neubig, G. (2025). Agent Workflow Memory.
  8. Suzgun, M. et al. (2026). Dynamic Cheatsheet.
  9. Zhang, Q. et al. (2026). Agentic Context Engineering.
  10. Rasmussen, P. et al. (2025). Zep.
  11. Yan, S. et al. (2025). Memory-R1.
  12. Du, Y. et al. (2025). Rethinking Memory in LLM-based Agents.
  13. Chen, Z. et al. (2024). AgentPoison.
  14. Zou, W., Geng, R., Wang, B., & Jia, J. (2025). PoisonedRAG.
  15. Dong, S. et al. (2025). MINJA.
  16. Microsoft Security. (2026). Guarding AI Memory.
  17. Microsoft (2026). Manipulating AI Memory for Profit: The Rise of AI Recommendation Poisoning.
  18. Letta. (2026). Evaluating Memory in Production Agents.