
실용적인 에이전트 메모리 아키텍처: 무엇을 유지하고, 검색하고, 수정하고, 잊을 것인가
요약
단순히 컨텍스트 윈도우를 늘리는 것만으로는 에이전트의 성능을 보장할 수 없습니다. 본 글은 에이전트가 효율적으로 정보를 유지, 검색, 수정, 망각할 수 있도록 돕는 실용적인 메모리 아키텍처 설계 원칙과 체크리스트를 제안합니다.
핵심 포인트
- 컨텍스트 윈도우 확장과 실제 사용 가능한 정보량은 다를 수 있음
- Lost in the Middle 현상으로 인해 정보의 위치가 추론 성능에 영향을 미침
- 장기 히스토리 처리를 위해서는 인덱싱, 검색, 읽기 단계의 분리가 필요함
- 효율적인 에이전트를 위해 메모리 관리 정책(Policy) 설계가 필수적임
실용적인 에이전트 메모리 아키텍처: 무엇을 유지하고, 검색하고, 수정하고, 잊을 것인가
더 큰 컨텍스트 윈도우 (Context window)는 저장할 수 있는 양을 늘려줍니다. 하지만 에이전트가 실제로 무엇을 사용해야 할지를 결정하지는 않습니다. 이것은 그 역할을 수행하는 부분을 위한 구축 체크리스트입니다.
시작을 위한 멘탈 모델 (Mental model)은 다음과 같습니다. 컨텍스트 (Context)는 작업 세트 (Working set)이며, 모델이 이번 턴에 추론하는 몇 가지 요소입니다. 메모리 (Memory)는 훨씬 더 큰 저장소로부터 무엇이 그 작업 세트에 도달할지를 결정하는 정책 (Policy)입니다. 백만 토큰의 윈도우는 저장소를 더 크게 만들 뿐입니다. 그것은 사서 (Librarian)를 고용하지 않으며, 배터리가 다 되기 전에 지게차에게 어떤 상자를 가져와야 할지 알려주지도 않습니다. 창고에 선반을 계속 추가한다고 해서 그것이 도서관이 되지는 않습니다.
체크리스트를 확인하기 전에, 왜 윈도우만으로는 충분하지 않은지에 대한 두 가지 증거를 설명하겠습니다.
왜 윈도우가 정답이 아닌가
하나의 프롬프트 (Prompt) 내부에서는 위치가 중요합니다. Lost in the Middle 연구는 2023년 시대의 모델들을 대상으로 통제된 질의응답 및 키-값 검색 (Key-value retrieval)을 수행했을 때 U자형 패턴을 발견했습니다. 즉, 중간에 있는 정보보다 시작 부분이나 끝 부분에 있는 정보가 더 신뢰성 있게 사용되었습니다. 이를 고정된 점수가 아닌, 입증된 실패 모드 (Failure mode)로 이해해야 합니다. 합성 스트레스 테스트 (Synthetic stress tests)는 더 나아갑니다. RULER는 13개의 합성 작업에 대해 17개의 모델을 평가했으며, 최소 32K 컨텍스트를 보유한다고 주장하는 모델 중 약 절반만이 32K에서 만족스러운 임계값(RULER 자체 정의 기준 85.6%)을 유지한다는 것을 발견했습니다. 2025년 프리프린트(Preprint)인 NoLiMa는 문자 그대로의 키워드 중복을 제거하여 매칭에 잠재적 연관성 (Latent association)이 필요하도록 설계되었습니다. 이 v1 평가 하에서 GPT-4o는 짧은 컨텍스트에서의 99.3%에서 32K 컨텍스트에서는 69.7%로 떨어졌습니다. 롱 컨텍스트 (Long context)는 여전히 개선되고 있습니다. RULER의 표를 보면 일부 최신 모델들은 128K까지 강력한 성능을 유지했습니다. 여기서 얻을 수 있는 결론은 명확합니다: 사용 가능한 컨텍스트 (Usable context)는 명목상의 컨텍스트 (Nominal context)보다 작을 수 있습니다.
긴 히스토리 (Long histories)는 별개의 문제입니다. LongMemEval은 추출 (extraction), 멀티 세션 추론 (multi-session reasoning), 시간적 추론 (temporal reasoning), 지식 업데이트 (knowledge updates) 및 기권 (abstention)이라는 다섯 가지 장기 메모리 능력을 대상으로 500개의 질문을 사용합니다. 약 115K 토큰 설정에서 테스트된 롱 컨텍스트 (long-context) 모델들은 성능이 30%에서 60%까지 하락했습니다. 컨텍스트 윈도우 (window)가 히스토리를 담고는 있었지만, 그것을 담고 있는 것만으로는 충분하지 않았습니다. 결정적으로, 저자들은 메모리를 인덱싱 (indexing), 검색 (retrieval), 읽기 (reading)로 나누었으며, 완벽한 회상 (perfect-recall) 메모리를 갖추더라도 Chain-of-Note와 같은 구조화된 읽기 방식이 테스트된 세 가지 LLM 전반에서 질의응답 성능을 최대 10 절대 포인트까지 향상시켰다고 보고했습니다. 올바른 기록을 검색하는 것은 작업의 절반에 불과합니다.
서로 다른 테스트들은 광고된 컨텍스트 용량과 신뢰할 수 있는 사용 사이의 서로 다른 격차를 드러냅니다. Lost in the Middle는 위치를 변화시키고, RULER는 더 어려운 추적 및 집계 작업을 추가하며, LongMemEval은 긴 상호작용 히스토리에 걸친 메모리를 평가합니다. 결과는 연구마다 다르며 하나의 척도를 공유하지 않습니다. 출처: Liu et al. (TACL 2024), Hsieh et al. (COLM 2024), Wu et al. (ICLR 2025).
구축 체크리스트
1. 하나의 트랜스크립트가 아닌 세 개의 레이어를 분리하라
원시 히스토리 (raw history), 내구적 메모리 (durable memory), 작업 컨텍스트 (working context)를 단순히 "트랜스크립트를 저장하는 것"으로 통합하지 마십시오. 다음과 같이 분리하십시오:
- 원시 이벤트 히스토리 (Raw event history): 보존 및 삭제 규칙의 적용을 받는, 감사 가능한 아카이브 (auditable archive).
- 큐레이션된 메모리 (Curated memory): 작고, 타입이 지정되었으며, 주요 범위 (principal-scoped) 내에서 관리되고 통제되며, 통합을 되돌릴 수 있도록 소스 이벤트 참조를 포함함.
- 작업 컨텍스트 (Working context): 신뢰할 수 없는 원시 이벤트에서 직접 재생하는 것이 아니라, 큐레이션된 레이어로부터 조립됨.
이러한 분리는 단일 출처의 규칙이 아니라, LongMemEval, MemGPT, Anthropic의 컨텍스트 엔지니어링 가이드라인 (context-engineering guidance), LangChain의 메모리 문서 (memory docs), 그리고 OpenAI Agents SDK의 세션 모델 (sessions model)을 아우르는 공학적 종합입니다.
원시 이벤트 (Raw events)는 보존 한도 내에서 감사 가능 (auditable)한 상태로 유지될 수 있는 반면, 원칙 범위 내에서 큐레이션된 메모리 (curated memory)는 모델이 현재 무엇을 볼지를 결정합니다. 수용 (Admission), 검색 (retrieval), 수정 (revision), 그리고 망각 (forgetting)은 별개의 제어 지점 (control points)입니다.
2. 다섯 가지 결정을 별도의 제어 지점으로 구현하기
모든 이벤트는 독립적으로 테스트하고 계측할 수 있는 일련의 검증 과정 (gauntlet)을 거칩니다:
- 수용 (Admit). 이것이 기억할 가치가 있는가, 아니면 원시 로그 (raw log)에만 남겨둘 일시적인 노이즈인가?
- 검색 (Retrieve). 현재 작업 (task)을 고려할 때, 저장된 항목 중 어떤 것이 관련이 있는가?
- 통합 (Consolidate). 관련 이벤트들을 소스 이벤트 (source events)에 대한 포인터를 유지하면서 하나의 요약본으로 압축할 수 있는가?
- 수정 (Revise). 더 높은 신뢰도를 가진 사실이 이전 사실을 대체했는가? 이때 각 버전에 대한 출처 (provenance)가 있는가?
- 망각 (Forget). 만료되었거나, 틀린 것으로 판명되었거나, 안전하지 않게 되었기 때문에 항목을 활성 메모리 (active memory)에서 제거해야 하는가? 또는 권한이 있는 삭제 (authorized erasure)를 통해 원시 저장소와 파생 저장소 모두에서 제거해야 하는가?
3. 모든 큐레이션된 레코드에 메타데이터 (metadata) 부착하기
각 레코드는 타임스탬프 (timestamps), 소스 이벤트 참조 (source-event references), 신뢰도 (confidence), 충돌 상태 (conflict status), 만료 (expiry) 및 삭제 상태 (deletion state)를 포함합니다. 사용자에게 보이는 메모리는 검사 및 수정이 가능한 상태로 유지됩니다. 이것이 수정을 출처 인식 (provenance-aware) 가능하게 만들고, 통합을 가역적 (reversible)으로 만드는 핵심입니다.
4. 망각을 손실이 아닌 품질 관리 (quality control)로 취급하기
모든 도구 출력값을 쌓아두는 것은 사진적 기억력(photographic memory)이 아닙니다. 그것은 토큰 비용이 발생하는 차고와 같으며, 중요한 몇 안 되는 기록들을 중요하지 않은 수천 개의 기록 아래 파묻어 버립니다. 망각은 조용한 파괴가 아니라 분리에 의존해야 합니다. 즉, 오래된 정보(staleness), 반증된 정보(disproof) 또는 낮은 관련성(low relevance)은 원본 증거 보존이 허용하는 범위 내에서 큐레이션된 항목을 비활성화해야 합니다. 승인된 사용자의 삭제와 법적으로 요구되는 삭제는 서로 다른 작업이며, 파생된 복사본만 남겨두는 것이 아니라 원본 기록, 인덱스(index), 그리고 통합된 메모리(consolidated memories) 전체에 전파되어야 합니다. 이는 MemoryBank의 망각 로직에서 아이디어를 얻은 것으로, 에빙하우스(Ebbinghaus)에서 영감을 받은 메커니즘은 보편적인 쇠퇴 법칙이라기보다 합리적인 설계 선택입니다. 또한 Anthropic의 압축(compaction) 가이드라인도 참고하였습니다.
5. 포이즈닝(poisoning)에 대비하여 쓰기 경로(write path)를 강화하기
메모리가 신뢰할 수 있는 컨텍스트(context)로서 다시 읽히는 순간, 그것은 보안 경계가 됩니다. 프리프린트(preprint) 논문인 AgentPoison은 세 개의 통제된 에이전트에 걸쳐 메모리와 검색 저장소(retrieval stores)를 오염시켜, 악성 기록이 나중에 검색된 데몬스트레이션(demonstrations)으로 나타나게 했습니다. 통제된 위협 모델 하의 프리프린트인 MINJA는 공격자가 일반적인 쿼리(queries)만을 사용하여 악성 기록을 주입할 수 있음을 보여주었습니다. 이것들은 실험적인 위협 모델이며 실제 배포 환경에서의 빈도를 나타내는 것은 아니지만, 메커니즘 자체는 유효합니다. 즉, 어떤 발화(utterance)라도 영구적인 진실이 될 수 있다면, 어떤 사용자든 당신의 모델의 미래 컨텍스트에 기록을 쓸 수 있다는 것입니다. OWASP의 데이터 및 모델 포이즈닝 가이드라인은 출처 추적(provenance tracking), 버전 관리(versioning), 이상 탐지(anomaly detection), 신뢰할 수 없는 데이터의 샌드박싱(sandboxing), 그리고 신뢰할 수 있는 소스에 대한 검증을 권장합니다. 이를 메모리에 매핑하면 다음과 같습니다:
- 신뢰 경계(trust boundary)에 쓰기 게이트(write gate)를 설치하십시오. 악의적인 입력이 스스로의 중요도를 부풀릴 수 있으므로, 승인 분류기(admission classifier)는 그 내부에 유지해야 합니다.
- 기록에는 출처(provenance)가 포함되어야 하며, 업데이트는 되돌릴 수 있어야(reversible) 합니다.
- 신뢰할 수 없는 턴(turn)에서 생성된 콘텐츠가 영구적이고 신뢰도가 높은 메모리로 조용히 승격될 수 없도록 해야 합니다.
- 큐레이션된 메모리와 검색(retrieval)을 주체(principal)별로 분리하여, 한 사용자의 상태가 다른 사용자의 작업 컨텍스트(working context)에 나타나지 않도록 하십시오.
6. 각 단계를 개별적으로 테스트하십시오
인덱싱(indexing), 검색(retrieval), 읽기(reading)를 하나의 답변 정확도 수치로 평가하지 말고 별개의 단계로 평가하십시오. 시스템이 완벽하게 검색하더라도 잘못 읽을 수 있기 때문입니다. 쓰기 경로(write path)와 검색 경로(retrieval path)에 대한 명시적인 테스트를 작성하십시오. 단순히 정확성뿐만 아니라 오래된 메모리(stale-memory), 충돌(conflict), 격리(isolation) 오류를 추적하십시오. 검색과 압축(compression)은 그 자체로 고유한 실패 모드(failure modes)를 가집니다. 검색기는 중요한 단 하나의 세부 사항을 누락할 수 있고, 요약(summary)은 시대에 뒤떨어질 수 있으며, 자체 페이징(paging)을 제어하는 에이전트는 하나의 잘못된 결정이 여러 개의 결정으로 이어지는 연쇄 효과(cascade)를 일으킬 수 있습니다.
이 체크리스트로 읽어볼 수 있는 기존 연구(Prior art)
Generative Agents는 믿을 수 있는 행동을 위해 25개의 에이전트가 있는 샌드박스(sandbox)에서 평가되었으며, 메모리 스트림(memory stream)의 관련성(relevance), 최신성(recency), 중요성(importance)을 점수화한 다음 성찰(reflections)과 계획(plans)을 다시 작성했습니다. MemGPT는 프리프린트(preprint) 논문으로, 함수 호출(function calls)을 사용하여 인컨텍스트 메모리(in-context memory)와 외부 저장소(external storage) 사이에서 정보를 페이징(paged)합니다. A-MEM은 프리프린트 논문으로, 구조화된 노트(structured notes)를 생성하고 메모리를 연결하며, 새로운 메모리가 기존 메모리를 업데이트할 수 있도록 하여 수정을 일급 연산(first-class operation)으로 처리합니다. Mem0는 벤더(vendor)가 작성한 프리프린트로, LLM-as-judge 점수 방식을 사용한 LoCoMo 벤치마크에서 OpenAI의 메모리 시스템 대비 26%의 상대적 품질 향상을 보고했으며, 전체 컨텍스트(full-context) 베이스라인 대비 p95 지연 시간(latency)은 91% 낮고 토큰(token)은 90% 이상 절감했다고 보고했습니다. 이는 특정 모델들에 대해 저자가 보고한 수치이며 실제 운영 환경에서의 보증은 아니지만, 방향성은 명확합니다. 즉, 작고 정제된(curated) 메모리가 비용 측면에서 전체 컨텍스트 베이스라인을 압도한다는 것입니다. LangChain, OpenAI Agents SDK, OpenAI 및 Anthropic의 압축(compaction), 그리고 Letta는 모두 서로 다른 용어를 사용하지만 아카이브(archive)와 워킹 셋(working-set)을 분리하는 동일한 방식을 인코딩하고 있습니다.
이 과정의 대부분을 건너뛰어야 할 때
첫날부터 메모리 플랫폼을 구축하지 마세요. 짧고 제한된 작업의 경우, 전체적인 영구 메모리 스택 (persistent-memory stack)을 구축하는 것보다 더 큰 컨텍스트 윈도우 (context window)와 압축 (compaction)을 사용하거나, 아예 영구적인 메모리를 사용하지 않는 것이 더 간단하고 안전한 경우가 많습니다. 이는 긴 컨텍스트 (long context)가 점점 더 잘 작동한다는 RULER의 증거, Anthropic의 최소한의 고신호 컨텍스트 (smallest-high-signal-context) 가이드라인, 그리고 별도의 시스템 없이 히스토리를 줄이는 문서화된 압축 (documented compaction)에 의해 뒷받침되는 엔지니어링적 판단입니다. 영구 저장 (Persistence)은 범위가 제한된 세션 (scoped session)에서는 발생하지 않는 출처 (provenance), 삭제 및 오염 (poisoning)에 대한 의무를 생성합니다. 보존 범위가 지정된 원시 로그 (raw log)와 최근 턴 윈도우 (recent-turn window)로 시작하세요. 반복적으로 관찰되는 실패가 각 유형의 필요성을 정당화할 때만 유형화된 메모리 (typed memories)를 추가하세요. 사용자에게 시스템이 자신에 대해 알고 있다고 믿는 내용을 검사, 수정 및 삭제할 수 있는 방법을 제공하십시오.
최고의 메모리 시스템은 가장 많이 기억하는 시스템이 아닙니다. 적절한 순간에 작업대 위에 적절한 기록을 올려놓고, 그것이 어디에서 왔는지 가리킬 수 있으며, 언제 언급을 멈춰야 할지를 아는 시스템입니다. 더 큰 창고는 공간을 확보해 줄 뿐입니다. 결국 중요한 역할은 사서 (librarian)입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기
