AI 코딩 에이전트가 왜 같은 교훈을 계속 다시 배우는지 — 그리고 그것이 매일 에이전트를 운영하는 팀에 어떤 비용을 초래하는지
요약
AI 코딩 에이전트가 세션 종료 후 학습 내용을 유지하지 못해 발생하는 '건망증세 세금(amnesia tax)' 문제를 다룹니다. 에이전트 간 지식 공유가 불가능하여 발생하는 토큰 낭비와 중복 작업의 비용을 분석합니다.
핵심 포인트
- 에이전트는 세션이 종료되면 이전의 추론 결과와 학습 내용을 모두 잊어버림
- 팀원 간 지식 공유 부재로 인해 동일한 시행착오를 반복하며 토큰 비용 발생
- 에이전트가 학습한 내용을 저장하고 공유할 수 있는 내구성 있는 저장소 필요
- 중복된 컨텍스트 처리는 토큰 사용량 증가와 운영 효율 저하를 초래함
AI 코딩 에이전트가 왜 같은 교훈을 계속 다시 배우는지 — 그리고 그것이 매일 에이전트를 운영하는 팀에 어떤 비용을 초래하는지
Claude Code나 Cursor를 팀 단위로 사용하는 사람이라면 누구나 이런 상황을 목격했을 것입니다: 한 엔지니어의 에이전트가 어제 다른 엔지니어의 에이전트가 이미 완벽하게 해결했던 내용을 10분 동안 다시 유도해내고 있는 모습 말입니다. 에이전트가 다시 읽어올 수 있는 답변이 저장될 공간이 없었기 때문입니다. 이것이 실제로 어떤 비용을 초래하는지, 그리고 우리가 이를 해결하기 위해 무엇을 만들었는지 설명하겠습니다.
1. 문제점: 에이전트는 잊어버리고, 팀은 그 대가를 치른다
AI 코딩 에이전트 — Claude Code, Cursor, 그리고 Model Context Protocol (MCP)를 기반으로 구축된 모든 것들 — 는 세션(session) 내에서는 진정으로 뛰어난 성능을 보여줍니다. 이들은 코드베이스를 읽고, 많은 양의 정보를 컨텍스트(context)에 유지하며, 대부분의 인간보다 더 빠르게 까다로운 버그를 추론할 수 있습니다.
하지만 세션이 종료되면 그 모든 것이 버려집니다. 다음 세션이 내일 아침 동일한 엔지니어이든, 한 시간 뒤의 팀원이든, 모두 백지 상태에서 시작합니다:
- 팀이 이미 재시도 백오프(retry backoff)를 지수적(exponential) 방식으로 전환하려고 시도했다가 운영 환경에서 썬더링 허드(thundering herd) 문제를 일으켰다는 사실을 알지 못합니다.
- 결제 서비스가 회계 팀의 요구 사항 때문에 부동 소수점 통화 계산(floating-point currency math)에 관한 린트(lint) 규칙을 의도적으로 위반하고 있다는 사실을 알지 못합니다.
- "그냥 Node 버전을 올리세요"라는 시도가 3주 전에 있었고, 그로 인해 Lambda 콜드 스타트(cold-start) 예산을 초과했다는 사실을 알지 못합니다.
그래서 에이전트는 이 모든 것을 다시 유도합니다. 때로는 단순히 더 느리게, 즉 팀이 이미 알고 있는 것을 재발견하기 위해 토큰(tokens)과 시간을 낭비하며 제대로 도달하기도 합니다. 때로는 잘못된 방향으로 도달하여, 아무도 알려주지 않은 이유로 이미 시도되었다가 되돌려진 수정 사항을 다시 도입하기도 합니다.
이러한 상황을 모든 엔지니어의 에이전트, 모든 세션, 매일 발생하는 일로 곱해본다면, 단일 항목으로 나타나지는 않지만 실제로 지속적으로 발생하는 비용을 얻게 됩니다 — 우리는 이것을 건망증세 세금(amnesia tax)이라고 부릅니다.
여기서 병목 현상은 모델이 아닙니다. 문제는 에이전트가 학습한 내용을 저장할 수 있는 내구성이 있고 공유 가능한 장소가 없다는 점입니다. 한 엔지니어의 홈 디렉토리에 있는 스크래치 파일(scratch file)은 팀원의 컴퓨터에 도달하지 못합니다. Claude Code의 채팅 기록은 Cursor 세션에 전달되지 않습니다. 코드 주석은, 설령 존재하더라도, 코드가 무엇을 하는지는 설명하지만 — 왜 그런 방식으로 작성되었는지, 그리고 팀이 이미 시도했다가 제외한 것이 무엇인지는 거의 설명하지 않으며, 결코 설명하지 않습니다.
2. 건망증세 세금(amnesia tax)의 수치화
우리는 "팀이 AI 지출의 34%를 중복된 컨텍스트에 낭비한다"와 같이 지어낸 산업 통계를 제시하지 않을 것입니다. 아무도 그런 수치를 가지고 있지 않으며, 이를 인용하는 사람은 모두 지어낸 것입니다. 여러분이 직접 추론할 수 있는 것은 비용이 실제로 어디에서 발생하는가 하는 점입니다:
- 토큰 (Tokens): 무언가를 처음부터 다시 도출한다는 것은 에이전트가 관련 파일을 다시 읽고 다시 추론해야 함을 의미합니다. 이는 에이전트가 여는 모든 파일에 대한 입력 토큰(input tokens)과 추론 과정(reasoning trace)에 대한 출력 토큰(output tokens)을 발생시킵니다. 이미 기록된 답변을 불러오는 것은 짧은 쿼리(query) 하나면 충분합니다. 발생할 때마다 이 두 방식 사이의 차이는 보통 한 자릿수(order of magnitude) 이상입니다.
- 시간 (Time): 토큰 비용은 청구서에서 눈으로 확인할 수 있는 부분입니다. 여러분이 체감하는 부분은, 에이전트가 사실상 지난주에 다른 사람의 컴퓨터에서 이미 탐색했던 코드베이스를 다시 탐색하는 동안 엔지니어가 그 자리에 앉아 기다려야 한다는 점입니다.
- 오답 (Wrong answers): 이것이 가장 비용이 많이 드는 부분입니다. 특정 수정 사항이 이미 시도되었다가 되돌려졌다는 사실을 모르는 에이전트는, 매우 자신만만하게 그 해결책을 다시 제안할 것이며, 컨텍스트 내의 그 어떤 것도 이를 반박하지 못할 것입니다.
3. 낭비가 실제로 발생하는 곳
동일한 리포지토리(repo)에서 몇 개의 에이전트 세션을 연속해서 살펴보면 패턴이 명확해집니다:
모든 세션의 초기 몇 분
새로운 세션의 초기 도구 호출(tool calls) 중 상당수는 에이전트가 이전 세션에서 이미 확립했던 것들 — 배포 대상(deploy target), 컨벤션(convention), 특정 코드 조각이 왜 이상해 보이는지 등 — 을 다시 확립하는 과정입니다. 이 중 어느 것도 새로운 작업이 아닙니다. 그것은 똑같은 숙제를 다시 하는 것과 같습니다.
Claude Code와 Cursor가 서로 소통하지 못하는 문제
당신과 팀원이 서로 다른 도구를 사용하고 있다면, 당신의 에이전트들은 서로에 대한 가시성(visibility)이 전혀 없는 상태에서 동일한 저장소(repo)를 작업하게 됩니다. 누군가는 Slack에 수동으로 내용을 작성하고, 상대방이 똑같은 문제에 부딪히기 전에 그 글을 읽기를 바라야 합니다. 하지만 대개 제때 읽히는 일은 일어나지 않습니다.
이유를 기억하는 단 한 사람
모든 팀에는 재시도 로직(retry logic)이 왜 이상하게 보이는지 알고 있는 엔지니어가 있습니다. 만약 그가 휴가(PTO) 중이거나 해당 대화 스레드가 위로 밀려 올라가 버린다면, 그 맥락(context)은 그가 돌아올 때까지 그대로 사라져 버립니다.
4. 인프라로서의 공유 메모리 (Shared memory)
이 문제들 중 그 어떤 것도 더 똑똑한 모델을 도입한다고 해서 해결되는 것이 아닙니다. 팀의 에이전트들이 배운 것을 기록할 수 있는 장소가 필요합니다. 기록하는 데 마찰(friction)이 없고, 답을 다시 도출하는 것보다 쿼리(querying)하는 것이 더 저렴할 만큼 작고 빠른 무언가가 필요합니다.
그것이 바로 threadctx입니다. threadctx는 AI 코딩 에이전트에게 지속 가능하고 팀이 공유할 수 있는 메모리를 제공하는 MCP 서버입니다. 에이전트가 보관할 가치가 있는 무언가 — 근본 원인(root cause), 컨벤션(convention), 혹은 특정 결정이 왜 그렇게 내려졌는지 등 — 를 알아내면, 해당 저장소(repo) 범위 내에 짧은 항목을 작성합니다. 어떤 도구를 사용하든, 어떤 팀원이든, 해당 저장소를 다음에 건드리는 에이전트는 아무것도 없는 상태에서 다시 구축하는 대신 단 한 번의 쿼리로 그 내용을 불러올 수 있습니다.
항목들은 의도적으로 작게 유지됩니다. 대화 기록을 통째로 쏟아붓는 것이 아니라 한두 문장 정도이며, 절대로 소스 코드를 담는 것이 아닙니다. 숙련된 시니어 엔지니어가 Slack 스레드에 남겨두는 메모리라고 생각하면 됩니다. 다만 차이점은 에이전트가 실수를 반복하기 전에 실제로 그 메모리를 읽는다는 것입니다.
5. 벤더 중립성(Vendor-agnostic)이 중요한 이유
대부분의 엔지니어링 팀은 더 이상 단 하나의 AI 코딩 도구만 사용하지 않습니다. 어떤 사람은 Claude Code를 사용하고, 어떤 사람은 Cursor를 사용하며, 다음 분기에 새로 채용될 사람은 아마 또 다른 도구를 가져올 것입니다. 만약 당신의 메모리 계층(memory layer)이 이 도구들 중 하나 내부에서만 작동한다면, 그것은 진정한 의미의 팀 메모리 계층이 아닙니다. 그저 UI가 조금 더 나은 개인의 메모장에 불과합니다.
threadctx는 Anthropic이 에이전트를 외부 도구 및 데이터와 연결하기 위해 도입한 개방형 표준인 Model Context Protocol (MCP) 위에서 작동하며, Cursor와 생태계의 나머지 대부분의 도구들도 이를 채택했습니다. 실제로 이는 여러분에게 세 가지 이점을 제공합니다:
- 모든 클라이언트에 단 한 번의 설치: 동일한 threadctx 설정이 현재 Claude Code와 Cursor에서 작동하며, 향후 여러분의 팀이 선택할 MCP 지원 도구에서도 동일하게 작동합니다.
- 마이그레이션할 필요가 없음: 로컬 모드는 무료이며 MIT 라이선스를 따르고, 메모리를 디스크 상의 일반 JSON 파일(
~/.threadctx/local.json)로 저장합니다. 원할 때 언제든 이를 읽거나, grep으로 검색하거나, 삭제할 수 있습니다. - 우리의 로드맵에 도박을 걸 필요가 없음: 만약 우리가 내일 사라지더라도, 프로토콜과 여러분의 로컬 메모리 파일은 여전히 여러분의 것입니다. 단일 벤더의 에디터에 부착된 메모리 기능에 대해서는 이렇게 말하기 어려울 것입니다.
6. 팀이 얻게 되는 것
구체적으로, 다음과 같은 변화가 일어납니다:
| 공유 메모리가 없을 때 | threadctx가 있을 때 |
|---|---|
| 모든 엔지니어의 에이전트가 동일한 컨텍스트를 다시 도출함 | 첫 번째 에이전트가 이를 접했을 때 한 번 기록하면, 모두가 이를 기억함 |
| ... |
주목할 만한 부분은, 누군가가 무언가를 파악하는 데 드는 비용을 정확히 단 한 번만 지불한다는 점입니다. 그 이후로는 레포지토리(repo)의 다른 모든 사람이 무기한으로 저렴하게 읽어올 수 있습니다. 5명 규모의 팀은 단순히 개인 개발자가 절약하는 것의 5배를 절약하는 것이 아닙니다. 인원이 추가될 때마다 동일한 문제에 부딪힐 수 있는 에이전트가 늘어나는데, 이제 그들은 그럴 필요가 없기 때문입니다.
7. 기기에서 전송되는 것과 전송되지 않는 것
당연한 질문은 이와 같은 도구가 실제로 여러분의 기기에서 무엇을 외부로 전송하느냐 하는 것입니다. 이에 대한 솔직한 답변은 다음과 같습니다:
- 소스 코드가 아닙니다. 엔트리(Entries)는 에이전트가 작성한 짧은 학습 내용이며, 파일 내용이나 디프(diffs), 코드베이스 자체가 아닙니다.
- 로컬 모드(Local mode)는 절대 외부로 정보를 전송하지 않습니다. 이 모드가 수행하는 유일한 네트워크 호출은 여러분의 LLM 제공업체가 이미 요구하는 사항뿐입니다. 메모리는 여러분의 기기에 있는 JSON 파일에 저장되며 그 외의 다른 곳에는 존재하지 않습니다.
- 클라우드 모드(Cloud mode)는 저장소(repo) 및 팀별로 범위가 제한됩니다. 쿼리 시 여러분의 팀이 해당 특정 저장소를 위해 작성한 엔트리만 반환되며, 오직 여러분의 API 키를 통해서만 접근 가능합니다.
8. 반론에 대한 직접적인 답변
“이것은 단순히 추가 단계가 붙은 벡터 데이터베이스 (vector database) 아닌가요?”
벡터 데이터베이스가 배관(plumbing)의 일부라는 점은 확실합니다. 하지만 여러분이 실제로 얻는 것은 에이전트들이 이미 사용 중인 MCP 배선, 저장소별 범위 지정(per-repo scoping), Claude Code와 Cursor를 가로질러 여러분을 따라다니는 정체성(identity), 그리고 팀 빌링 모델입니다. 이는 '일부 임베딩(embeddings)을 저장하는 것'을 팀이 단 한 번의 명령으로 특정 저장소를 가리킬 수 있는 무언가로 바꾸어 놓는 요소들입니다.
“시간이 지나면 쓰레기 데이터로 가득 차지 않을까요?”
엔트리는 에이전트가 실제로 무언가를 학습했을 때만 작성되며, 매우 짧습니다. 세션 기록(session transcript)이 아니라 한두 문장 정도입니다. 검색(Recall)은 현재 작업에 필요한 범위로 제한되므로, 오래되고 관련 없는 엔트리가 단지 존재한다는 이유만으로 컨텍스트(context)에 끌려 들어오지 않습니다.
“시스템이 너무 커지거나, 그냥 나가고 싶어지면 어떻게 하나요?”
로컬 모드는 MIT 라이선스입니다. 포크(Fork)하거나, 셀프 호스팅(self-host)하거나, JSON 파일을 직접 열어서 직접 읽으셔도 됩니다. 저희는 여러분을 가두기 위한 독점적인 포맷을 발명하지 않았으므로, 마이그레이션(migrate)해야 할 대상도 없습니다.
9. 시작하기
개인용 및 로컬 메모리는 무료이며 오픈 소스이고, 가입 없이 단 한 번의 명령으로 설치할 수 있습니다.
npx threadctx-mcp
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기