피드로 돌아가기
Dev.toBackend
원문 읽기
Sequential Await 제거 및 Promise.allSettled 도입을 통한 CLI 스캔 속도 최적화
My CLI was slow — then I stopped awaiting everything
AI 요약
Context
다수 프로젝트의 취약점을 분석하는 CLI 도구에서 await를 루프 내부에 배치한 Sequential 처리 구조 채택. 이로 인해 이전 작업 완료 전까지 다음 작업이 대기하는 병목 현상 발생 및 전체 실행 시간의 불필요한 증가 초래.
Technical Solution
await기반의 순차 실행 구조를 Promise 배열 기반의 Concurrent 실행 구조로 변경Promise.all을 통한 병렬 요청 처리로 I/O 대기 시간 최소화 및 처리 속도 개선- 단일 Promise 실패 시 전체 작업이 중단되는
Promise.all의 Fail-fast 특성 식별 Promise.allSettled로 교체하여 개별 작업의 성공/실패 여부와 관계없이 모든 분석 결과 수집 가능 구조 설계- 에러 핸들링을 위해 내부 함수가 명확한 Reject를 반환하도록 로직 수정하여 상태 추적 정밀도 향상
실천 포인트
1. 루프 내부 `await` 사용 시 작업 간 의존성 유무 확인
2. 독립적 비동기 작업의 경우 `Promise.all` 또는 `Promise.allSettled` 검토
3. 부분적 실패가 전체 시스템의 가용성에 영향을 주는지 분석하여 적절한 Promise 메서드 선택
4. 비동기 래퍼 함수 설계 시 적절한 Error Throwing/Reject 처리를 통해 상태 값의 정확성 확보