# Gradle 빌드 최적화 Gradle은 강력한 빌드 도구이지만, 프로젝트가 커질수록 빌드 시간이 길어지는 문제가 발생할 수 있다. 이 글에서는 **Gradle 빌드 성능을 최적화하는 방법**을 소개한다. Gradle 빌드는 여러 단계(초기화, 구성, 실행)를 거치며 실행된다. 빌드 속도를 개선하려면 다음 요소를 고려해야 한다. - **불필요한 작업 제거**: 변경된 파일만 다시 빌드 - **병렬 실행 활용**: 멀티코어 CPU 활용 - **의존성 관리 최적화**: 캐시 사용 및 중복 제거 - **Gradle 자체 설정 최적화**: 빌드 캐시, 데몬, 워커 설정 ## 불필요한 작업 방지 (`UP-TO-DATE`, `INCREMENTAL`, `CACHE`) Gradle은 빌드를 최적화하기 위해 **변경된 파일만 다시 빌드**하는 기능을 제공한다. ### UP-TO-DATE 체크 Gradle은 이전 빌드와 비교하여 변경되지 않은 작업을 건너뛴다. ```sh ./gradlew build ``` 출력 로그에서 ```sh Task :compileJava UP-TO-DATE ``` 와 같은 메시지가 나오면, 해당 작업이 **이전과 동일하여 재실행되지 않았음**을 의미한다. #### 수동으로 캐시 삭제 (강제 실행) ```sh ./gradlew clean build ``` 이렇게 하면 모든 파일을 다시 빌드한다. 하지만, 매번 `clean`을 실행하는 것은 빌드 최적화에 도움이 되지 않는다. ### 증분 빌드 (Incremental Build) 특정 작업에서 변경된 파일만 처리하도록 `@InputFiles`, `@OutputFiles` 등을 활용할 수 있다. ```kotlin tasks.register("copyTask") { from("src") into("dest") } ``` 이렇게 설정하면, `src` 폴더의 파일이 변경되지 않으면 작업을 재실행하지 않는다. ### 빌드 캐시 활용 빌드 캐시는 이전 빌드 결과를 저장하여 다시 사용할 수 있도록 한다. ```sh ./gradlew build --build-cache ``` Gradle 설정 파일(`gradle.properties`)에 빌드 캐시를 활성화할 수도 있다. ```properties org.gradle.caching=true ``` ## 병렬 빌드 및 워커 설정 Gradle은 기본적으로 여러 작업을 병렬로 실행할 수 있다. ### 병렬 실행 활성화 멀티 프로젝트 빌드에서 병렬 실행을 활성화하면 속도가 크게 향상될 수 있다. ```sh ./gradlew build --parallel ``` 또는 `gradle.properties`에서 설정할 수도 있다. ```properties org.gradle.parallel=true ``` ### Gradle 데몬 사용 Gradle 데몬(Daemon)은 빌드 속도를 높이는 데 중요한 역할을 한다. ```sh ./gradlew --daemon ``` 또는 `gradle.properties`에서 설정 가능하다. ```properties org.gradle.daemon=true ``` ### 워커 수 증가 멀티코어 CPU를 활용하여 빌드 속도를 높일 수 있다. ```properties org.gradle.workers.max=4 ``` 시스템 성능에 맞게 적절한 값을 설정하면 된다. ## 의존성 관리 최적화 ### 불필요한 의존성 제거 불필요한 의존성이 많으면 빌드 속도가 느려진다. `dependencies` 블록을 점검하여 불필요한 라이브러리를 제거한다. ```kotlin dependencies { implementation("com.example:unused-library:1.0.0") // 제거 필요 } ``` ### `dependencyResolutionManagement` 설정 `settings.gradle.kts`에서 **의존성 해석을 최적화**할 수 있다. ```kotlin dependencyResolutionManagement { repositories { mavenCentral() } } ``` 이렇게 하면 Gradle이 중복된 의존성을 다운로드하지 않는다. ### 로컬 캐시 활용 의존성을 매번 다운로드하지 않도록 로컬 캐시를 활용할 수 있다. ```sh ./gradlew build --offline ``` 이렇게 하면 인터넷 없이 로컬에 있는 의존성만 사용한다. ## 실행 시간 분석 및 프로파일링 Gradle의 `--scan` 옵션을 사용하면 빌드 성능을 분석할 수 있다. ```sh ./gradlew build --scan ``` 또한, `--profile` 옵션을 사용하면 빌드 시간 프로파일을 확인할 수 있다. ```sh ./gradlew build --profile ``` 생성된 `build/reports/profile` 폴더에서 상세한 분석 결과를 확인할 수 있다.