On this page
자바스크립트 데드 코드 제거
On this page
왜 데드코드를 관리해야 하는가?
- 유지보수시 방해가 된다.
- 불필요하게 export하는 변수가 많으면 IDE에서 자동 import할 때 속도도 느려지고, 비슷한 심볼들이 많아지면 개발자로 하여금 헷갈리게 하는 방해요소가 된다.
- 신규 동료가 합류하게 되는 경우 인지해야할 요소들이 불필요하게 늘어난다.
- 소나큐브같은 정적 코드 분석 툴을 사용할 때 정말 개선이 필요한 부분이 아닌데 검사의 대상이 된다.
데드코드 정리 도구 활용
ts-prune
- 사용되지 않고 있는 export된 변수를 찾아준다.
- 2023-10-14 기준 maintanence mode가 되었기 때문에 비추
ts-prune -p tsconfig.json // tsconfig 설정파일 전달
사용후기
- 사용되고 있는 변수도 결과에 나오는 경우가 있다.
- export 됐지만, 파일 외부에서는 사용하지 않고 내부에서 사용하는 경우도 결과에 나온다. (해당 정보를 필터링하는 옵션이 최근 추가됐다.)
- index.ts에서 한번에 묶어서 export하는 경우 잡히지 않음
export { default as PositionDraftRequestDto } from './PositionDraftRequestDto';export { default as PositionFindResponseDto } from './PositionFindResponseDto';
ts-remove-unused
- 명령어를 실행하면 사용되지 않는 코드를 찾아 제거해 준다.
- line에서 공개한 오픈소스이다
사용후기
--skip옵션으로 ignore할 파일을 지정할 수 있으나 하나하나 찾아 설정해줘야하는 점이 불편했다.- 예) 리액트 최상위 파일 App.tsx 라거나 schema.tsx 등..
- 실제로 사용하는 부분이 있음에도 지워지는 경우가 있었다.
knip
- ts-prune 메인테이너가 추천하는 도구이다.
- 사용되지 않는 파일, 변수, 타입, 의존성 등을 찾아주고 export된 것중에 이름이 겹치는 것도 알려줌
- 설정파일에 애플리케이션의 엔트리 파일들, 검사에 포함할 파일들에 대한 필터링을 할 수 있다.
import type { KnipConfig } from 'knip';const config: KnipConfig = {entry: ['src/index.ts'], // 애플리케이션이 시작될 때 엔트리 포인트가 되는 부분 설정가능project: ['src/**/*.ts'],};export default config;
- 프레임워크별로 기본 설정 세팅을 제공해주고 있다.
fallow
- Rust로 만든 단일 바이너리라 TypeScript 컴파일러나 Node 런타임 없이 정적 분석이 돌아간다. 같은 입력이면 항상 같은 결과가 나온다.
- 사용되지 않는 파일 / export / 타입 / enum·클래스 멤버 / 의존성에 더해 순환 의존성, 코드 중복, 복잡도, 아키텍처 경계 위반까지 한 번에 본다.
npx fallow dead-code --format json // 데드코드 + 순환 의존성 분석npx fallow audit // 변경된 파일만 게이트 (PR 단계 검사)npx fallow fix --dry-run // 자동 정리 미리보기
fallow fix는 unused export, unused dependency, unused enum member를 자동 제거하고 중복 export 규칙을 config에 추가해준다.fallow migrate로 knip / jscpd / stylelint 설정을 그대로 옮겨올 수 있다.fallow-mcpMCP 서버와 에이전트용 skill을 같이 배포한다. 에이전트가 grep으로 추측하는 대신 "이 심볼을 누가 import 하는지"를 구조화된 형태로 물어볼 수 있다.- 정적 분석기 자체는 MIT지만, 런타임 실행 정보를 붙이는 Fallow Runtime은 유료다.
- 2026-07 기준 활발히 유지보수되고 있다. (v3.9.1)
이외 도구들
- https://www.npmjs.com/package/find-unused-exports
- https://www.npmjs.com/package/unimported
- https://github.com/sweepline/eslint-plugin-unused-imports
예방하기
개발하는 중간중간 정적분석 도구를 사용해 데드코드가 생기는걸 미리 방지하는것이 제일 좋다고 생각한다. eslint를 활용해 사용되지 않는 코드가 존재하는 경우 warning이나 error가 발생하도록 하자.
- https://eslint.org/docs/rules/no-constant-condition
- https://eslint.org/docs/rules/no-unused-vars
- https://eslint.org/docs/rules/no-unreachable
Tags
Edit this page
최근 수정 시각 7/27/2026