TRENDSHIFT #7 · 코드 → 지식 그래프

코드베이스 전체를
한 장의 지도로

graphify는 AI 코딩 어시스턴트(Claude Code, Codex, Cursor, Gemini CLI 등 21개 이상)에 설치해두고 /graphify . 한 줄을 치면 프로젝트의 모든 파일 — 코드, 문서, PDF, 이미지, 영상 — 을 노드와 엣지로 만들어, 어시스턴트가 grep 대신 그래프를 질의하게 만드는 스킬이다. v0.8.16 / 52.1k stars / MIT / YC S26.

0먼저, graphify가 뭔가?

한 줄로 코드를 지식 그래프로 바꾸는 도구.

AI 코딩 어시스턴트(Claude Code, Cursor 같은 것)에게 "이 프로젝트에서 인증 로직이 데이터베이스랑 어디서 만나?"라고 물으면, 보통 어시스턴트는 폴더를 grep으로 뒤지거나 파일을 한 개씩 열어 본다. 토큰을 많이 쓰고, 큰 프로젝트에서는 답을 못 맞히는 경우가 많다.

graphify는 이 과정을 완전히 다르게 처리한다. 먼저 프로젝트 전체를 한 번 분석해서 "함수 A는 함수 B를 호출, B는 클래스 C를 임포트, C는 테이블 USERS를 읽음" 같은 관계를 한 덩어리의 지식 그래프로 만들어 디스크에 저장한다. 다음 질문이 오면 어시스턴트는 파일을 다시 읽는 대신 이 그래프에 질의해서 답한다.

용어
Knowledge Graph (지식 그래프)
노드(점)는 "함수·클래스·테이블·문서 단락" 같은 개념, 엣지(선)는 "호출한다·임포트한다·언급한다" 같은 관계. 위키피디아 표제어와 표제어 사이의 링크를 떠올리면 된다. graphify는 코드와 문서를 그렇게 위키피디아처럼 만든다.
용어
AI Coding Assistant Skill (AI 코딩 어시스턴트 스킬)
어시스턴트가 /graphify . 같은 한 줄 명령으로 호출하는 외부 도구 모음. Anthropic이 정의한 SKILL.md 표준 형식을 따른 폴더를 어시스턴트가 자동 로딩한다. 21개 이상의 코딩 도구가 모두 같은 형식을 호환한다.
용어
tree-sitter
소스코드를 빠르게 파싱(parsing, 문법 분석)해서 추상 구문 트리(AST)로 만드는 라이브러리. GitHub와 Atom 에디터에서 만들었고, "함수 정의 찾기·호출 찾기" 같은 작업을 정규식보다 훨씬 정확하게 한다. graphify는 기본 25개(extras 포함 시 36개) 언어를 tree-sitter로 분석한다 — 이 과정은 외부 LLM API를 호출하지 않고 로컬에서 끝나서, 비용 0원·완전 프라이빗.

1한 줄 요약

이 프로젝트의 핵심 메시지.

핵심 메시지

"파일을 grep하지 말고,
코드의 지도를 질의하라."

AI 코딩 어시스턴트는 매번 폴더를 뒤지는 대신 미리 만들어둔 지식 그래프를 질의해야 한다. 그러면 토큰을 덜 쓰고, 답이 정확해지고, "이 코드 어딘가에 비슷한 게 있을 텐데" 같은 모호한 질문에도 답할 수 있다.

graphify는 그 그래프를 만들고 — 시각화하고 — MCP 서버로 노출까지 한 줄에 해 준다.

2왜 지금 주목받는가

52.1k 스타, YC S26, TrendShift 일일 7위에 든 이유.

AI 코딩 어시스턴트는 컨텍스트 윈도우(한 번에 읽을 수 있는 토큰 양)가 정해져 있다. 프로젝트가 작으면 폴더 전체를 통째로 넣고 일을 시키는데, 100만 줄 코드베이스에서는 그게 불가능하다. 그래서 대부분의 어시스턴트는 grep·find를 반복하면서 토큰을 갉아먹는다.

graphify가 풀려는 문제는 정확히 이 지점이다. 사람이 사전 작업 한 번 해두면, 어시스턴트는 매번 다시 읽는 대신 그래프에 질문만 던지면 된다. 이걸 GraphRAG(그래프 기반 검색 증강 생성)라고 부르고, 최근 1년 사이 LLM 분야에서 가장 뜨거운 패러다임 중 하나가 됐다.

