빌드 분석 도구를 사용하여 빌드 성능 문제 해결

빌드 분석 도구를 사용하여 프로젝트의 빌드 성능을 검사할 수 있습니다. 빌드 성능은 빌드 간에 변경될 수 있는 여러 요소의 영향을 받을 수 있습니다. 빌드 분석 도구는 개발자가 실행하는 각 빌드에 관한 가장 중요한 정보를 제공해 빌드 성능에서 회귀를 빠르게 식별하고 해결할 수 있도록 합니다.

이 페이지에서는 빌드 분석 도구를 간략히 설명하고 도구를 사용하여 프로젝트의 빌드 성능을 개선하는 방법을 안내합니다. 빌드 성능 향상에 관한 추가 전략은 빌드 속도 최적화를 참고하세요.

분석 도구에서 제공하는 데이터는 각 빌드에 따라 다릅니다. 특히 크고 복잡한 빌드의 경우 여러 요소가 빌드 간에 변경될 수 있고, 이에 따라 분석 도구에서 개발자에게 빌드 기간의 중요한 요소로 제시하는 데이터가 달라집니다. 따라서 프로젝트를 여러 번 빌드하고 분석 도구의 데이터를 비교하여 패턴을 식별하는 것이 유용할 수 있습니다.

시작하기

앱을 빌드할 때마다 빌드 분석 도구가 보고서를 만들고 Build 창에 최신 보고서의 데이터를 표시합니다.

시작하려면 다음 단계를 따르세요.

  1. 아직 앱을 빌드하지 않았다면 다음 방법 중 하나로 앱을 빌드합니다.
    • 메뉴 바에서 Build > Make Project를 클릭합니다.
    • Android App Bundle 또는 APK를 빌드하려면 메뉴 바에서 Build > Build Bundle(s) / APK(s) > Build Bundle(s) 또는 Build > Build Bundle(s) / APK(s) > Build APK(s)를 클릭합니다.
  2. Build 창을 열려면 메뉴 바에서 View > Tool Windows > Build를 선택합니다.
  3. 빌드 분석 도구에서 빌드 보고서를 보려면 Build 창에서 Build Analyzer 탭을 클릭합니다.

빌드 기간을 결정하는 작업이 포함된 플러그인 보기

빌드를 완료한 후 빌드 분석 도구를 처음 열면 창에는 그림 1과 같이 빌드 분석 개요가 표시됩니다.

그림 1. 분석 결과를 요약하여 제공하는 빌드 분석 도구 개요 페이지

빌드 기간을 결정하는 작업이 포함된 플러그인 분석을 보려면 개요 페이지에서 Plugins with tasks impacting build duration을 클릭하세요. 드롭다운에서 Tasks를 선택하여 Group by plugin이 선택되어 있는지 확인할 수도 있습니다.

그림 2. 빌드 기간에 가장 큰 원인이 되는 플러그인의 분석 내용을 제공하는 빌드 분석 도구

작업 창에는 빌드 기간에 기여하는 작업이 표시됩니다. 문제가 있는 작업에는 옆에 경고 아이콘이 표시됩니다.

그래프에는 작업이 전체 빌드 기간에 기여한 정도가 표시됩니다.

세부정보 창에는 선택된 작업에서 감지된 문제에 관한 자세한 정보가 표시됩니다.

각 노드에는 노드의 직접적인 하위 요소를 실행하는 데 걸린 총 시간이 표시됩니다. 이러한 기간을 통해 빌드 기간에 가장 큰 영향을 미치는 작업을 검사하는 것에 집중할 수 있습니다.

빌드 기간을 결정하는 작업 보기

빌드 기간에 기여하는 작업 분석 결과를 확인하려면 개요 페이지에서 Tasks impacting build duration을 클릭합니다. 드롭다운에서 Tasks를 선택하여 Group by plugin이 선택 해제되어 있는지 확인할 수도 있습니다.

그림 3. 빌드 기간에 가장 큰 원인이 되는 작업의 분석 내용을 제공하는 빌드 분석 도구

