피드로 돌아가기
Dev.toDevOps
원문 읽기
Async Parallel Scanning으로 12GB SSD 공간을 확보한 ZapDir 설계
I reclaimed 12GB from my SSD with one terminal command (and you can too)
AI 요약
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 적용