AI 코딩 도우미한테 “이 함수 누가 호출해?” 물어보면 뭘까? 답변을 위해 프롬프트 컨텍스트에 프로젝트 전체를 다 넣는다고 상상해봐. fastapi면 95만 토큰. 한 번 물어볼 때마다 95만 토큰. 10번 물으면 950만. 그게 지금 대부분 AI 코딩 도구의 현실이다.

tirth8205(Tirth Kanani)라는 런던의 AI 엔지니어가 만든 code-review-graph는 이 문제를 정면으로 깼다. Tree-sitter AST 파서로 코드베이스 전체를 그래프로 만들어두고, 질문할 때는 필요한 노드만 떼어서 준다. 결과는 중간값 82배, 최대 528배 토큰 감소. 19,500개가 넘는 GitHub 스타가 증명한다 — 이게 더 나은 방식이다.

문제: AI는 코드를 “읽지” 않는다

Claude Code, Cursor, Copilot — 모두 훌륭한 도구다. 하지만 코드 리뷰를 시키면 어떻게 될까?

  • 프로젝트 전체를 스캔한다
  • 관련 없는 파일도 뒤진다
  • 컨텍스트 윈도우가 터질 때까지 읽는다
  • 그리고 “이 변경이 안전해 보입니다” 같은 모호한 답변을 내놓는다

문제는 검색이 아니라 구조 이해의 부재에 있다. “이 함수를 바꾸면 누가 영향받을까?”라는 질문은 단순한 텍스트 검색으로 해결되지 않는다. 호출자 → 호출자 → 호출자로 이어지는 3-hop 체인을 추적해야 하는데, grep으로는 불가능하다.

Tirth는 이 문제를 자신의 MSc 논문 GraphMinds에서부터 고민해왔다. 지식 그래프가 LLM 시스템을 더 투명하고 제어 가능하게 만든다는 아이디어였다. 그리고 그 아이디어를 실제 프로덕트로 만든 게 code-review-graph다.

해결: Tree-sitter + SQLite 그래프

아키텍처는 놀랍도록 단순하다:

  • Tree-sitter로 23개 언어의 AST를 파싱한다 (함수, 클래스, 임포트, 호출 관계)
  • SQLite에 노드(함수/클래스)와 엣지(호출/상속/임포트)로 저장한다
  • SHA-256 해시로 변경된 파일만 골라내서 증분 업데이트한다
  • Leiden 알고리즘으로 커뮤니티 감지 — 코드의 자연스러운 모듈 경계를 찾는다

2900개 파일짜리 모노레포도 2초 안에 재인덱싱한다. 처음 빌드도 500개 프로젝트면 10초면 끝난다.

82배의 의미

벤치마크 표를 보면 충격적이다:

레포 전체 토큰 그래프 토큰 감소율
fastapi 951,071 2,169 528x
code-review-graph (자체) 208,821 2,495 93x
flask 125,022 1,986 71x
express 135,955 3,465 41x

중간값 82배는 “AI가 리뷰 한 번 할 때마다 1%도 안 되는 토큰만 쓴다”는 뜻이다. 100번 질문할 것을 1번 질문값으로 끝낼 수 있다. API 비용으로 환산하면 어마어마한 차이다.

하지만 Tirth는 정직하다. “정밀도 vs 재현율 트레이드오프가 있다”고 인정한다. 블래스트 래디어스 분석은 의도적으로 더 많은 파일을 플래그한다 — 깨진 의존성을 놓치는 것보다 낫다는 판단이다. 평균 F1은 0.71. 완벽하지 않지만, 실용적이다.

왜 그래프여야 하는가

FAQ에서 Tirth가 직접 대답한다:

  • LSP와 다른 점? LSP는 언어별 데몬, 단일 심볼 정밀. Code-review-graph는 크로스랭귀지 그래프, 전체 영향도 분석.
  • RAG와 다른 점? RAG는 유사도 청크를 검색. 그래프는 AST 구조 엣지를 탐색. 임베딩은 옵션일 뿐.
  • grep과 다른 점? grep은 1-hop에 강함. 그래프는 n-hop (호출자→호출자→테스트)에서 독보적.

이 비교가 핵심이다. AI 코딩 도구의 미래는 더 큰 컨텍스트 윈도우가 아니라 더 똑똑한 컨텍스트 선택에 달려있다는 게 내 생각이다. 100만 토큰을 통째로 넣는 것보다, 필요한 2,000토큰만 골라서 넣는 쪽이 LLM의 추론 품질에도 더 좋다.

내가 실제로 써본 소감

사실 나도 Drewgent에서 비슷한 고민을 하고 있었다. codebase-memory-mcp라는 MCP 서버로 코드 그래프를 관리하고 있는데, 컨셉은 거의 동일하다 — AST 기반 지식 그래프, MCP 프로토콜로 AI 도구와 연결, 변경 감지.

code-review-graph에서 배운 점은 설치 경험의 중요성이다. Tirth는 `pip install` 한 방이면 MCP 설정부터 훅 설치까지 전부 자동화했다. CLI 하나로 12개 플랫폼(Claude Code, Cursor, Windsurf, Zed, Continue, OpenCode, Copilot…)을 한 번에 셋업한다. 이건 내가 Drewgent에서 간과한 UX 포인트였다.

그리고 벤치마크의 정직함. 대부분 오픈소스는 “내 도구가 짱”이라는 결과만 내놓는데, Tirth는 “528x는 베스트 케이스고 엄청난 차이가 아니다”라고 밝힌다. 한계 (small single-file changes는 오히려 오버헤드, flow detection recall 33%)를 정면으로 공개한다. 이 태도가 19.5k 스타를 만든 게 아닐까.

AI 코딩의 다음 단계

code-review-graph가 증명한 건 하나다: AI가 코드를 리뷰할 때 “모든 걸 다 읽어야 한다”는 전제는 거짓이다. 코드는 텍스트 덩어리가 아니라 구조화된 그래프다. 그 구조를 이해하지 못하는 AI 도구는 영원히 컨텍스트 윈도우와 싸울 수밖에 없다.

Tirth는 지금 “한 사람과 무언가를 만들고 싶다”고 말한다. 그의 사이트에 Open call이 걸려있다. 누군가는 이 기회를 잡아야 한다. 19.5k 스타의 AI 엔지니어와 함께 코드 인텔리전스의 다음 챕터를 써내려갈 사람이라면 더더욱.

code-review-graph: github.com/tirth8205/code-review-graph
Tirth Kanani: tirthkanani.com