피드로 돌아가기
I reclaimed 12GB from my SSD with one terminal command (and you can too)
Dev.toDev.to
DevOps

Async Parallel Scanning으로 12GB SSD 공간을 확보한 ZapDir 설계

I reclaimed 12GB from my SSD with one terminal command (and you can too)

Mayne2026년 6월 18일4intermediate

Context

다양한 언어와 프레임워크의 빌드 아티팩트가 SSD 공간을 점유하는 문제 발생. 기존 npkill 등 단일 패턴 매칭 도구의 한계로 인해 다중 프레임워크 환경에서의 통합 관리 효율성 저하.

Technical Solution

  • fs.promises.readdir 기반의 Async Parallel Traversal을 통한 스캔 속도 최적화
  • Streaming Iterator 기반의 사이즈 계산 방식으로 대규모 폴더 처리 시 Memory Overflow 방지
  • Promise.allSettled를 활용한 삭제 로직 설계로 개별 파일 Permission Error 발생 시 전체 프로세스 중단 방지
  • 13종 이상의 Artifact Pattern 정의를 통한 Multi-ecosystem(Node.js, Rust, Python 등) 대응
  • .git 등 불필요한 경로를 배제하는 Filtering 전략으로 디렉토리 순회 오버헤드 감소
  • @clack/prompts 기반의 Interactive TUI 구현을 통한 사용자 제어권 확보

Impact

  • 단일 머신 기준 약 12GB의 디스크 공간 회수
  • 수천 개의 폴더가 포함된 홈 디렉토리 전체 스캔을 10초 이내에 완료

- 대량의 파일 시스템 순회 시 비동기 병렬 처리를 통한 I/O 바운드 병목 해결 검토 - 대규모 데이터 집계 시 메모리 효율을 위해 배열 대신 Streaming Iterator 사용 - 일괄 처리 작업 중 일부 실패가 전체 시스템 장애로 이어지지 않도록 Promise.allSettled 적용

원문 읽기