피드로 돌아가기
Building repomeld: From Simple Script to Production-Ready CLI Tool
Dev.toDev.to
DevOps

Async I/O 최적화로 1만 개 파일 스캔 속도를 14배 향상시킨 CLI 설계

Building repomeld: From Simple Script to Production-Ready CLI Tool

sakshsky2026년 4월 24일5intermediate

Context

다수 파일의 수동 복사 과정으로 인한 AI 컨텍스트 제공 효율 저하 해결 필요. 초기 Synchronous 방식의 파일 스캔 구조로 인한 Event Loop 블로킹 및 Binary 파일 처리 미비로 시스템 크래시 발생.

Technical Solution

  • fs.readdirSyncfs.readdir 기반 Async Iteration으로 전환하여 I/O 병목 제거 및 동시성 확보
  • Extension Blacklist와 Content Sampling(512 bytes)을 결합한 Hybrid 방식으로 Binary 파일 식별 정확도 향상
  • path.sep 기반의 경로 정규화(Normalize) 처리를 통한 OS 간 Path 호환성 문제 해결
  • .gitignore 패턴 매칭 라이브러리 도입 및 하드코딩된 Ignore 리스트 적용으로 무한 루프 및 파일 비대화 방지
  • CLI Entry Point와 Core Logic(Scanner, Formatter, IgnoreBuilder)을 분리한 Separation of Concerns 기반 아키텍처 설계

Impact

  • 파일 스캔 성능: 10,000개 파일 기준 45초에서 3.2초로 단축
  • 문서화 보강을 통한 사용자 다운로드 수 5배 증가

- 대량 파일 처리 시 Event Loop 블로킹 방지를 위해 Async/Await 및 `Promise.all` 기반 동시 처리 검토 - OS 독립적 툴 개발 시 경로 구분자(`\` vs `/`) 정규화 프로세스 필수 적용 - Binary 파일 판별 시 확장자 체크뿐 아니라 실제 파일 헤더의 Null Byte 샘플링 검증 병행 - CI 파이프라인에 다양한 OS 환경(Windows, macOS, Linux)을 포함하여 런타임 호환성 사전 검증

원문 읽기