본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 05. 18. 23:16

코드베이스의 지식 그래프(Knowledge Graph)화를 통한 AI 코드 리뷰 정밀도 향상 방법

요약

코드베이스를 지식 그래프(Knowledge Graph)로 구축하여 AI 코드 리뷰의 컨텍스트 효율성을 극대화하는 방법을 소개합니다. Tree-sitter를 통해 AST를 추출하고 MCP를 통해 AI에 연결함으로써, 토큰 소비를 획기적으로 줄이면서도 리뷰의 정밀도와 속도를 높일 수 있습니다.

핵심 포인트

  • 대량의 파일을 컨텍스트로 전달하는 기존 방식은 토큰 비용 상승과 리뷰 정밀도 저하를 초래함
  • Tree-sitter를 활용해 함수, 클래스, 호출 관계를 노드와 엣지로 구성된 지식 그래프로 변환 가능
  • 지식 그래프와 MCP를 결합하면 영향 범위 분석 시간을 30분에서 2초로 단축할 수 있음
  • 실제 테스트 결과 토큰 소비를 최대 6.8배에서 49배까지 절감하는 효과를 확인
  • 소규모 프로젝트나 초기 단계에서는 Neo4j 대신 SQLite를 사용하는 것이 효율적임

「auth.py를 변경했는데, 영향 범위는 어디까지인가?」

PR(Pull Request) 리뷰에서 매번 고민하게 되는 이 질문에, 저는 지금까지 grep -r과 수작업으로 답해왔습니다. 30분을 들여 관련 파일을 찾아내고, 이를 AI 리뷰의 컨텍스트(Context)로 전달합니다. 많은 엔지니어가 동일한 작업을 하고 있을 것입니다.

그런데 지난달, 코드베이스를 지식 그래프(Knowledge Graph)화하여 MCP를 통해 AI 리뷰에 연결해 보았더니, 이 30분이 2초로 줄어들었습니다. 게다가 AI가 읽는 컨텍스트는 1/8로 줄어들었고, 리뷰의 정밀도는 명확하게 향상되었습니다.

본 기사에서는 코드 KG(Knowledge Graph) × AI 코드 리뷰의 구현 패턴을 공유합니다. Tree-sitter로 AST(Abstract Syntax Tree)를 추출하고, MCP로 AI에게 전달하기까지의 최단 경로입니다.

먼저 문제의 구조를 정리하겠습니다. AI 코드 리뷰의 기본 방식은 '변경 사항(diff) + 관련 파일 전부'입니다.

PR의 차이점: 200행
+ 만약을 위해 관련 있어 보이는 파일: 50개 (150,000 토큰)
= AI에게 전달하는 컨텍스트: 약 160,000 토큰

Claude 3.5 Sonnet의 상한선은 200K 토큰입니다. PR 하나로 상한선의 80%를 다 써버립니다. 결과는 다음과 같습니다.

  • 리뷰 정밀도가 떨어짐 (정보 과다로 인해 초점이 분산됨)
  • 토큰 비용이 불어남 (PR당 수십 엔~수백 엔)
  • 속도가 느려짐 (컨텍스트 처리에 시간이 걸림)

「만약을 위해 대량으로 전달한다」는 점이 AI 리뷰의 최대 병목 구간입니다.

코드 지식 그래프는 코드 구조를 함수, 클래스, 호출 관계의 그래프로 보유합니다. Tree-sitter로 AST를 추출하여 그래프 DB에 저장합니다.

노드(Node): 함수, 클래스, 파일, 테스트
엣지(Edge): 호출, 상속, import, 테스트 커버리지

이를 MCP를 통해 AI에게 공개하면, AI는 「이 변경의 영향 범위」를 그래프 탐색을 통해 2초 만에 계산합니다. grep -r과 달리 함수의 호출 체인을 정확하게 추적할 수 있습니다.

제가 테스트한 code-review-graph의 공식 벤치마크에서는 리뷰 시 토큰 소비가 6.8배 감소, 일상적인 코딩 태스크에서 49배 감소를 기록했습니다.

제가 테스트한 주요 OSS는 code-review-graph, CodeGraphContext, Codebase-Memory(arXiv 논문) 세 가지입니다. Codebase-Memory는 답변 품질의 83%를 유지하면서 토큰을 10배 절감하고, 도구 호출(Tool call)을 2.1배 절감했다고 논문에서 보고하고 있습니다.

최소 구성으로 동작하게 만드는 절차를 공유합니다. Python 프로젝트를 가정합니다.

import tree_sitter_python as tspython
from tree_sitter import Language, Parser
PY_LANGUAGE = Language(tspython.language())
...

이것만으로 함수 정의, 클래스 정의, 호출 관계를 추출할 수 있습니다. Tree-sitter는 66개의 언어를 지원하므로 TypeScript/Go/Rust에서도 동일한 구조로 작성할 수 있습니다.

저는 우선 SQLite로 구동하는 것을 권장합니다. Neo4j는 과합니다(Overkill).