용어
GraphRAG (Graph Retrieval-Augmented Generation)
기존 RAG는 "질문과 비슷한 청크를 벡터로 찾아서" LLM에 넣어준다. GraphRAG는 청크 대신 지식 그래프의 부분 그래프(subgraph)를 찾아서 넣어준다. "이 클래스와 연결된 모든 것" 같은 질의에 강하다. Microsoft Research가 2024년에 발표한 동명 논문 이후 표준 용어가 됐다.
차별점 1 / 4

설치가 한 줄, 호출도 한 줄

경쟁자(예: 자체 RAG 파이프라인 직접 구축)들은 "Pinecone 가입 → 임베딩 모델 선정 → 청킹 전략 결정 → 검색 코드 작성"이 다 필요하다. graphify는 다음 세 줄로 끝난다.

$ uv tool install graphifyy
$ graphify install
$ /graphify .
차별점 2 / 4

모든 코딩 어시스턴트에서 작동

Claude Code, Codex, OpenCode, Cursor, Gemini CLI, GitHub Copilot CLI, VS Code Copilot Chat, Aider, OpenClaw, Factory Droid, Trae, Trae CN, Hermes, Kimi Code, Kiro, Pi, Google Antigravity, CodeBuddy, Kilo Code, Amp, Devin CLI — 같은 그래프 파일을 21개 이상의 도구가 공통으로 읽는다. 도구를 바꿔도 인덱스를 다시 안 짜도 된다.

차별점 3 / 4

코드만이 아니라 문서·PDF·영상까지

대부분의 코드 인덱서는 .py·.ts만 본다. graphify는 PDF 논문, .docx 사양서, YouTube 영상(자막 자동 생성), 이미지(시맨틱 추출)까지 같은 그래프에 합친다. 그래서 "이 데이터 모델 설계가 어느 사양서 단락에서 결정됐는지"를 물어볼 수 있다.

차별점 4 / 4

로컬 우선, 텔레메트리 0

코드는 tree-sitter로 로컬 추출(API 호출 없음). 영상은 faster-whisper로 로컬 전사. PDF/문서만 어시스턴트의 모델 API로 처리. 텔레메트리·사용 분석·트래킹 전부 없음. 자사 클라우드(Penpax)는 별도 옵트인.

비유

여행을 떠나기 전에 지도 한 장을 미리 펴 보는 것과 같다. 매번 "여기 어디지?" 물어보는 대신, 한 번 지도를 만들어두고 누가 물으면 그걸 가리킨다. graphify는 코드베이스용 지도 제작자다. 그리고 그 지도는 21개 이상의 어시스턴트가 동시에 공유한다.

3기술 스택 전체 지도

Python 100%, tree-sitter 25개(기본) / 36개(extras 포함), NetworkX, Leiden, MCP까지.

graphify의 깃허브 페이지를 보면 "Languages: Python 100.0%"가 떠 있다. 단일 언어로 끝까지 밀고 간 깔끔한 구조 — 의존성 트리는 다음 세 층으로 나뉜다.

핵심 의존성 (필수)

패키지역할이게 왜 필요한가
networkx그래프 자료구조노드·엣지를 메모리에 올려두고 BFS/DFS·최단경로·중심성 같은 알고리즘을 돌리는 파이썬 표준 라이브러리.
tree-sitter + 25개 언어 바인딩 (기본) / 36개 (extras 포함)로컬 AST 파싱Python, TS, JS, Go, Rust, Java, C/C++, Ruby, C#, Kotlin, Scala, PHP, Swift, Lua, Zig, PowerShell, Elixir, ObjC, Julia, Verilog, Fortran, Bash, JSON, Groovy + 기타(extras 설치 시). 정규식보다 정확하고, ANTLR보다 빠르다.
rapidfuzz퍼지 문자열 매칭"UserService"와 "user_service" 같은 케이스·표기 차이를 흡수해서 같은 엔티티로 묶는다.
내부 구현 메모

MinHash+LSH는 datasketch 없이 자체 구현됩니다. graphify는 graphify/_minhash.py에 datasketch-compatible MinHash+LSH를 scipy 의존성 없이 직접 구현해 뒀습니다(pip install graphifyy로는 datasketch가 설치되지 않음). 비슷한 노드 묶기·중복 제거를 외부 패키지 없이 처리합니다.

옵셔널 백엔드 (extras)

pip install graphifyy[X] 형태로 필요한 것만 골라 설치한다 — 이게 graphify가 가벼운 비결이다.

