면접 질문 목록으로 가기
면접 질문실전 질문꼬리 질문

안드로이드 애플리케이션 크기 줄이기

skydovesJaewoong Eum (skydoves)||7분 소요

안드로이드 애플리케이션 크기 줄이기

안드로이드 애플리케이션의 크기를 최적화하면 다운로드 전환율, 저장 공간이 제한된 디바이스에서의 설치 성공률, 그리고 업데이트 수용률에 직접적인 영향을 미칩니다. 최종 APK 또는 AAB 크기를 최소화하려면 빌드 설정부터 리소스 최적화, 모듈식 전달에 이르기까지 여러 전략을 함께 적용해야 합니다. 실제로 Google Play에서는 150MB 이상의 앱에 대해 경고를 표시하며, 앱 크기가 작을수록 설치율이 높아진다는 통계도 있으므로, 앱 크기 최적화는 개발자라면 반드시 알아야 할 핵심 역량 중 하나입니다.

이번 면접 질문을 통하여 아래 내용들을 학습하실 수 있습니다.

  • 빌드에서 R8 코드 축소 및 리소스 축소를 설정하는 방법
  • Android App Bundle이 디바이스별 맞춤 APK를 생성하는 원리
  • 네이티브 라이브러리 필터링과 이미지 포맷 선택이 바이너리 크기를 줄이는 방법
  • 동적 기능 모듈(Dynamic Feature Module)을 적용하여 자주 사용하지 않는 기능의 로딩을 지연시키는 방법

R8을 활용한 코드 축소

R8은 안드로이드의 기본 코드 축소기(code shrinker)이자 최적화 도구입니다. R8을 활성화하면 최종 바이너리에서 사용되지 않는 클래스, 메서드, 필드를 제거합니다. 또한 바이트코드 최적화와 이름 난독화(obfuscation)를 수행하여 DEX 파일 크기를 더욱 줄여 줍니다. 면접에서 R8과 ProGuard의 차이에 대해 질문받을 수 있으므로, R8이 ProGuard를 대체하는 최신 도구라는 점도 함께 기억해 두시면 좋습니다.

android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile(
                'proguard-android-optimize.txt'
            ), 'proguard-rules.pro'
        }
    }
}

minifyEnabled true를 설정하면 R8 코드 축소가 활성화됩니다. shrinkResources true를 설정하면 코드 축소 이후 남은 코드에서 참조하지 않는 리소스를 제거합니다. ProGuard 규칙은 리플렉션을 통해 접근하거나 라이브러리에서 필요로 하는 클래스가 제거되지 않도록 보호하는 역할을 합니다.

리소스 최적화

이미지 리소스는 종종 APK 크기에서 상당한 비중을 차지합니다. 이를 줄이기 위한 몇 가지 전략을 살펴보겠습니다.

벡터 드로어블(Vector Drawable)은 확장 가능한 그래픽에서 래스터 이미지를 대체합니다. 단일 벡터 XML 파일로 여러 해상도별 PNG 파일을 대체할 수 있어, 파일 수와 전체 용량을 모두 줄일 수 있습니다.

WebP 포맷은 비슷한 화질을 유지하면서도 PNG나 JPEG보다 더 좋은 압축률을 제공합니다. 기존 래스터 이미지를 WebP로 변환하는 것은 가장 효과적인 단일 단계 최적화 방법 중 하나입니다. Android Studio에서도 이미지를 우클릭하여 간편하게 WebP로 변환할 수 있으므로, 프로젝트에 즉시 적용해 보실 수 있습니다.

android {
    defaultConfig {
        // 벡터 드로어블 지원 라이브러리 사용 활성화
        vectorDrawables.useSupportLibrary = true
    }
}

이 면접 질문은 구독자 전용입니다

Dove Letter를 구독하시면 안드로이드, 코틀린 개발 관련 독점 면접 질문의 전체 내용을 볼 수 있습니다.

구독하기
면접 질문 목록으로 가기