Gradle은 작업 상호 의존성, 프로젝트 구조, CPU 로드에 따라 작업 실행을 결정하며 순차적으로 또는 동시에 작업을 실행합니다. 빌드 분석 도구는 해당 빌드에 대해 현재의 빌드 기간을 결정한 순차적으로 실행된 작업들을 강조 표시합니다. 전체 빌드 시간을 줄이려면 강조 표시된 작업의 비효율성을 해결하는 것부터 시작하는 것이 가장 좋습니다.

실행하는 빌드마다 빌드 기간을 결정하는 작업 집합이 다르게 표시될 수 있습니다. 예를 들어 빌드 구성을 변경하거나 다른 작업 집합(예: 증분 빌드)으로 빌드를 실행하거나 다양한 제약 조건에서 빌드를 실행하면 Build Speed 창에는 해당 빌드의 기간에 가장 큰 영향을 미친 다른 작업 집합이 강조 표시될 수도 있습니다. 이러한 변동성 때문에 여러 빌드에서 Build Speed 창을 사용하여 빌드 기간을 일관되게 줄이는 것이 좋습니다.

나열된 각 작업은 다음과 같이 색상으로 구분됩니다.

  • 연한 파란색: 이 작업은 Android Gradle 플러그인, 자바 Gradle 플러그인 또는 Kotlin Gradle 플러그인에 속합니다.
  • 파란색: 이 작업은 서드 파티 또는 맞춤 플러그인(예: Android 스튜디오를 사용하여 새 프로젝트를 만든 후 적용한 플러그인)에 속합니다.
  • 보라색: 이 작업은 플러그인에 속하지 않지만 런타임에 프로젝트 속성을 동적으로 수정하는 데 사용됩니다. build.gradle 파일 내에서 정의할 수 있는 작업을 예로 들 수 있습니다.
  • 회색: 분석 도구에서 강조 표시한 다른 작업과 비교하여 이 작업은 빌드 기간에 큰 영향을 미치지 않습니다.

각 하위 작업을 클릭하여 실행에 관해 자세히 알아보세요. 예를 들어 분석 도구는 상위 플러그인, 작업 유형, 이 작업의 실행을 유발한 다른 작업, 작업의 증분 실행 여부 등 추가 세부정보를 제공합니다(그림 2 참고). 분석 도구는 작업을 더 효율적으로 실행하도록 구성하는 데 도움이 되는 경고를 표시할 수도 있습니다.

검사 경고

일부 작업을 더 효율적으로 실행하도록 구성할 수 있는 경우, 빌드 분석 도구는 경고를 표시합니다.

예를 들어 적절한 Gradle API를 사용하여 입력과 출력을 지정하지 않는 작업은 증분 빌드를 활용할 수 없습니다. 빌드에 이러한 작업이 포함되어 있으면 빌드 분석 도구에서 Always-run 경고를 사용하여 표시할 수 있습니다. 입력 변경 여부와 관계없이 모든 빌드에서 실행되어야 하기 때문입니다.

분석 도구에서 빌드에 관해 파악해 낸 모든 경고를 보려면 개요 페이지에서 All warnings를 클릭하거나 드롭다운에서 Warnings를 선택합니다. Warnings 뷰에는 카테고리별로 그룹화된 경고가 표시됩니다. 예를 들어 Always-run 노드는 분석 도구에서 증분 빌드에 맞게 적절하게 구성되지 않았다고 판단하는 작업을 그룹화합니다.

하위 노드를 클릭하면 분석 도구는 경고의 특성과 문제 해결을 위해 취할 수 있는 단계를 설명합니다. 또한 작업이 프로젝트에 적용한 플러그인에 속하는 경우 그림 4와 같이 분석 도구에서 Generate report 링크를 제공합니다.

그림 4. 빌드 분석 도구 경고에 관한 자세한 정보

Generate report 링크를 클릭하면 플러그인 개발자가 새 버전의 플러그인에서 문제를 해결할 수 있는 추가 정보가 포함된 대화상자가 표시됩니다. Copy를 클릭하여 텍스트를 클립보드에 저장하면 플러그인 개발자 버그 신고에 정보를 더 쉽게 붙여넣을 수 있습니다.

경고 유형

