면접 질문실전 질문꼬리 질문

APK와 AAB의 차이점

skydovesJaewoong Eum (skydoves)||9분 소요

APK와 AAB의 차이점

안드로이드 애플리케이션은 두 가지 주요 형식으로 배포됩니다. APK(Android Package)와 AAB(Android App Bundle)가 바로 그것입니다. APK는 모든 기기 구성에 필요한 리소스를 통째로 포함하는 전통적인 설치 형식이며, AAB는 Google이 도입한 게시 형식으로 Play Store가 다운로드 시점에 기기에 최적화된 APK를 생성할 수 있도록 설계되었습니다. 이 두 형식의 구조적, 배포적 차이를 정확히 이해하면 프로젝트에 적합한 배포 전략을 선택하는 데 큰 도움이 됩니다.

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

  • APK와 AAB 파일의 구조적 차이를 설명할 수 있습니다.
  • Google Play가 AAB를 기기별 APK로 변환하는 과정을 이해할 수 있습니다.
  • 범용 APK 대비 AAB의 크기 절감 효과를 파악할 수 있습니다.
  • AAB가 권장 형식임에도 불구하고 APK가 여전히 필요한 상황을 설명할 수 있습니다.

APK의 구조

APK는 호환되는 모든 기기에서 애플리케이션을 설치하고 실행하는 데 필요한 모든 것을 담은 자체 완결형(self-contained) 아카이브입니다. 컴파일된 DEX 코드, 모든 화면 밀도에 대한 리소스, 모든 CPU 아키텍처용 네이티브 라이브러리, 그리고 기기의 로캘과 무관하게 모든 언어 리소스가 포함되어 있습니다.

이러한 범용성 덕분에 하나의 APK로 어떤 기기에서든 설치가 가능하지만, 동시에 사용자가 실제로는 절대 사용하지 않을 리소스까지 전부 다운로드해야 한다는 단점이 있습니다. 가령, xxhdpi 화면의 기기에도 mdpi, hdpi, xxxhdpi 드로어블이 모두 포함되고, arm64-v8a CPU의 기기에도 x86armeabi-v7a 네이티브 라이브러리가 함께 전달됩니다. 이는 불필요한 데이터 사용량과 저장 공간 낭비로 이어집니다.

APK 파일은 adb install 명령어를 통한 직접 설치, 파일 관리자를 통한 사이드로딩, 또는 앱 스토어를 통한 배포 등 다양한 경로로 설치할 수 있습니다. 이 유연성은 APK가 가진 핵심 장점 중 하나입니다.

AAB의 구조

AAB는 기기 구성에 따라 리소스와 코드를 개별 번들로 분리하는 모듈형 게시 형식입니다. APK와 달리 AAB는 기기에 직접 설치할 수 없습니다. 개발자가 AAB를 Google Play에 업로드하면, Play Store의 동적 전달(Dynamic Delivery) 시스템이 이를 처리합니다.

Google Play는 각 기기 구성에 맞는 분할 APK(Split APK) 세트를 생성합니다.

  • Base APK: 모든 기기에 공통으로 필요한 핵심 코드와 리소스를 포함합니다.
  • Configuration APK: 화면 밀도, CPU 아키텍처, 언어에 특화된 리소스를 각각 담고 있습니다.

사용자가 앱을 다운로드하면, Google Play는 Base APK와 해당 기기에 맞는 Configuration APK만 전달합니다. 예를 들어, arm64-v8a 프로세서에 xxhdpi 밀도, 한국어 로캘을 가진 기기라면 정확히 해당 설정에 맞는 분할 APK만 수신하게 됩니다.

android {
    bundle {
        density { enableSplit true }  // 화면 밀도별 분할 활성화
        abi { enableSplit true }      // CPU 아키텍처별 분할 활성화
        language { enableSplit true } // 언어별 분할 활성화
    }
}

크기 비교

AAB를 통한 크기 절감 효과는 앱의 리소스 구성에 따라 달라집니다. 밀도별 드로어블이 많거나, 여러 네이티브 라이브러리 아키텍처를 지원하거나, 다수의 언어 번역을 포함하는 앱일수록 절감 효과가 큽니다. Google에 따르면 AAB를 사용하는 앱은 범용 APK 대비 평균 15% 작은 APK를 제공하며, 일부 앱은 30% 이상의 크기 감소를 달성하기도 합니다.

이러한 절감 효과는 전적으로 기기에 불필요한 리소스를 제외함으로써 발생합니다. 코드 자체의 압축 방식은 두 형식 사이에 차이가 없다는 점에 유의해야 합니다.

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

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

구독하기