extras 키추가 의존성활성화 기능
pdfpypdf + markdownifyPDF 논문/사양서 추출
officepython-docx + openpyxl.docx/.xlsx 사양서 추출
videofaster-whisper + yt-dlpYouTube/로컬 영상 → 자막 → 그래프 노드
mcpmcpMCP stdio 서버 — 어시스턴트가 직접 그래프 질의
neo4jneo4j그래프를 Neo4j 데이터베이스로 푸시
leidengraspologicLeiden 알고리즘 — 그래프를 자동으로 의미 있는 클러스터(커뮤니티)로 분할 (Python < 3.13 한정)
svgmatplotlib그래프 SVG 정적 이미지 출력
openai, gemini, kimi, ollama, bedrockopenai SDK / boto3각각의 LLM 백엔드로 PDF/문서 시맨틱 추출 (코드 추출에는 안 씀)
all위의 전부한 번에 풀세트 설치

개발 의존성

pytest, pyright, ruff, bandit(보안 스캐너), safety, pip-audit, hypothesis(property-based testing), nuitka(C로 컴파일해 배포). dev 도구만 12개 — 오픈소스 메인테이너 표준 도구 모음을 그대로 따라간다.

용어
Leiden 알고리즘
그래프를 커뮤니티(서로 빽빽이 연결된 노드 묶음)로 자동 분할하는 알고리즘. 유명한 Louvain 알고리즘의 개선판으로, "끊어진 커뮤니티" 문제를 해결했다. graphify는 이걸로 코드베이스의 자연스러운 모듈 경계(인증, 결제, 검색 같은)를 찾아낸다.
용어
MCP (Model Context Protocol)
Anthropic이 2024년 11월에 공개한 표준 — LLM이 외부 도구·데이터를 호출하는 방식을 통일한 규약. 기존엔 도구마다 따로 SDK를 써야 했는데, MCP 서버 하나 띄우면 Claude·ChatGPT·Cursor가 다 같은 인터페이스로 쓴다. graphify는 그래프를 MCP 서버로 노출해서 어시스턴트가 query_graph, shortest_path, get_neighbors 같은 함수를 직접 부르게 한다.

4아키텍처 심화 분석

7단계 파이프라인, 모듈별 함수 1개 원칙, 부수효과 0.

ARCHITECTURE.md 첫 줄이 본질이다: "graphify is a Claude Code skill backed by a Python library. The skill orchestrates the library; the library can be used standalone." 스킬은 명령을 받아 라이브러리를 호출하고, 라이브러리는 단독으로도 쓸 수 있다.

파이프라인은 7단계로 쪼개진다 — 각 단계는 자기 모듈에 함수 하나로 들어있고, 단계 사이는 평범한 파이썬 dict와 NetworkX 그래프로만 소통한다. 공유 상태도 없고 graphify-out/ 폴더 바깥에는 부수효과(side effect)도 없다.

전체 파이프라인 (ASCII 시스템 구조도)

