"매 import graph 가 매 codebase 의 X-ray". 매 Madge / dependency-cruiser / Knip / depcheck 가 매 dead code, circular deps, layering violations, unused packages 의 surface. 2026 의 매 Knip + dependency-cruiser + Turbo's prune 가 매 monorepo standard combo.
매 핵심
매 question types
Module-level: who imports X? what does X import?
Package-level: which deps are unused? which are dev-only mislabeled?
Architectural: 매 cross-layer 의 import 가 있나?
Cycles: 매 circular dependency.
Reachability: 매 entry-point 의 reachable X 의 dead code.
매 tool matrix
Madge — 매 visualization, circular detection (JS/TS).
dependency-cruiser — 매 rules engine + violations CI.
Knip — 매 unused files/exports/deps (replaces ts-prune + depcheck).
depcheck — 매 unused npm deps (older, Knip 가 better).
ts-morph / typescript-eslint — 매 custom AST analyzer.
Nx graph / Turborepo prune — 매 monorepo affected detection.
매 응용
CI guard — 매 layer violation 시 fail.
Dead-code removal — 매 quarterly cleanup.
Bundle reduction — 매 unused dep removal → smaller install + lockfile.
Refactor planning — 매 high-fan-in module 의 identify.
License audit — 매 transitive dep tree.
💻 패턴
Madge 의 circular detection
npx madge --circular --extensions ts,tsx src/
# 매 circular 가 있으면 fail.
npx madge --image graph.svg src/
# 매 SVG 의 visualization.
언제: 매 dependency-cruiser rule synthesis from architecture description, 매 Knip output 의 triage (which 의 truly unused), 매 graph interpretation.
언제 X: 매 actual dead-code removal 의 PR (false positive 의 review 필요). 매 production runtime decisions.
❌ 안티패턴
Run only locally: 매 CI guard 가 X — 매 violation 의 sneak in.
Knip 의 trust blindly: 매 dynamic require / framework convention 가 false-positive — ignore glob 사용.
No layer rules: 매 architecture 가 silently rot.
Visualization only: 매 SVG 가 cool 가, 매 enforcement 가 X.