CREATE TABLE nodes (
  id INTEGER PRIMARY KEY,
  kind TEXT, -- 'function' | 'class' | 'file'
...

노드 수가 10만 개를 넘기 전까지는 SQLite로도 여유가 있습니다. 저의 사내 모노레포(30만 행)에서도 그래프 크기는 수십 MB 수준으로 유지되었습니다.

「이 함수를 변경하면 어떤 파일이 영향을 받는가」를 계산하는 함수입니다.

def blast_radius(func_name: str, max_hops: int = 3) -> dict:
    """지정된 함수의 blast radius를 BFS로 계산"""
    visited = {func_name}
    ...

호출 체인을 역방향으로 추적합니다(누가 호출하고 있는가). 3홉(Hop) 정도면 대부분의 영향 범위를 커버할 수 있습니다.

from mcp.server import Server
from mcp.types import Tool, TextContent
server = Server("code-kg")
...

최소 구성의 MCP 서버입니다. Claude Code나 Cursor에 등록하면, AI가 필요에 따라 blast_radius 도구를 호출합니다.

도입 전과 도입 후, 저희 팀의 리뷰 플로우는 다음과 같이 변화했습니다.

1. PR(Pull Request) 생성
2. 리뷰어가 diff(차이점)를 읽음
3. "auth.py의 변경이 다른 곳에 영향을 주지는 않을까?"라는 불안감
...
1. PR(Pull Request) 생성
2. AI가 blast_radius 자동 실행 (2초)
3. 영향을 받는 7개 파일 + 리스크 스코어 7.2/10
...

시간 단축보다도, 리뷰의 질적 변화가 더 크다고 저는 느끼고 있습니다. AI가 "만약을 위해"와 "정말로 필요한" 것을 구분할 수 있게 되면, 코멘트의 정밀도가 한 단계 올라갑니다.

처음부터 직접 구현하지 않아도 활용할 수 있는 OSS(Open Source Software)가 풍부합니다. 제가 테스트해 본 3가지를 소개합니다.

도구특징추천
code-review-graphClaude Code/Cursor 자동 연동, 22개 MCP 도구◎ 처음 시도한다면 이것
...
# 최단 데모 (code-review-graph)
pip install code-review-graph
code-review-graph build ./my-project
...

Claude Code/Cursor/Windsurf/Zed를 자동으로 감지하여 MCP 서버 설정까지 완료해 줍니다. 단 3개의 명령어로 AI 리뷰를 blast radius 대응 체제로 바꿀 수 있습니다.

PR을 열면 자동으로 blast radius 코멘트가 게시되는 구성도 구축할 수 있습니다. code-review-graph는 diff-radius 서브 명령어를 통해 "base~head 사이의 영향 범위"를 직접 출력할 수 있으므로, GitHub Actions에서 호출한 뒤 actions/github-script를 사용하여 PR 코멘트로 만드는 것만 하면 됩니다.

PR 생성과 동시에 "영향 파일 7건, 리스크 스코어 7.2/10"이라는 코멘트가 달리면, 리뷰어는 수치를 보고 우선순위를 즉시 결정할 수 있습니다. 저희 팀에서는 리스크 스코어 6 이상의 PR에 대해 "2인 리뷰 필수"라는 라벨을 붙이는 것도 자동화했습니다.

제가 겪었던 3가지 함정도 공유합니다.

# 정적 분석(Static Analysis)으로는 추적 불가
fn = globals()[fn_name]
fn(args)

Python의 getattr / globals(), JS의 require(dynamic)는 정적 분석으로 포착할 수 없습니다. 저는 동적 호출을 경고로 기록하는 규칙을 세웠습니다. 완벽함을 포기하고, 사람에게 "이 부분은 확인해 주세요"라고 넘겨주는 방침을 택했습니다.

서비스 A에서 서비스 B로의 HTTP 호출은 코드 KG(Knowledge Graph)로 추적할 수 없습니다. OpenAPI 스키마로부터 에지(Edge)를 보완하는 메커니즘을 별도로 마련해야 합니다.

매 PR마다 전체 빌드를 수행하면 느립니다. 차분 빌드(Incremental Build, 변경된 파일만 다시 파싱) 메커니즘은 필수입니다. code-review-graph는 차분 빌드를 지원하므로 저는 이를 활용하고 있습니다.

코드베이스를 지식 그래프(Knowledge Graph)화하면, AI 리뷰는 "만약을 위해 대량으로 읽기"에서 "필요한 것만 정확하게 읽기"로 변화합니다.

  • Tree-sitter를 통해 66개 언어의 AST(Abstract Syntax Tree) 추출 가능
  • SQLite를 사용하여 10만 노드까지는 충분히 수용 가능
  • MCP를 통해 AI 에이전트에게 공개하면 자동으로 도구 호출 가능
  • code-review-graph를 사용하면 3개의 명령어로 동작 시작
  • 토큰 소비 6.8배 절감 및 리뷰 품질 동시 향상

저희 팀은 도입 한 달 만에 AI 리뷰 코멘트의 정밀도가 체감상 1.5배 이상 향상되었습니다. 30분이 걸리던 수동 grep 작업이 2초의 도구 호출로 대체되는 것만으로도 리뷰 문화가 바뀝니다.

여러분의 프로젝트 AI 리뷰는 "모든 파일을 읽게 하는 방식"에 머물러 있지 않나요? 한 번 code-review-graph build를 실행해 보시면 세상이 달라질지도 모릅니다.

  • code-review-graph (OSS, Tree-sitter + MCP)
  • CodeGraphContext (Neo4j 기반)
  • graphify (Claude/Codex/Gemini 대응)
  • Codebase-Memory: Tree-Sitter-Based Knowledge Graphs for LLM Code Exploration via MCP (arxiv, 학술 논문)
  • code-review-graph 공식 사이트

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0