클로드, 이제 의미 없는 채팅 기록은 외우지 마세요
AI 코딩 에이전트에게 과거 대화 내역을 검색하고 기억하게 만드는 기능은 오히려 성능을 저하시킬 수 있습니다. 코드 변경 이력과 문서 등 이미 잘 정리된 메타데이터(결과물)를 활용하는 것이 불필요한 컨텍스트(낙서장)를 반복해서 읽어들이는 것보다 훨씬 효율적이기 때문입니다. 개발자들은 에이전트가 검증되지 않은 과거 대화를 맹목적으로 '사실'로 받아들여 발생하는 오류를 방지하기 위해, 체계적인 산출물 관리에 집중해야 합니다.
에이전트 관점: 대화 세션 기록을 memorizing하는 것은 쓸모가 없다. 낙서장(Scratch)이 아닌 결과물(Artifacts)을 추적하라.
대체 제목: 클로드, 제발 똑같은 의미 없는 쓰레기 정보들을 memorize하려고 멈춰줘. - theahura, 2026년 7월 2일
다른 형태의 컨텍스트에 접근할 수 있는 경우, 에이전트에게 이전 세션 대화 기록을 검색할 수 있는 권한을 주더라도 소프트웨어 엔지니어링(SWE) 작업에서 성능 향상은 전혀 없었습니다. 또한 인간(사람)이 피드백 루프에 개입하지 않는 이상, 에이전트의 컨텍스트 개선을 위해 세션 기록을 자동으로 뒤지는 것도 큰 이점을 찾지 못했습니다.
이는 꽤 놀라운 사실이었습니다. 직관적으로 생각하면 에이전트와 엔지니어 간의 대화 기록에는 가치 있는 정보가 아주 많이 들어있는 것 같습니다. 왜 그 코드가 존재하는지, 사용자의 의도가 무엇인지에 대한 정보가 있을 수 있습니다. 아니면 사용자가 시도했다가 폐기했던 다른 접근 방식들이 기록되어 있을 수도 있습니다. 적어도 에이전트가 자신의 이해도를 높이는 데 사용할 수 있는 약간의 추가적인 컨텍스트는 분명히 있을 것입니다. 저는 이 생각을 굳게 믿었기 때문에, 우리 회사는 이 개념을 중심으로 전체 제품을 구축하기도 했습니다. 과거에 저는 사람들에게 '세션 대화 기록이 새로운 석유'이며, 코드 자체보다 더 가치 있다고 말하곤 했습니다. 다른 사람들도 분명 비슷한 생각을 했을 것이며, 그것이 Claude Code 자체를 포함하여 세션 기반 메모리를 수행하는 다양한 도구들이 존재하는 이유입니다.
가장 일반적인 아키텍처는 다음과 같은 방식일 것입니다:
- 조직 전체의 모든 대화 기록을 데이터베이스(DB)에 저장합니다.
- 그 앞에 벡터 검색, 엘라스틱 검색(Elasticsearch) 또는 SQL 검색 레이어를 둡니다. 야심 찬 팀은 이 세 가지를 모두 사용하거나 그래프(Graph)를 활용할 것입니다.
- MCP를 사용하거나 기능(skills)이 있는 CLI를 노출하여 에이전트가 이 기록에 접근할 수 있도록 만듭니다.
하지만 우리에게 이러한 추가적인 작업은 전혀 차이를 만들어내지 못하는 것으로 보입니다. 오히려 세션 검색 접근 권한의 유무에 따른 수개월간의 테스트 결과, 이것이 모델의 성능을 더 저하시킬 수도 있습니다.
왜 이런 결과가 나온 걸까요? 우리 팀이 정말 중요하게 생각하는 것 중 하나는 '코딩 결과물(Artifacts)'입니다. 우리는 더 이상 코드를 직접 손으로 작성하지 않습니다. PR(풀 리퀘스트)을 알아보기 쉽게 만들기 위해, 우리는 좋은 커밋 메시지, 좋은 PR 메시지, 그리고 포괄적인 문서화를 강조합니다. 모든 코드 변경에는 코드와 함께 커밋되는 광범위한 메타데이터가 따릅니다. 에이전트가 특정 코드 작업을 수행할 때, 우리는 문서와 이전 PR을 확인하도록 지시합니다. 다시 말해, 에이전트는 이미 대화 기록에 담긴 모든 가치 있는 정보를 추출하여, 필요하고 쉽게 접근할 수 있는 곳에 저장해 둔 상태라는 것입니다.
따라서 에이전트가 세션 검색 서버를 사용할 때, 결국 에이전트는 이미 알고 있는 내용을 읽는 데 토큰을 소비하게 됩니다. 그와 동시에 애초에 에이전트가 기록하지 않기로 결정했던 불필요한 내용들까지 모조리 수집하게 됩니다. 어쩌다 한 번쯤은 그 속에 유용한 정보가 있을 수도 있습니다. 하지만 대부분의 경우, 에이전트는 의사결정에 도움이 되지 않는 낙서장 같은 기록들을 들여다보며 귀중한 토큰을 낭비할 뿐입니다.
에이전트는 사실상 컨텍스트를 삭제하는 데 매우 서툴며, 이는 장기 기억을 유지하는 데 있어 매우 중요한 능력입니다. 수천 번의 세션을 통틀어 그런 일이 단 한 번도 발생하는 것을 본 적이 없습니다. 이것은 단순한 프롬프트 엔지니어링만으로 해결할 수 있는 문제가 아닙니다. 에이전트는 상태(state)를 가지고 있지 않기 때문에, 입력 컨텍스트 창에 있는 모든 것을 '진실(ground truth)'로 간주해야만 합니다. 코드의 모든 줄, 기존의 모든 메모리, 모든 토큰은 의도된 결과로 취급됩니다. 설령 그 코드나 메모리가 이전 에이전트 세션에 의한 무작위 결정에서 생성된 것이고 인간이 검토하거나 이해하지 못한 것이라 할지라도 말입니다.
이러한 의도의 왜곡은 에이전트가 자율적으로 메모리 기반을 구축하려고 할수록 더욱 복합적으로 누적됩니다. 제가 아는 한, 입력 데이터가 오염되었다고 가정하는 코딩 벤치마크는 단 하나도 없습니다. 사실, 입력 데이터가 잘못되었다고 가정하면 모델에 페널티가 부여됩니다. 이것은 부분적으로는 정렬(alignment) 문제이기도 합니다. 우리는 에이전트가 의도하지 않은 일을 하는 것을 원하지 않으며, "(과거 정보 중) 불필요한 데이터를 삭제하지 말고 무시하는 것" 사이에서 균형을 잡는 쉬운 방법은 없습니다.