┌────────────────────────────────────────────────────────────────┐
│                     graphify 실행 흐름                        │
└────────────────────────────────────────────────────────────────┘

   사용자          AI 어시스턴트                graphify CLI
     │                  │                            │
     │  /graphify .     │                            │
     ├─────────────────►│                            │
     │                  │   SKILL.md 로드 후 호출    │
     │                  ├───────────────────────────►│
     │                  │                            │
     │                  │                            ▼
     │            ┌─────────────────────────────────────────┐
     │            │  1. detect.py                            │
     │            │     collect_files(root) → [Path,...]    │
     │            │     (.graphifyignore 적용, 확장자 필터)  │
     │            └────────────────┬─────────────────────────┘
     │                             │ [Path 리스트]
     │                             ▼
     │            ┌─────────────────────────────────────────┐
     │            │  2. extract.py                           │
     │            │     코드 → tree-sitter (로컬, API 0)    │
     │            │     PDF/이미지/문서 → LLM 백엔드        │
     │            │     영상 → faster-whisper (로컬)        │
     │            │     반환: {nodes:[...], edges:[...]}    │
     │            └────────────────┬─────────────────────────┘
     │                             │ [extraction dict]
     │                             ▼
     │            ┌─────────────────────────────────────────┐
     │            │  3. build.py                             │
     │            │     build_graph(extractions) → nx.Graph │
     │            │     (validate.py가 스키마 검증)         │
     │            └────────────────┬─────────────────────────┘
     │                             │ [nx.Graph]
     │                             ▼
     │            ┌─────────────────────────────────────────┐
     │            │  4. cluster.py                           │
     │            │     Leiden 알고리즘으로 커뮤니티 분할   │
     │            │     각 노드에 community 속성 부여       │
     │            └────────────────┬─────────────────────────┘
     │                             │ [클러스터링된 그래프]
     │                             ▼
     │            ┌─────────────────────────────────────────┐
     │            │  5. analyze.py                           │
     │            │     god nodes (중심성 높은 노드)        │
     │            │     surprising connections (놀라운 연결)│
     │            │     suggested questions (4~5개)         │
     │            └────────────────┬─────────────────────────┘
     │                             │ [analysis dict]
     │                             ▼
     │            ┌─────────────────────────────────────────┐
     │            │  6. report.py                            │
     │            │     GRAPH_REPORT.md 렌더링              │
     │            └────────────────┬─────────────────────────┘
     │                             │
     │                             ▼
     │            ┌─────────────────────────────────────────┐
     │            │  7. export.py                            │
     │            │     graph.json  (전체 그래프, 질의용)   │
     │            │     graph.html  (인터랙티브 시각화)     │
     │            │     graph.svg   (정적 이미지, 옵션)     │
     │            │     Obsidian vault (옵션)               │
     │            └────────────────┬─────────────────────────┘
     │                             │
     │                             ▼
     │                       graphify-out/
     │
     │  /graphify query "what connects auth to DB?"
     ├─────────────────►┌─────────────────────────────────────┐
     │                  │  serve.py (MCP stdio 서버)         │
     │                  │  query_graph / shortest_path /     │
     │                  │  get_neighbors / get_node          │
     │                  └─────────────────────────────────────┘

핵심 설계 패턴 1: 모듈 = 함수 1개

ARCHITECTURE.md의 모듈 표를 보면, 거의 모든 모듈이 외부에 노출하는 함수가 하나뿐이다. detect.collect_files, extract.extract, build.build_graph, cluster.cluster… 이렇게 단순한 인터페이스 덕분에 새 단계를 끼워 넣기도 쉽고, 단위 테스트 하나당 함수 하나로 1:1 대응이 된다.

설계 패턴
Stateless Pipeline (상태 없는 파이프라인)

각 단계는 입력을 받아서 출력을 돌려준다. 클래스 상속도, 글로벌 변수도, 싱글톤도 없다. 디버깅할 때 "이 dict만 들고 있으면 다음 단계 함수를 단독으로 호출해서 재현 가능"이라는 게 큰 강점이다.

핵심 설계 패턴 2: 신뢰도 라벨 (Confidence Tags)

그래프의 모든 엣지(관계)는 다음 셋 중 하나의 신뢰도 라벨을 단다.

라벨의미예시
EXTRACTED소스에 명시적으로 적혀 있음import requests, def foo(): bar() 같은 직접 호출
INFERRED합리적 추론호출 그래프 2차 패스, 같은 문맥에서 같이 등장
AMBIGUOUS불확실 — 사람 리뷰 필요GRAPH_REPORT.md에 별도 섹션으로 표시

이게 LLM 기반 도구로서는 드물게 정직한 설계다. 보통 LLM 도구는 "답이 맞을 확률 80%"라고 말하지 않고 그냥 단정한다. graphify는 "이건 코드에 실제로 적혀 있어서 확실, 이건 우리가 추측, 이건 모름"을 명시한다.

핵심 설계 패턴 3: 캐시와 머지 드라이버

두 가지 작은 기능이 팀 워크플로우를 살린다.

5디렉토리·모듈 구조 해부

레포 최상위 + graphify 패키지 내부.

레포 최상위는 표준 파이썬 패키지 모양이다.

