STUDY/APP

APK와 AAB에 대한 정리

sorrow16 2021. 8. 4. 20:30

안드로이드 앱을 스토어에 배포하는 과정에서 APK와 AAB라는 용어를 들을 수 있다.
APK는 파일 확장자이며, AAB는 "Android App Bundle"의 줄임말이다.

 

APK

일반적인 APK는 APK 파일 하나를 통해 많은 디바이스의 호환을 지원한다. 그렇다 보니 APK 자체에 여러개의 ABI(Anroid Binary Interface)를 포함하게 되며, APK 파일의 크기는 커질 수 밖에 없다.

 APK 파일이 커지는 경우 스토어를 통해 앱을 다운받는 사용자에게 안좋은 경험을 제공할 수 밖에 없다. 실제로 나도 스토어에서 앱을 다운받는데 시간이 오래걸리면 굉장히 짜증이 나기 때문에 안좋은 경험을 제공한다는 것은 빼도박도 못하는 사실이라는 생각이 든다.

 

AAB

 

APK의 용량 문제를 해결하기 위해 개발된게 안드로이드 AAB(Android App Bundle, 이하 AAB)이다. 기존 통빌드(APK 하나로 전부 해결하는) 혹은 다중 APK를 통해 사용자에게 앱을 지원하는 방식을 사용했다면, 현재는 AAB를 통해 좀 더 경량화된 앱을 제공할 수 있다. 

 

 

구글은 2021년 8월부터 '구글 플레이에 새로 올라오는 모든 안드로이드 앱은 AAB 형식이어야 한다'며 스토어 정책을 바꿨다 (링크). 기존 앱들은 똑같이 APK로 배포되어도 상관없지만 새로 업로드되는 앱들은 모두 AAB 형식으로 스토어에 올라와야 한다는 내용이다.

 

APK(Android Package)는 이미 완성된 안드로이드 앱 파일이고, AAB(Android App Bundle)는 APK를 완성해주는 요소를 담은 패키지다.

 

예를 들어 어떤 앱을 설치할 때, 한국어 기반의 갤럭시 S21과 독일어 기반의 갤럭시 S10 두 경우 모두 똑같은 APK 파일이 설치되는 것이 지금까지의 방법이었다. 하지만 AAB 형식으로 배포될 경우 사용자 기기에 필요한 파일만으로 구성된, 군더더기가 제거된 APK 파일을 설치할 수 있는 것이다. (예: 한국어 기기에 독일어 파일은 필요 없고 최신 모델에서만 쓸 수 있는 기능은 갤럭시 S10에서는 필요 없을 것이다)

 

기존처럼 모든 기기에 대응할 수 있는 하나의 APK를 전달하는 것이 아니라, 개발자가 스토어에 AAB 패키지를 올려놓으면, 스토어가 사용자 기기에 어떤 내용이 필요한지 확인 후 그에 맞춘 APK 파일을 만들어 배포하는 식이다.

 

따라서 다운로드 되는 앱의 크기가 줄어든다는 장점이 있다.

 

하지만 단점도 존재한다. 보안에 대한 우려가 있다. 모든 안드로이드 앱에는 개발자의 서명 파일이 들어간다. 서명을 하여 '이 앱을 만든 사람은 나'라는 증거를 남기는 것이다. 서명 파일은 개발자가 APK 파일에 직접 첨부한다. 따라서 누군가가 앱을 멋대로 변형해 배포하려고 해도, 원래 개발자의 서명이 없기 때문에 공식 앱이 아님을 확인할 수 있다.

 

하지만 AAB 파일은 위에서 짚었듯이 완성된 앱이 아니라 완성품으로 태어날 수 있는 레고 블록의 모음이다. 그리고 사용자를 위해 레고 블록을 끼워 맞추는 것은 개발자가 아니라 구글 플레이다. 따라서 서명은 개발자가 아닌 구글 플레이가 대신하게 된다. 마치 부동산 계약할 때 대리인이 서명할 수 있는 것처럼, AAB로 배포되면 필연적으로 구글 플레이가 대리 서명을 하게 되는 것이다.

 

다른 이가 나 대신 서명하는 것은 (아무리 철저하게 진행된다고 해도) 찝찝함이 있을 수밖에 없다. 구글은 대리 서명에 있어 최고의 보안을 약속했지만, 만에 하나 구글이 레고 블록을 엉성하게 조립하거나, 없던 코드를 집어넣는 일이 생기면 그에 대한 사용자들의 불만은 개발자가 고스란히 떠안아야 한다. 사용자 입장에서는 APK건 AAB건 알 바 아니기 때문이다. 개발자 자신의 컨트롤 범위를 벗어난다는 점에서 우려하는 이가 많다.

 

출처 : https://yozm.wishket.com/magazine/detail/912/