빌드 분석 도구는 다음과 같은 경고 유형을 보고합니다.

  • Always run tasks: 항상 실행되는 작업은 모든 빌드에서 다른 작업을 실행시킵니다. 이는 불필요합니다. 이 경고가 표시될 수 있는 두 가지 주요 이유는 다음과 같습니다.

    • (일반적임) 작업 입력과 출력을 올바르게 선언하지 않았습니다. 이 경우 작업의 입력과 출력을 올바르게 선언해야 합니다. 즉, 가능한 경우 입력과 출력을 직접 선언합니다. 또는 경고를 발생시키는 작업이 서드 파티 플러그인에서 비롯되는 경우 플러그인 버전을 변경합니다.

    • (일반적이지 않음) 작업의 upToDateWhen이 false로 설정되어 있습니다. 이는 피해야 하는 설정 방식입니다. 이러한 설정은 일부 로직이 false로 평가된 경우 또는 upToDateWhen이 false로 하드코딩된 경우에만 가능합니다. false로 평가된 로직이 있다면 이 결과는 의도된 것일 수 있으므로 경고를 무시할 수도 있습니다. upToDateWhen이 false로 하드코딩된 경우 코드에서 하드코딩을 삭제해야 합니다.

  • Task setup issues: 이 경고는 출력과 동일한 디렉터리를 선언한 작업과 관련해 생성됩니다. 그러한 작업 출력이 빌드 간에 보존되지 않을 가능성이 높다는 것을 의미합니다. 그러한 작업은 변경사항이 없더라도 항상 실행됩니다. 이 경고를 해결하려면 작업의 출력 디렉터리를 다르게 선언해야 합니다. 즉, 가능한 경우 다른 출력 디렉터리를 직접 선언합니다. 또는 경고를 발생시키는 작업이 서드 파티 플러그인에서 비롯되는 경우 플러그인 버전을 변경합니다.

  • Non-incremental annotation processor: 이 경고는 주석 프로세서가 비증분 방식일 때 JavaCompile 작업이 항상 비증분 방식으로 실행되도록 하는 상황에서 발생합니다. 이 경고를 해결하려면 증분 방식의 주석 프로세서로 전환하세요.

  • Configuration cache: 이 경고는 프로젝트에 구성 캐싱이 사용 설정되지 않은 경우에 표시됩니다. 빌드 분석 도구는 빌드 시퀀스를 조회하여 프로젝트가 구성 캐싱과 호환되는지 확인합니다. 호환성 확인이 제대로 된 경우 빌드 분석 도구에서 구성 캐싱을 사용 설정할 수 있습니다.

  • Check Jetifier: 이 경고는 enableJetifier 플래그가 있고 프로젝트에 사용 설정된 경우에 표시됩니다. 즉, gradle.properties 파일에서 android.enableJetifier=true인 경우입니다. 빌드 분석 도구는 프로젝트의 빌드 성능을 높이고 관리되지 않은 Android 지원 라이브러리에서 이전하기 위해 플래그를 안전하게 삭제할 수 있는지 확인하는 검사를 실행할 수 있습니다.

다운로드의 영향 확인

빌드 분석 도구에서 종속 항목 다운로드에 소요된 시간에 관한 요약과 저장소별 다운로드에 관한 자세한 뷰를 제공합니다. 다운로드의 영향을 확인하려면 드롭다운에서 Downloads를 선택합니다.

이 정보를 사용하여 예상치 못한 종속 항목 다운로드가 빌드 성능에 부정적인 영향을 미치는지 확인할 수 있습니다. 이는 아티팩트를 일관되게 다운로드하면 안 되는 증분 빌드에서 특히 중요합니다.

특히 이 정보는 예상치 못한 다운로드를 유발하는 동적 버전의 종속 항목 사용과 같은 구성 문제를 식별하는 데 사용할 수 있습니다. 또한 특정 저장소에 관한 실패한 요청의 수가 많다면 해당 저장소를 삭제하거나 저장소 구성에서 더 아래로 이동해야 한다는 의미일 수 있습니다.

그림 5. 다운로드가 빌드 기간에 미치는 영향을 보여주는 빌드 분석 도구