graphify/                       # ← GitHub 레포 루트 (브랜치 v8)
├── .github/                    # CI 워크플로 (pytest, lint, release)
├── docs/
│   ├── translations/           # 31개 언어 README 번역
│   │   ├── README.ko-KR.md
│   │   ├── README.zh-CN.md
│   │   └── ...
│   ├── how-it-works.md         # 추출 파이프라인·벤치마크 상세
│   ├── docker-mcp-sqlite.md    # Docker MCP Toolkit 통합 가이드
│   └── logo-text.svg
├── graphify/                   # ← 실제 파이썬 패키지
│   ├── __init__.py
│   ├── __main__.py             # `python -m graphify` 진입점
│   ├── detect.py               # 파일 수집 + .graphifyignore
│   ├── extract.py              # 25개 언어(기본) / 36개(extras 포함) + PDF/문서/영상 추출
│   ├── build.py                # extraction dict → nx.Graph
│   ├── cluster.py              # Leiden / Louvain 클러스터링
│   ├── analyze.py              # god nodes, surprises, questions
│   ├── report.py               # GRAPH_REPORT.md 렌더링
│   ├── export.py               # graph.json/.html/.svg/Obsidian
│   ├── callflow_html.py        # Mermaid 아키텍처 다이어그램
│   ├── ingest.py               # URL → 파일 다운로드 (arXiv, YT)
│   ├── cache.py                # 의미 캐시 (파일 해시 기반)
│   ├── security.py             # URL/path/label 검증 헬퍼
│   ├── validate.py             # extraction 스키마 검증
│   ├── serve.py                # MCP stdio 서버
│   ├── watch.py                # 파일 감시 후 재추출
│   ├── benchmark.py            # corpus vs subgraph 토큰 비교
│   ├── skill.md                # ← Claude Code용 SKILL.md
│   ├── skill-codex.md          # ← Codex용
│   ├── skill-opencode.md       # ← OpenCode용
│   ├── skill-aider.md
│   ├── skill-copilot.md
│   ├── skill-claw.md           # ← OpenClaw용
│   ├── skill-windows.md        # ← Windows용 (PowerShell 변형)
│   ├── skill-droid.md
│   ├── skill-trae.md
│   ├── skill-kiro.md
│   ├── skill-vscode.md
│   ├── skill-amp.md
│   ├── skill-devin.md
│   ├── skill-kilo.md
│   └── skill-pi.md
├── tests/                      # 모듈당 테스트 파일 1개
│   ├── fixtures/               # 31개 언어 샘플 코드
│   └── test_languages.py
├── worked/                     # 실제 코퍼스 실행 결과 (PR 기여 형식)
├── AGENTS.md                   # AI 코딩 어시스턴트용 컨텍스트
├── ARCHITECTURE.md             # ← 본 섹션의 원본
├── SECURITY.md                 # 위협 모델
├── CHANGELOG.md
├── LICENSE                     # MIT
├── README.md
└── pyproject.toml              # 의존성 + extras + 빌드 설정

주목할 점

관찰 1 / 4

플랫폼별 SKILL.md를 15개 들고 다닌다

같은 도구라도 Claude Code와 Codex와 OpenCode는 호출 규약이 살짝 다르다. graphify는 한 코어 라이브러리를 두고, 각 플랫폼별 SKILL.md를 따로 둬서 차이를 흡수한다. 새 도구가 나오면 skill-새도구.md 하나 추가하면 끝.

관찰 2 / 4

tests/ 하위가 거의 모듈과 1:1

"One test file per module"이 ARCHITECTURE.md에 명시돼 있다. 새 언어 추가하려면 (1) extract.pyextract_새언어(), (2) tests/fixtures/에 샘플, (3) tests/test_languages.py에 케이스 — 정확히 3개 파일 수정.

관찰 3 / 4

worked/ 폴더 = 실제 사용 사례 PR

컨트리뷰션 가이드가 흥미롭다. "버그 리포트보다 worked example을 더 환영한다"고 명시. 실제 코퍼스에 graphify를 돌리고, 결과물을 worked/{slug}/에 넣고, 정직한 review.md(잘 맞춘 것·틀린 것)를 같이 PR로 보내라는 정책이다. 오픈소스 품질을 사용 사례 기반으로 강제하는 영리한 패턴.

관찰 4 / 4

security.py가 별도 모듈

URL/path/label 검증 함수가 한 곳에 모여 있다. 모든 외부 입력은 여기를 거친다. validate_url()은 http/https만 통과, _NoFileRedirectHandler는 file:// 리다이렉트 차단, validate_graph_path()는 graphify-out/ 안에서만 허용, sanitize_label()은 컨트롤 문자 제거. 작은 라이브러리치고는 보안 의식이 높다.

6무엇을 배울 수 있나

이 레포를 뜯어보면서 가져갈 수 있는 기술 학습 포인트.

1. tree-sitter 기반 정적 분석

정규식으로 함수 이름 찾기에서 졸업하고 싶다면 graphify의 extract.py가 좋은 교본이다. tree-sitter Python API → AST 노드 워킹 → 함수 정의·호출 수집의 패턴이 25개(기본) 언어에 반복 적용돼 있어, 새 언어 추가 = 같은 패턴 한 번 더 쓰기다.

