문서가 메모리로 작동하지 않는 이유
문서는 "이것이 무엇인가"에 답하고, 메모리는 "무엇을 해야 하는가"에 답합니다
거의 모든 내부 문서는 서술형입니다. 시스템을 설명하고, 디자인을 훑어보고, 고려된 옵션들을 나열합니다. 이는 팀에 새로 합류한 사람에게는 적합한 톤앤매너입니다. 사람은 주변 문맥을 읽고 규칙을 유추할 수 있기 때문입니다.
하지만 에이전트에게는 명시된 규칙이 필요합니다. 12페이지짜리 디자인 문서에서 가장 가치 있는 문장은 종종 "업스트림에서 타임아웃 시 중복이 발생하므로 재시도 로직은 반드시 멱등성을 보장해야 한다"와 같은 단 한 줄이며, 이는 대개 다른 주제의 섹션 중간에 묻혀 있습니다. 검색(Retrieval)을 통해 해당 페이지를 찾아낼 수는 있겠지만, 그 특정 줄을 반드시 찾아낸다는 보장은 없습니다. 설령 찾아낸다 하더라도, 모델은 그 단락이 현재의 제약 조건인지 아니면 과거에 고려했던 사항인지 추측해야 합니다.
검색은 단락을 제공하며, 단락은 모호함을 남깁니다
잘 튜닝된 검색 설정이라도 문서화된 한계가 존재합니다. OpenAI가 인덱싱된 지식 소스에 대해 설명한 바에 따르면, 이들은 "처음부터 Q&A 및 검색 관련 쿼리에 가장 잘 작동하도록 설계"되었으며, "쿼리 의도에 따라 가장 관련성 높은 데이터가 모델로 전송되므로, 수많은 소스의 집계가 필요하거나 매우 복잡한 쿼리가 필요한 시나리오에서는 성능이 제한"됩니다.
이것이 바로 문서 검색의 본질에 대한 정직한 설명입니다. "X에 대해 우리는 무엇을 결정했는가?"라는 질문은 대개 회의록, 문서 수정 이력, PR 댓글 등에 흩어져 있는 집계형 질문입니다. 검색은 문서를 찾아줄 뿐, 결론을 도출해주지는 않습니다. 이 차이가 바로 RAG가 메모리가 아닌 이유에서 다루는 핵심 주제입니다.
문서의 그 어떤 것도 그것이 여전히 유효한지 알려주지 않습니다
페이지에는 마지막 수정 타임스탬프가 있어 누군가 언제 손을 댔는지는 알려주지만, 그 안의 내용이 여전히 유효한지는 알려주지 않습니다. 문서는 주장 단위로 서서히 낡아갑니다. 세 단락은 올바르게 유지되더라도, 한 단락은 마이그레이션 이후 소리 소문 없이 사실이 아니게 되며, 아무도 페이지 전체를 다시 읽지 않기 때문에 수정조차 이루어지지 않습니다.
사람에게는 이것이 감당할 만한 수준입니다. 오래된 문서의 뉘앙스를 눈치챌 수 있기 때문입니다. 하지만 에이전트에게는 현재의 사실과 구별할 수 없는 정보이며, 에이전트는 이를 바탕으로 행동합니다. 이것이 바로 문서보다 메모리에서 출처(provenance)가 더 중요한 이유이며, 이 점은 메모리 출처 설명 가이드에서 자세히 다루고 있습니다.
그리고 문서를 컨텍스트에 로드하는 것으로는 해결할 수 없습니다
가장 뻔한 해결책인 '항상 켜져 있는 지침 파일에 문서를 넣는 것'은 모든 벤더의 공식 가이드와 충돌합니다. Claude Code는 CLAUDE.md 파일당 200줄 미만을 유지할 것을 권장하며, 파일이 길어질수록 "더 많은 컨텍스트를 소비하고 지침 준수율을 떨어뜨린다"고 지적합니다. Cursor는 규칙을 500줄 미만으로 유지할 것을 권장합니다. 또한 Claude Code는 콘텐츠를 @path 임포트로 분할하는 것이 "정리에는 도움이 되지만, 임포트된 파일이 시작 시 로드되므로 컨텍스트를 줄여주지는 않는다"고 명시하고 있습니다. 즉, 임포트 편법으로는 공간을 확보할 수 없습니다.
크기 외에도 두 번째 비용이 존재합니다. Claude Code 문서에 따르면 "두 규칙이 서로 충돌할 경우, Claude는 임의로 하나를 선택할 수 있다"고 경고합니다. 서로 다른 시점에 작성된 5개의 문서를 하나의 컨텍스트에 밀어 넣는 것은 모순을 만들어내는 가장 확실한 방법입니다.
흔히 시도하는 방법들
에이전트에게 문서 폴더를 가리키게 하기. 답이 하나의 파일에 있고 그 파일이 무엇인지 알고 있을 때는 작동합니다. 하지만 여러분이 가장 중요하게 생각하는 질문들에는 실패합니다. 그러한 답들은 여러 파일에 흩어져 있거나 애초에 기록된 적이 없기 때문입니다.
하나의 거대한 `CONTEXT.md`. 가장 흔히 하는 시도입니다. 파일이 800줄까지 늘어나고, 모든 요청마다 로드되며, 서너 개의 모순을 포함하게 됩니다. 결국 중요한 규칙에 대한 준수율은 참고 자료들과 경쟁하느라 떨어지게 됩니다.
모든 것을 벡터 스토어에 인덱싱하기. 소스 자료를 찾는 데는 유용하지만 결론을 대체할 수는 없습니다. 디자인 문서는 찾아내겠지만, 그 디자인이 폐기되었다는 사실은 여전히 알 수 없습니다.
에이전트에게 문서를 요약해 달라고 요청하기. 솔깃한 방법이지만, 결과물은 현재와 과거, 결정된 사항과 고려된 사항, 규칙과 예시 등 반드시 구분해야 할 경계들을 뭉뚱그린 그럴싸한 요약에 불과합니다.
문서를 어시스턴트의 메모리에 복사하기. 방향은 더 낫지만, 단위(granularity)가 잘못되었습니다. 붙여넣은 페이지는 하나의 거대한 메모리 항목이 되어 모든 상황에서 검색되지만 정작 아무런 도움도 되지 않습니다.
아무것도 하지 않고 매번 다시 설명하기. 현재의 상태(status quo)이며, 과소평가하기 쉬운 비용을 치르게 됩니다. 모든 메시지마다 토큰과 집중력이라는 비용을 영원히 지불해야 합니다. 이것이 바로 AI에게 컨텍스트를 다시 설명하는 습관을 멈추는 방법에서 다루는 문제입니다.
해결책: 문서가 아닌 주장(Claim)을 추출하세요
이 전환은 단순한 임포트 작업이 아닙니다. 특정 출력 형식을 가진 읽기 작업입니다. 즉, 항목당 하나의 주장을 지침이나 사실로 기술하고, 그 이유를 첨부하는 것입니다. 핵심 문서에 대해 이 작업을 한 번만 수행하면, 나머지는 협업 과정에서 자연스럽게 축적됩니다.
실제 작업에 들어가기 전에 분류를 진행합니다. 문서의 모든 내용을 다음 네 가지 더미로 분류하세요:
메모리로 승격. 결정 사항과 그 이유. 외부에서는 임의적인 것처럼 보이는 제약 조건. 도구의 기본값과 다른 컨벤션. 고생하며 배운 함정(Gotchas). 기각된 사항들 — 시도했다가 포기한 것과 그 이유. 이들은 짧고 지속적이며, 에이전트가 코드베이스에서 스스로 유추할 수 없는 정확한 정보들입니다.
문서로 남겨두고 참조. 긴 절차, 참조 테이블, API 사양 설명 등 단계가 여러 개인 모든 것. 이들은 파일에 보관해야 합니다. 사용하는 도구가 온디맨드 패키지(대부분의 최신 도구에서는 '스킬')를 지원한다면 그곳이 적합한 위치입니다. 그래야 항상 로드되는 대신 필요할 때만 로드됩니다.
삭제. 더 이상 운영하지 않는 시스템을 설명하는 모든 것. 대부분의 문서 폴더 중 3분의 1이 이에 해당하며, 가장 위험한 부분이기도 합니다. 권위 있는 문서처럼 읽히기 때문입니다.
사람에게 질문. 이 작업을 하면서 발견하게 될 공백들, 즉 아무도 기록하지 않은 결정 사항들입니다. 발견한 즉시 지금 기록해 두세요.
분류가 끝나면 다음 세 단계를 진행합니다.
1단계: API 키 생성
MemoryLake에 로그인하고 API 키를 생성합니다. 에이전트가 메모리를 읽고 쓰는 데 사용하는 이 단 하나의 자격 증명은 어떤 어시스턴트를 사용하든 독립적으로 작동하므로, 도구를 변경하더라도 이 전환 작업의 결과물은 그대로 유지됩니다.

