Android CI 빌드 속도 1분대로 줄여보기

2026. 1. 6. 23:28·Android

하이링구얼 프로젝트는 규모가 커짐에 따라 오타 수정 같은 경미한 변경에도 빌드 시간이 평균 10분~14분 소요되어 개발 효율이 저하되는 문제가 발생했어요.

이를 해결하기 위해 Gradle 설정과 GitHub Actions 워크플로우를 최적화하여 빌드 시간을 1분대로 단축한 과정을 공유해요.

1. 병목 원인 분석

빌드 로그를 분석한 결과, 성능 저하의 주원인은 두 가지였어요.

  1. Gradle 설정 미흡: 병렬 빌드나 캐싱 같은 핵심 성능 옵션이 꺼져 있어 시스템 자원을 효율적으로 쓰지 못하고 있었어요.
  2. CI 캐싱 전략 부재: 기존 actions/cache는 Gradle의 복잡한 의존성 구조를 섬세하게 다루지 못해, 라이브러리 하나만 바뀌어도 캐시가 깨져(Miss) 매번 새로 다운로드해야 했어요.

2. 해결 방법

2.1. Gradle 빌드 환경 튜닝

기존에 주석 처리되어 있거나 비활성화되어 있던 성능 옵션을 켰어요. 이 설정만으로 로컬과 CI 환경 모두에서 빌드 속도를 높일 수 있어요.

# 독립적인 모듈을 병렬로 빌드하여 CPU 활용도를 높여요
org.gradle.parallel=true

# 빌드 결과물(Task Output)을 캐시하여 재사용해요
org.gradle.caching=true

# 필요한 모듈만 구성(Configuration)하여 초기화 시간을 단축해요
org.gradle.configureondemand=true

2.2. GitHub Actions 개선하기

직접 캐시 키를 관리해야 했던 actions/cache를 제거하고, Gradle 공식 액션인 setup-gradle로 교체했어요. 또한, PR 빌드에서도 캐시를 활용할 수 있도록 기준캐시를 적용했어요.

  1. 트리거 추가: develop 브랜치에 코드가 푸시될 때도 CI를 실행하여 PR이 참고할 수 있는 최신 캐시를 미리 생성하도록 했어요.
  2. 액션 교체: gradle/actions/setup-gradle을 사용하여 의존성과 빌드 캐시를 자동으로 관리하도록 했어요.
name: Hilingual PR CI

on:
  pull_request:
    branches: [ develop, main ]
  # [핵심] develop 브랜치가 업데이트될 때 실행하여 '기준 캐시'를 갱신해요
  push:
    branches: [ develop ]

jobs:
  lint:
    steps:
      - name: Checkout
        uses: actions/checkout@v6

      # [변경] actions/cache 대신 setup-gradle 사용
      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v4
      # ... (이하 생략)

3. 개선 결과

최적화 적용 후 성능변화가 유의미 했는지를 봐야겠죠?

3.1. 캐시 히트 유무에 따른 차이

develop 브랜치에 기준 캐시가 없을 때와 생성된 직후의 빌드 시간을 비교했어요. setup-gradle이 의존성과 빌드 결과를 효과적으로 복원하면서 시간이 약90% 단축되었어요.

구분 상태 소요 시간 분석
Attempt 1 Cold Start 13분 14초 기준 캐시가 없어 모든 라이브러리를 새로 다운로드함
Attempt 2 Hot Start 1분 27초 기준 캐시 생성 직후 재실행하여 캐시 히트 성공

3.2. 기존 방식 vs 개선된 방식 비교

정확히 동일한 작업을 수행하는 두 개의 PR을 비교하여 설정 최적화 효과를 검증했어요.

구분
PR 내용 소요 시간 환경설정
개선 전 #908 (Re-run) 12분 23초 actions/cache 사용, 병렬 빌드 OFF
개선 후 #917 1분 24초 setup-gradle 사용, 병렬 빌드 ON
결과 88% 단축 약 10.8배 속도 향상 단순 라이브러리 업데이트 검증에 12분을 쓸 필요가 없어짐

3.3. QA 배포 속도의 낙수 효과

develop 브랜치의 캐시를 공유하는 구조 덕분에 PR뿐만 아니라 APK 배포 시간 또한 16분대에서 2분대로 단축되었어요.

버전(태그)
 소요 시간  단축률  
v2.1.0 16분 2초 - 캐시 미적용
v2.1.1 2분 41초 83% develop 브랜치 캐시 활용

4. 마무리

이번 CI 속도 개선 작업은 Gradle의 동작 원리와 GitHub Actions의 캐싱을 이해하고 조율한 결과예요.

결과적으로 팀 전체의 개발 생산성이 획기적으로 향상되었으며 더 빠른 주기로 코드를 통합하고 검증할 수 있는 환경이 마련되었어요.

빠른 작업이 필요하거나 CI 검증에 시간을 많이 뺏긴다고 체감하신 분들에게 도움이 되었으면 합니다 🙂

'Android' 카테고리의 다른 글

OkHttp Authenticator에서 runBlocking 없이 토큰 갱신하기  (0) 2025.11.27
Credential Manager로 로그인이 안돼요. 이유는 몰라요  (2) 2025.11.18
[Android] 앱을 배포해 봅시다.  (0) 2025.10.02
[Android] 컨벤션 플러그인 뜯어고치기  (0) 2025.09.25
[Android] Baseline Profile 적용기 feat. Fake 주입 실패  (0) 2025.09.23
'Android' 카테고리의 다른 글
  • OkHttp Authenticator에서 runBlocking 없이 토큰 갱신하기
  • Credential Manager로 로그인이 안돼요. 이유는 몰라요
  • [Android] 앱을 배포해 봅시다.
  • [Android] 컨벤션 플러그인 뜯어고치기
한민돌
한민돌
Android 개발자가 되기까지.
  • 한민돌
    미래 가젯 연구소
    한민돌
  • 전체
    오늘
    어제
    • 분류 전체보기 (24)
      • Android (7)
        • Compose (10)
        • Jetpack (2)
      • Kotlin (2)
      • 외부 활동 (3)
        • 우아한테크코스 8기 (3)
  • 블로그 메뉴

    • 홈
    • 안드로이드
    • 태그
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    jetpack
    Retrofit
    LaunchedEffect
    우테코
    Gradle
    runcatching
    coroutine
    compose
    Android
    sideeffect
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
한민돌
Android CI 빌드 속도 1분대로 줄여보기
상단으로

티스토리툴바