실습 아이디어: 좋아하는 마이너 언어(Crystal, Nim, Roc 같은)에 tree-sitter 바인딩이 있다면 그걸 graphify에 PR로 추가해 보기. ARCHITECTURE.md의 "Adding a new language extractor" 5단계 가이드대로 하면 200줄 미만이다.

2. NetworkX + 커뮤니티 탐지

NetworkX는 파이썬 그래프의 사실상 표준인데, 단순 BFS/DFS만 쓰고 그치는 사람이 많다. graphify는 Leiden 알고리즘으로 자동 클러스터링 → 중심성으로 god node 찾기 → 부분 그래프(subgraph) 추출까지 한 사이클을 보여준다.

실습 아이디어: 본인 슬랙 채널의 사용자·메시지를 노드/엣지로 만들어서 "친밀한 그룹"을 Leiden으로 찾아보기. graphify의 cluster.py 구현을 그대로 베껴 쓸 수 있다.

3. SKILL.md 표준

Anthropic이 정한 Agent Skills 표준은 2025년 후반부터 빠르게 자리잡고 있다. graphify의 skill.md 파일을 열어보면 YAML frontmatter (name + description) + Markdown 본문 단순 구조에 어시스턴트가 "언제·어떻게" 이 스킬을 트리거할지 다 적혀 있다. 한 번 만들면 18개 도구가 호환한다.

실습 아이디어: 본인이 자주 반복하는 작업 한 가지를 골라 SKILL.md 한 장으로 만들어 .claude/skills/에 넣어보기. graphify install 코드를 따라하면 다른 도구들도 동시에 등록할 수 있다.

4. MCP 서버 구현

serve.py약 1300줄 규모의 MCP 서버 구현 샘플이다. 핵심 서버 등록부(tool 이름·파라미터 스키마 정의 부분)만 먼저 읽는 것을 권장한다. query_graph, get_node, get_neighbors, get_community, god_nodes, graph_stats, shortest_path, list_prs, get_pr_impact, triage_prs — 10개 도구를 노출한다.

실습 아이디어: 본인이 만든 작은 데이터셋(예: 책장 데이터, 가계부)을 MCP 서버로 노출해서 Claude Desktop에 등록. mcp__로컬서버명__query가 어시스턴트 도구 목록에 뜬다.

5. pip extras 의존성 트리

graphify의 pyproject.toml"기본은 가볍게, 필요하면 확장"의 모범 사례다. PDF 안 쓸 사람한테 pypdf를 안 깐다. video 안 쓸 사람한테 faster-whisper(1GB+)를 안 깐다. [project.optional-dependencies]에 14개 extras 정의가 있다.

실습 아이디어: 본인의 파이썬 도구 패키지를 만들 때 이 구조를 따라하기. pip install mytool[heavy] 패턴은 사용자 경험을 크게 바꾼다.

6. 백엔드 어댑터 패턴

코드 추출은 로컬, 의미 추출만 LLM. 그리고 LLM은 8개 백엔드(claude / gemini / openai / deepseek / kimi / ollama / bedrock / claude-cli) 중 하나를 골라 쓸 수 있다. 사용자가 어떤 모델 구독을 갖고 있어도 작동한다 — 벤더 락인 0의 설계.

실습 아이디어: 본인 도구도 OpenAI 단일이 아니라 --backend 옵션으로 분기 가능하게 만들어 보기. 어차피 OpenAI 호환 API는 통일된 형식이라 어댑터 1개당 30줄 미만이다.

7. Git hook + 머지 드라이버

graphify hook installpost-commit/post-checkout 훅 + git 머지 드라이버를 자동 설치한다. 머지 드라이버는 잘 알려지지 않은 git 기능인데, .gitattributes로 특정 파일 패턴에 커스텀 머지 로직을 지정할 수 있다. 자동 생성 파일이 충돌 나는 문제를 깔끔히 해결한다.

실습 아이디어: CHANGELOG.md, package-lock.json 같이 자주 충돌나는 파일에 머지 드라이버를 직접 짜보기.

7하드웨어·시스템 요구사항

노트북에서 다 돈다. 단, 영상 처리에는 GPU가 있으면 편하다.