2단계: 첫 번째 메모리 업로드
승격 더미를 살펴보며 각 항목을 독립된 항목으로 작성합니다. 다음 네 가지 규칙이 메모리 레이어와 단순한 두 번째 문서 폴더의 차이를 만듭니다:

항목당 하나의 주장만. 두 가지 아이디어가 있다면 분리하세요. 하나의 아이디어만 가진 항목이 정확하게 검색되고 명확하게 관리됩니다.
규칙을 먼저 말하고, 그 다음 이유를 밝히세요. "재시도는 반드시 멱등성을 보장해야 함 — 업스트림에서 타임아웃 시 중복 발생." 이 이유는 사람이나 모델이 규칙이 처음으로 불편하게 느껴질 때 이를 임의로 무시하는 것을 방지해 줍니다.
검증 가능하게 만드세요. "API 핸들러는 src/api/handlers/에 위치함"이 "코드를 깔끔하게 정리해 두세요"보다 훨씬 낫습니다. 모델은 전자에만 기반하여 행동할 수 있습니다.
기각된 사항을 명시적으로 기록하세요. "검토 및 기각됨: 큐 기반 정렬, 2026년 3월 — 재시도 시 정렬 보장이 깨짐." 이것이 없다면, 새로 투입된 모든 에이전트가 열정적으로 이를 다시 제안할 것이고, 여러분은 처음부터 다시 설명해야 할 것입니다.
전환 비율에 놀라실 수도 있습니다. 보통 12페이지짜리 아키텍처 문서에서는 6개에서 10개 정도의 항목이 나옵니다. 이는 정보의 손실이 아닙니다. 나머지 11페이지는 모델에게 필요 없는 설명이거나 더 이상 유효하지 않은 과거의 역사일 뿐입니다.
3단계: AI 및 에이전트 연결
도구를 연결하세요. MemoryLake는 MCP 및 API를 통해 접근할 수 있으므로, Claude Code, Codex, OpenClaw를 포함한 MCP 네이티브 에이전트들은 MCP 서버를 가리켜 연결하고, 다른 어시스턴트들은 API를 통해 동일한 메모리를 읽을 수 있습니다. 지침 파일은 짧게 유지되어 본연의 좁은 역할만 수행하며, 추출된 주장들은 쿼리 가능해지므로 에이전트는 12페이지의 문서나 아무것도 없는 상태 대신 관련된 4개의 항목만 정확히 받아보게 됩니다.

