피드로 돌아가기
Dev.toInfrastructure
원문 읽기
KSP2 Incremental Processing으로 빌드 시간 112초에서 33.2초로 단축
Incremental Annotation Processing in KSP2
AI 요약
Context
500개 모듈 규모의 KMP 모노레포에서 Naive KSP 사용 시 Incremental Build의 효율성이 급감하는 병목 현상 발생. 특히 Annotation Processing 단계가 전체 빌드 시간의 상당 부분을 점유하며 개발 생산성을 저해하는 구조적 한계 노출.
Technical Solution
resolver.getAllFiles()대신resolver.getNewFiles()를 사용하여 변경된 심볼만 처리하는 Dirty-set Propagation 구현- 전역 상태 기반의 Aggregating Processor를 개별 파일 단위 Generator로 분리하여 불필요한 Multi-round Invalidation 방지
- Gradle Convention Plugin을 통한 Source Set별 Classpath Isolation 설계로 프로세서 간 버전 충돌 및 심볼 해석 오류 제거
SymbolProcessorProvider내 Project 참조를 제거하고environment.options를 통한 설정 관리로 Gradle Configuration Cache 최적화ksp.incremental.log활성화를 통한 재처리 트리거 파일의 정밀 추적 및 분석 기반 최적화 루프 구축
실천 포인트
- 프로세서 내 `getAllFiles()` 호출 여부를 전수 조사하고 `getNewFiles()`로 대체 - Aggregate 상태 기반 코드 생성 로직을 파일 단위 분산 생성 구조로 변경 - KSP 프로세서 설정을 위해 Project 객체를 캡처하는 대신 KSP Arguments 사용 - Gradle Build Scan과 `ksp.incremental.log`를 교차 분석하여 Invalidation 원인 식별