세션 경계라는 구조적 한계
대화형 LLM은 요청이 들어올 때마다 프롬프트에 담긴 내용만 근거로 응답을 생성한다. 이전 세션에서 어떤 판단을 내렸는지, 어떤 오류를 어떻게 해결했는지는 프롬프트에 다시 포함되지 않는 한 모델 입장에서는 존재하지 않는 정보다. 채팅 UI에서는 이 문제가 단일 스레드 안에서 대화 기록을 계속 이어붙이는 방식으로 가려진다. 그러나 코딩 에이전트, 자동화 워크플로, 장기간 운영되는 업무 보조 에이전트처럼 세션이 반복적으로 새로 시작되는 환경에서는 이 한계가 곧바로 실무 비용으로 드러난다. 어제 디버깅한 에러의 원인을 오늘 다시 처음부터 추적하고, 지난주에 합의한 아키텍처 결정을 이번 주에 다시 설명해야 하는 상황이 반복된다.

컨텍스트 윈도우와 기억은 다르다
컨텍스트 윈도우가 커지면 이 문제가 자연히 해결될 것이라는 기대가 있지만, 두 개념은 성격이 다르다. 컨텍스트 윈도우는 한 번의 추론에서 모델이 동시에 참조할 수 있는 토큰의 상한이다. 반면 기억은 여러 세션에 걸쳐 선택적으로 유지되어야 하는 정보의 집합이다. 컨텍스트 윈도우가 아무리 넓어져도, 그 안에 어떤 과거 정보를 다시 채워 넣을지 결정하는 별도의 메커니즘이 없다면 에이전트는 매 세션 백지에서 시작한다. 게다가 토큰 수가 늘어날수록 추론 비용과 지연 시간이 증가하고, 관련 없는 정보가 프롬프트에 섞이면 모델이 핵심 맥락에 집중하는 능력도 떨어진다. 필요한 정보만 선별해 불러오는 회상 메커니즘이 컨텍스트 확장보다 근본적인 해법에 가까운 이유다.
세션 단절이 만드는 실무 비용
세션 단절의 비용은 세 가지 형태로 나타난다. 첫째는 반복 비용이다. 동일한 에러를 여러 번 처음부터 진단하거나, 이미 검토한 설계 대안을 다시 나열하는 데 시간이 소모된다. 둘째는 일관성 비용이다. 이전에 내린 결정과 모순되는 제안을 다시 하게 되면, 사용자는 에이전트의 판단을 신뢰하기 어려워진다. 셋째는 축적 비용이다. 프로젝트가 길어질수록 도메인 지식과 팀 관례가 쌓여야 하는데, 세션마다 초기화되는 에이전트는 이 축적 곡선에 올라타지 못한다. 이 세 비용은 프로젝트 규모가 커질수록, 그리고 에이전트가 자율적으로 여러 단계를 거쳐 작업할수록 커진다.
장기 기억이 해결하는 세 가지 문제
장기 기억 계층은 이 문제를 세션 사이의 상태를 외부 저장소로 옮기는 방식으로 접근한다. 먼저 저장 시점에는 세션 중 발생한 사실, 오류 원인, 아키텍처 결정, 절차를 독립적으로 이해 가능한 단위로 분리해 기록한다. 다음으로 회상 시점에는 현재 작업과 관련성이 높은 항목만 선택적으로 불러온다. 키워드 매칭만으로는 표현이 다른 과거 기록을 놓치기 쉬워서, 의미 기반 검색을 함께 사용하는 구조가 흔하다. 마지막으로 유지 관리 시점에는 오래되거나 더 이상 유효하지 않은 정보를 솎아낸다. 무분별하게 모든 것을 영구 보존하면 회상 결과의 정밀도가 떨어지고 저장 비용도 늘어나기 때문에, 중요도와 최신성을 함께 반영하는 감쇠 정책이 필요하다.
설계상 고려해야 할 트레이드오프
장기 기억을 도입한다고 해서 문제가 자동으로 사라지지는 않는다. 저장할 정보의 단위를 너무 크게 잡으면 회상 정밀도가 떨어지고, 너무 잘게 쪼개면 맥락이 파편화되어 여러 조각을 다시 조합해야 하는 부담이 생긴다. 회상 시점에 얼마나 많은 정보를 불러올지도 균형이 필요하다. 지나치게 적으면 필요한 맥락을 놓치고, 지나치게 많으면 다시 컨텍스트 윈도우 문제로 돌아간다. 또한 저장된 정보가 실제로 검증된 사실인지, 아직 검증되지 않은 추론인지 구분해 관리하지 않으면 잘못된 가정이 다음 세션까지 그대로 이어질 위험도 있다. 결국 장기 기억은 단순히 데이터를 쌓는 저장소가 아니라, 무엇을 남기고 무엇을 버릴지, 언제 다시 불러올지를 지속적으로 판단하는 별도의 설계 영역으로 다뤄야 한다.