두 가지 솔직한 한계가 있습니다. 이 작업이 문서를 대신 읽어주지는 않습니다. 추출은 어떤 주장이 여전히 유효한지 아는 사람이 수행해야 하는 판단의 영역입니다. 또한 이는 강제 레이어가 아닙니다. 모델의 결정과 상관없이 반드시 지켜져야 하는 규칙은 메모리가 아니라 훅(hook)이나 CI 검사에 두어야 합니다.
실제 변화하는 점들
질문에 대해 출처 대신 답을 얻게 됩니다. "원장 스키마에 대해 무엇을 결정했지?"라고 물으면 스키마를 언급하는 세 개의 문서가 아니라 결정 사항 자체를 반환합니다.
오래된 지식이 눈에 보이게 됩니다. 날짜가 적힌 짧은 주장 목록은 검토하기 쉽습니다. 하지만 문서 폴더는 그렇지 않습니다. 9번째 단락을 확인하기 위해 12페이지짜리 문서를 다시 읽는 사람은 아무도 없기 때문입니다.
요청당 토큰 비용이 감소합니다. 지침 파일이 줄어들고, 복사해서 붙여넣던 컨텍스트가 사라지며, 검색은 수천 개의 토큰 대신 수백 개의 토큰만 전송합니다. 구체적인 계산법은 메모리가 토큰 비용을 줄이는 방법에서 확인할 수 있습니다.
문서가 문서 본연의 역할에 더 충실해집니다. 주장이 다른 곳에 보관되면, 문서는 규칙 세트인 척할 필요 없이 서사적이고 철저하게 작성될 수 있습니다. 두 결과물 모두 서로 경쟁하지 않음으로써 품질이 향상됩니다.
새로운 에이전트가 이미 정보를 파악한 상태로 시작합니다. 이 작업의 핵심입니다. 다음에 어떤 도구를 도입하든, 시행착오를 겪으며 프로젝트를 다시 배우는 대신 첫날부터 추출된 주장들을 읽고 시작하게 됩니다.
모범 사례: 이번 주에 바로 실행할 수 있는 전환 레시피
사람들이 가장 많이 인용하는 3개의 문서부터 시작하세요. 가장 큰 문서가 아니라, 신규 팀원이 질문할 때 누군가 Slack에 링크를 공유하는 바로 그 문서들입니다. 그 문서들에 가장 밀도 높은 핵심 주장들이 담겨 있습니다.
다 읽고 나서가 아니라, 읽으면서 추출하세요. 메모장을 열어두고 주장을 발견하는 즉시 항목을 작성하세요. 문서를 다 읽은 후에 요약하려고 하면 뭉뚱그려지고 모호함이 남는 텍스트가 만들어집니다.
모호한 표현은 결정 사항으로 바꾸거나 삭제하세요. "현재 우리는 X 방향으로 기울고 있습니다"는 메모리 항목이 아닙니다. 결정 사항이라면 결정 사항으로 작성하고, 그렇지 않고 단순한 역사라면 문서에 남겨두세요.
시간에 민감한 내용에는 날짜를 적어두세요. 주장이 특정 벤더의 현재 동작이나 버전에 의존한다면 항목에 이를 명시하세요. 6개월 뒤에 함정이 될지 사실이 될지를 가르는 차이입니다.
항상 켜져 있는 레이어의 크기를 의도적으로 제한하세요. 지침 파일에 유지하는 내용은 한 화면에서 읽을 수 있을 정도로 짧아야 합니다. 그 외의 모든 것은 검색 가능해야 합니다. 벤더들의 가이드가 이 방향으로 수렴하는 데는 다 이유가 있습니다.
문서뿐만 아니라 추출된 내용도 버전 관리하세요. 추출된 주장들을 diff나 변경 로그처럼 검토 가능한 형태로 유지하는 것이 드리프트(drift)를 방지하는 방법입니다. 이것이 바로 AI 메모리를 위한 git의 기본 개념입니다.
에이전트를 두 번 교정할 때마다 항목을 하나씩 추가하세요. 가장 훌륭한 유지보수 습관입니다. 반복되는 교정은 누락된 메모리 항목이 존재함을 알리는 신호입니다.
결론
문서화가 잘된 프로젝트가 에이전트에게 여전히 문서화되지 않은 것처럼 느껴지는 이유는 문서와 메모리가 서로 다른 독자를 위한 서로 다른 형식이기 때문입니다. 문서는 설명하고, 메모리는 지시합니다. 문서는 모호함을 허용하지만, 메모리는 결정 사항을 필요로 합니다. 문서는 설계상 길게 작성되지만, 에이전트가 매 요청마다 로드하는 레이어는 필연적으로 짧아야 합니다.
따라서 이 전환은 임포트가 아닌 추출입니다. 실제로 인용하는 문서를 읽고, 여전히 유효한 주장을 뽑아내고, 이유를 첨부하고, 기각된 사항을 기록하고, 더 이상 운영하지 않는 시스템을 설명하는 3분의 1의 문서를 삭제하세요. 대부분의 프로젝트에서 반나절이면 충분한 작업입니다. 그 대가로 얻게 되는 것은 이미 가지고 있다고 생각했던 것, 즉 사람이나 에이전트 등 작업을 수행하는 주체라면 누구나 활용할 수 있는 프로젝트 지식입니다. 개념적 기반을 먼저 다지고 싶다면, 영구 메모리의 실제 정의에서 이 차이를 더 깊이 있게 다루고 있습니다.