한 줄 정의

질문할 때마다 원시 문서를 매번 새로 읽는 검색(RAG) 방식 대신, 지식을 사전에 구조화된 형태로 컴파일하여 저장하고 여기에 지속적으로 쿼리를 던지는 LLM 기억 관리 철학이다.

핵심 요지

  • 기존 RAG의 비효율 극복: 매 쿼리마다 원시 텍스트(예: 소스 코드, 문서 등)를 매번 새로 검색하고 분석하여 에이전트가 중복 작업을 수행하는 고비용-저효율 문제를 해결한다.
  • 구조화된 지식의 사전 컴파일: 문서를 일회성 텍스트로 보지 않고, 단 한 번 컴파일하여 구조(예: 코드 그래프, SQLite 테이블)로 저장한 뒤 에이전트가 이 구조화된 저장소에 쿼리를 날리도록 유도한다.
  • 코드 영역으로의 확장: 이 방식은 일반 문서 요약뿐만 아니라 코드베이스 분석에도 동일하게 적용되어, 단순 키워드 검색(grep)이 잡아내지 못하는 다중 간접 의존성을 정밀하게 포착한다.
  • 로컬 우선(Local-first) 아키텍처: 외부 API 비용 없이 SQLite와 tree-sitter 파서를 활용하여 네트워크 노출 없이 로컬 환경에서 지식 축적이 이루어진다.

상세

안드레이 카파시(Andrej Karpathy)는 LLM이 지식을 획득하고 활용하는 방식을 검색(RAG), LLM Wiki, 그리고 지식을 축적하여 컴파일한 형태(Gbrain)로 구분하며, 매번 문서를 새로 읽는 검색 방식의 한계를 지적했다.

코드 도메인에서 단순 키워드 검색(grep)은 코드를 단순 텍스트로 다루기 때문에 다단계 의존성이 있는 간접 호출 관계를 추적하지 못한다. 반면, 카파시의 지식 컴파일 아이디어를 코드 도메인으로 이식한 ‘코드 그래프’ 도구들은 다음과 같은 파이프라인을 구축하여 이 문제를 해결한다:

  1. tree-sitter 기반 구문 분석: 들여쓰기나 단순 키워드가 아닌, 함수와 클래스의 경계를 정확히 파악하여 추상 구문 트리(AST)를 구성한다.
  2. SQLite 데이터베이스 저장: 심볼은 노드(node)로, 호출·임포트·상속 관계는 에지(edge)로 저장하여 구조를 보존한다.
  3. Model Context Protocol (MCP) 연동: 구축된 데이터베이스를 MCP 서버로 작동시켜 코딩 에이전트가 매 세션마다 파일 전체를 읽을 필요 없이 그래프에 직접 쿼리를 날릴 수 있게 돕는다.

이 컴파일 방식을 통해 에이전트는 파일 여러 개의 전체 텍스트를 읽어가며 추론하는 인지적 비용을 절감할 수 있으며, 두 파일이 동일한 어휘를 공유하지 않더라도 그래프의 연결성 덕분에 신뢰성 있는 의존성 분석을 유지할 수 있다.

예시

안드레이 카파시의 지식 컴파일 철학을 구현한 대표적인 두 가지 로컬 오픈소스 도구와 활용 시나리오는 다음과 같다.

1. Codegraph

codegraph는 코드베이스 파악에 특화되어 있으며, 8,000개가 넘는 대형 오픈소스 프로젝트 OmniRoute의 인덱스를 빌드하는 데 34초가 소요된다(raw/Andrej Karpathy’s Fix for LLM Memory Works on Code Too.md). 이 프로젝트의 디스크 용량은 325MB를 차지하며 이는 원래 리포지토리 크기인 233MB보다 조금 더 큰 수준이다(raw/Andrej Karpathy’s Fix for LLM Memory Works on Code Too.md).

  • 설치 및 초기화:
curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh
codegraph install
codegraph init
  • 활용 시나리오: 특정 함수 classifyRoute를 수정할 때, 직접 호출하는 함수뿐 아니라 여러 단계를 거쳐 간접적으로 연결된 파일(proxy.ts)을 아래의 쿼리로 정확히 잡아낸다.
codegraph impact classifyRoute

이 쿼리는 매칭 파일 전체를 에이전트에게 통째로 전달하는 방식에 비해 출력 정보의 용량을 98.7% 줄여 비용을 절감한다(raw/Andrej Karpathy’s Fix for LLM Memory Works on Code Too.md).

2. Code Review Graph

code-review-graph는 병합 전 변경 영역의 테스트 보장 범위를 구체적으로 확인하여 코드 리뷰 대기열 병목 현상을 방지하는 데 도움을 준다. OmniRoute 기준 빌드 시간에 2분 25초, 용량은 1.4GB를 차지한다(raw/Andrej Karpathy’s Fix for LLM Memory Works on Code Too.md).

  • 활용 시나리오: 수정한 함수가 속한 특정 테스트 케이스 4개의 이름과 라인 번호를 정밀 분석한다.
  • 위험도 계산 알고리즘: 호출 빈도, 테스트 커버리지 유무, 보안 키워드 등의 가중치를 합산하여 위험 점수(Risk Score)를 계산해 PR 병합을 보류(Gate)하는 역할을 수행한다.

충돌

  • 인덱싱 동기화 지연: 코드 편집 도중 실시간 업데이트(동기화)가 오작동하여 이전 해시 기준으로 인덱싱되는 에러가 보고되었다(raw/Andrej Karpathy’s Fix for LLM Memory Works on Code Too.md). 파일명을 변경할 때 이전 노드가 남아 있거나 새 노드가 누락되므로, 중대 수정 시에는 수동으로 인덱스를 재구축해야 한다.
  • 파싱 언어 지원 한계: tree-sitter 기반 파싱은 C 언어 등 매크로 사용이 잦은 영역에서 전처리 매크로를 올바르게 해석하지 못해 정확도가 저하된다.
  • 정밀도 신뢰성 한계: code-review-graph가 영향 범위로 지목한 파일 10개 중 4개는 실제 분석 시 관련이 없는 노이즈 정보였다(raw/Andrej Karpathy’s Fix for LLM Memory Works on Code Too.md). 이를 무조건 맹신하기보다는 1차 필터링 도구로 취급해야 한다.

관련 노트

  • 코딩 에이전트: 지식 컴파일 기술(MCP 기반 코드 그래프)을 통해 인지 부하를 줄이고 효율적으로 코드를 작성하는 주체이다.
  • 인지적 비용: 매번 전체 문서를 읽어 정보의 맥락을 추론해야 하는 LLM의 텍스트 소모 및 지연 시간을 절감하는 주된 척도이다.
  • 코드 리뷰 대기열 병목: PR 전에 변경 사항의 영향 범위를 정밀 추적함으로써 코드 리뷰 기간을 단축하고 병목을 예방하는 응용 분야이다.