요구사항최소권장비고
Python3.10+3.12tree-sitter는 3.10에서도 잘 돈다. 단, leiden extras는 3.13에서 빠짐.
OSmacOS / Linux / WindowsWindows는 /graphify . 대신 graphify . (PowerShell은 /를 path separator로 해석).
RAM4GB16GB5만 노드 이상은 HTML 시각화가 무겁다. 그땐 --no-viz.
디스크~200MB 패키지1~5GB (전체 extras)faster-whisper 모델이 가장 무겁다.
GPU불필요NVIDIA GPU (CUDA)영상 전사할 때 faster-whisper가 GPU 가속을 받는다. 영상 처리 안 하면 GPU 불필요.
설치 도구pipuv 또는 pipxPATH 설정 자동, CLI를 격리된 venv에 깐다.

플랫폼별 빠른 설치

# macOS
brew install python@3.12 uv
uv tool install graphifyy

# Windows
winget install astral-sh.uv
uv tool install graphifyy

# Ubuntu/Debian
sudo apt install python3.12 python3-pip pipx
pipx install graphifyy

# 검증
graphify --version
graphify install        # AI 어시스턴트에 스킬 등록
함정
`graphify: command not found`

plain pip install로 깔면 ~/.local/bin 같은 곳에 들어가는데 PATH에 안 잡혀 있을 수 있다. uv tool install 또는 pipx install을 쓰면 PATH가 자동 설정된다.

해결책
우회로 — `python -m graphify`

PATH가 안 잡혀 있어도 python -m graphify .처럼 모듈로 직접 호출하면 항상 작동. graphify가 __main__.py를 제공한다.

8직접 해볼 실습 과제

난이도별 5개 — 30분짜리부터 한 주짜리까지.

★☆☆☆☆ · 30분

과제 1. 본인 프로젝트로 그래프 만들기

uv tool install graphifyy → 본인 GitHub 레포 하나 골라서 graphify .. graphify-out/graph.html을 브라우저로 열어보고, 가장 큰 god node가 뭔지 확인. 예상과 다르면 왜 다른지 짚어보기.

★★☆☆☆ · 1~2시간

과제 2. PDF 논문 + 코드 합치기

pip install "graphifyy[pdf]". 본인이 구현해 본 논문(예: Transformer "Attention Is All You Need")을 PDF로 받고, graphify add https://arxiv.org/abs/1706.03762 → 본인의 구현 코드와 같은 폴더에 두고 graphify .. "논문 어느 단락이 어느 구현 함수와 연결되는지"를 그래프에서 직접 확인.

★★★☆☆ · 반나절

과제 3. MCP 서버로 띄우고 Claude Desktop에서 질의

pip install "graphifyy[mcp]" 설치 후 python -m graphify.serve graphify-out/graph.json. Claude Desktop의 claude_desktop_config.json에 MCP 서버 등록. 그 다음 Claude에 "이 코드베이스에서 결제 로직과 로깅이 어디서 만나?"라고 물어보고, 일반 컨텍스트만 줬을 때와 답이 어떻게 다른지 비교.

★★★★☆ · 하루

과제 4. 본인 PR 워크플로에 hook 붙이기

본인이 정기적으로 작업하는 레포에 graphify install + graphify hook install. 매 커밋마다 그래프가 자동 재빌드되도록. 한 주 운영하면서 graphify prs --triage로 PR 우선순위 자동 정렬을 받아보고, 사람 직관이랑 비교. graph 기반 PR 우선순위가 실제로 도움이 되는지 검증.

★★★★★ · 1주

과제 5. 새 언어 익스트랙터를 PR로 보내기

graphify에 아직 없는 언어(예: Crystal, Nim, Roc, Gleam) 중 tree-sitter 바인딩이 있는 것을 골라서 extract_새언어()를 ARCHITECTURE.md의 5단계대로 추가. tests/fixtures/sample.새언어 + tests/test_languages.py 케이스 함께. PR을 보내고, 리뷰 댓글을 받아본다. 실제 활성 오픈소스 메인테이너와 리뷰 사이클을 경험하는 게 목적.

9심화 학습 로드맵

graphify에서 나아갈 4주 코스.

1주차 — graphify 사용에 익숙해지기

2주차 — graph 자료구조와 알고리즘 복습

3주차 — tree-sitter와 정적 분석

4주차 — MCP·SKILL.md·에이전트 통합

10핵심 키워드 사전

이 글에 나온 전문 용어 한 번 더 정리.

