피드로 돌아가기
I built a Rust-based codebase analyzer that finds dead code in JS/TS projects in milliseconds
Dev.toDev.to
DevOps

I built a Rust-based codebase analyzer that finds dead code in JS/TS projects in milliseconds

Fallow이 Rust 기반 파서와 병렬 처리로 JS/TS 프로젝트의 죽은 코드를 0.16초 단위로 검출

Bart Waardenburg2026년 3월 23일10intermediate

Context

코드베이스에 축적된 미사용 파일, 미사용 export, 미사용 의존성이 번들 크기를 증가시키고 빌드 속도를 저하시키며 신규 개발자의 이해도를 낮추고 있다. 기존 도구들(knip, jscpd)은 단일 스레드 Node.js 환경에서 동작해 대규모 프로젝트에서 분석 시간이 수 초~수십 초로 길어져 CI/감시 모드에서 실용적이지 못하다.

Technical Solution

  • Oxc 파서를 Rust 네이티브로 통합: NAPI 바인딩 대신 직접 Rust에서 Oxc 파서 사용으로 파싱 오버헤드 제거
  • Rayon을 사용한 멀티코어 병렬 파일 처리: 모든 CPU 코어를 활용해 파일 구문 분석 속도 향상
  • 전체 import/export 그래프 구축: 프로젝트의 모든 파일에 걸친 모듈 그래프를 생성해 정확한 미사용 코드 탐지
  • 12가지 이슈 유형 검출: 미사용 파일/export/타입/enum 멤버/클래스 멤버, 미사용 의존성, 미해석 import, 중복 export, 순환 의존성, 코드 중복(4가지 검출 모드)
  • 84개 프레임워크 플러그인 자동 감지: Next.js, Vite, Vitest, Playwright, Storybook, ESLint, Tailwind, Prisma, Drizzle, Turborepo, Nx 등을 설정 없이 자동 인식
  • 자동 수정 기능: 미사용 export, 미사용 의존성, 미사용 enum 멤버를 자동으로 제거(dry-run 모드 지원)
  • 코드 중복 검출: suffix array 알고리즘으로 복사-붙여넣기 문제 식별(jscpd 대비 성능 향상)

Impact

  • knip v5 대비 속도: zod 34배, preact 41배, fastify 46배, vue/core 11배, TanStack/query 19배, svelte 6배 빠름
  • knip v6(Oxc 채택 후) 대비 속도: zod 18배, preact 18배 이상, fastify 12배, vue/core 5배, TanStack/query 10배, svelte 3배 빠름
  • 절대 분석 시간: 174개 파일 19ms, 244개 파일 20ms, 286개 파일 24ms, 522개 파일 63ms, 901개 파일 148ms, 3,337개 파일 325ms, 20,416개 파일 1.48초
  • jscpd 대비 코드 중복 검출 속도: zod 20배, preact 30배, fastify 34배, vue/core 26배, svelte 9배, next.js 8배 빠름
  • 메모리 사용량: knip 대비 3~15배 낮음
  • Next.js 대규모 프로젝트(20,416개 파일): 기존 도구는 크래시 발생, fallow는 1.48초에 정상 완료

Key Takeaway

Rust 네이티브 파서와 멀티코어 병렬 처리를 조합하면 Node.js 기반 도구의 근본적인 성능 한계를 극복할 수 있으며, 이는 AI 코드 생성 에이전트가 생산한 대량의 미사용 코드를 자동으로 정리해야 하는 현대적 개발 환경에서 필수적이다.


대규모 JavaScript/TypeScript 프로젝트나 모노레포를 운영하는 팀에서 CI 파이프라인에 Fallow를 통합하고 --changed-since 플래그로 PR 범위 분석 + --format json으로 자동화 연동하면, 기존 도구 대비 10배 이상 빠른 피드백으로 번들 크기 증가를 즉시 감지할 수 있다. AI 에이전트와의 연동이 필요한 경우 MCP 서버를 통해 typed tool calling 지원을 받을 수 있다.

원문 읽기