키워드한 줄 정의
ASTAbstract Syntax Tree. 소스코드를 문법 규칙대로 분해한 트리. 정규식과 달리 들여쓰기·주석에 안 휘둘림.
tree-sitter증분 파싱(incremental parsing)이 빠른 AST 라이브러리. 25개(기본) / 36개(extras 포함) 언어 바인딩.
Knowledge Graph노드(엔티티) + 엣지(관계)로 도메인 지식을 표현한 그래프.
RAGRetrieval-Augmented Generation. LLM이 답하기 전에 외부 자료를 검색해서 컨텍스트로 넣는 기법.
GraphRAG벡터 청크 대신 그래프 부분 그래프를 검색해서 넣는 RAG의 변형.
MCPModel Context Protocol. LLM ↔ 도구 호출을 표준화한 Anthropic의 규약 (2024.11).
Agent Skill / SKILL.md어시스턴트가 자동 발견·트리거하는 외부 도구 정의 파일.
Leiden 알고리즘그래프 커뮤니티 탐지 알고리즘. Louvain의 끊어진 커뮤니티 문제 해결.
NetworkX파이썬의 그래프 자료구조·알고리즘 표준 라이브러리.
God Node그래프에서 중심성이 매우 높은 노드. 대개 코드의 핵심 추상 또는 유틸리티 모듈.
Surprising Connection서로 다른 모듈/파일에 있는데 의외로 연결되어 있는 두 노드.
Confidence TagEXTRACTED / INFERRED / AMBIGUOUS — 관계의 신뢰도 라벨. graphify가 답에 자신감을 명시하는 방식.
uv / pipxPython CLI 도구를 격리된 venv에 설치하고 PATH를 자동 설정. uv는 Rust 기반으로 매우 빠름.
faster-whisperOpenAI Whisper를 CTranslate2로 4~5배 가속한 로컬 음성 인식 모델.
Obsidian Vault마크다운 + [[wiki link]] 기반 노트 앱. graphify는 그래프를 Obsidian 볼트로 내보낼 수 있다.
Neo4j대표적인 그래프 데이터베이스. graphify는 --neo4j-push로 직접 적재 가능.
Mermaid텍스트로 다이어그램을 그리는 마크다운 확장. graphify는 callflow를 Mermaid로 출력.
Penpaxgraphify 팀(graphifylabs.ai)이 만드는 상위 제품. 코드뿐 아니라 미팅·이메일·브라우저 히스토리까지 그래프화.
실용 가이드

지금 시도해볼 만한 것들

  1. 30분짜리 첫 실험. 본인이 잘 아는 프로젝트(20~100 파일)에 uv tool install graphifyygraphify . 한 번. graphify-out/graph.html 브라우저로 열어서 god node 5개를 확인. 본인 직관과 얼마나 맞는지 보면, graphify가 본인 코드에서 정확한지 30분 만에 가늠된다.
  2. 본인 코딩 어시스턴트에 등록. graphify install 한 줄로 사용 중인 도구에 스킬을 등록. 다음에 코드 질문을 할 때 /graphify .가 자동으로 호출되는지 확인. 어시스턴트의 답 품질이 어떻게 바뀌는지 한 주 관찰.
  3. SKILL.md 한 장 직접 써보기. 본인이 자주 반복하는 작업(예: "이 회의록 → 액션 아이템 추출") 하나를 골라 SKILL.md로 정의해서 .claude/skills/에 넣어보기. graphify의 skill.md를 템플릿 삼아 시작하면 빠르다. 이 한 번의 경험으로 "Agent Skill"이 무엇인지 완전히 체득된다.
  4. 코드와 문서를 같이 그래프화. pip install "graphifyy[pdf]"를 깐 뒤, 본인 프로젝트의 코드와 관련 사양서/논문 PDF를 같은 폴더에 두고 graphify .. "구현이 사양과 어디서 어긋나는가"라는 거의 모든 엔지니어가 평생 겪는 질문에 그래프가 답해준다.
  5. 한 번은 ARCHITECTURE.md를 처음부터 끝까지 읽기. 80줄짜리 짧은 문서지만, "모듈 = 함수 1개", "신뢰도 라벨", "stateless pipeline" 같은 설계 결정의 실물을 한 페이지에 압축해 두었다. 본인이 다음에 만들 도구의 README/ARCHITECTURE를 어떻게 쓸지 모범 사례가 된다.
원문 · safishamsi/graphify (v8 branch), v0.8.16 — 2026-05-22 · github.com/safishamsi/graphify