파일 이름에는 .pptx .mp4 같이 파일 형식을 나타내는 확장자가 붙는다. 스마트폰 앱에도 이런 확장자가 붙는다(화면에 표시되지 않을 뿐이다). iOS 앱에는 .ipa가, 안드로이드 앱에는 .apk가 붙는다.
작년 11월, 구글은 2021년 8월부터 '구글 플레이에 새로 올라오는 모든 안드로이드 앱은 AAB 형식이어야 한다'며 스토어 정책을 바꿨다(링크). 기존 앱들은 똑같이 APK로 배포되어도 상관없지만 새로 업로드되는 앱들은 모두 AAB 형식으로 스토어에 올라와야 한다는 내용이다.
AAB는 구글이 2018년에 새로 소개한 안드로이드 앱 형식인데, 이번 글에서는 AAB가 정확히 무엇인지, 구글의 새 정책이 어떤 변화를 가져올지 살펴보자.
APK(Android Package)는 이미 완성된 안드로이드 앱 파일이고, AAB(Android App Bundle)는 APK를 완성해주는 요소를 담은 패키지다.
예를 들어 어떤 앱을 설치할 때, 한국어 기반의 갤럭시 S21과 독일어 기반의 갤럭시 S10 두 경우 모두 똑같은 APK 파일이 설치되는 것이 지금까지의 방법이었다. 하지만 AAB 형식으로 배포될 경우 사용자 기기에 필요한 파일만으로 구성된, 군더더기가 제거된 APK 파일을 설치할 수 있는 것이다. (예: 한국어 기기에 독일어 파일은 필요 없고 최신 모델에서만 쓸 수 있는 기능은 갤럭시 S10에서는 필요 없을 것이다)
기존처럼 모든 기기에 대응할 수 있는 하나의 APK를 전달하는 것이 아니라, 개발자가 스토어에 AAB 패키지를 올려놓으면, 스토어가 사용자 기기에 어떤 내용이 필요한지 확인 후 그에 맞춘 APK 파일을 만들어 배포하는 식이다.
앱의 크기가 줄어든다는 것이 가장 큰 장점이다. 이론적으로만 생각하면 개발자가 각 사용자들에게 맞는 APK 파일 버전을 여러 개 만들어 배포하는 것이 가장 좋다. 하지만 그러기엔 세상에 안드로이드 기기의 종류와 언어가 너무 많다. 그리고 업데이트가 있을 때마다 그 모든 버전을 최신화한다는 것은 물리적으로 불가능하다.
그러니 개발자는 앱을 구성하는 요소들을 레고 블록처럼 잘 나누어놓은 다음, 그 블록들을 구글 플레이 스토어에 올려놓는 것이다. 그러면 스토어 측에서 각 사용자에게 맞는 레고 블록만 모아서 조립 후 배포하는 식이다.
이러면 개발자 입장에서는 일일이 맞춤형으로 제작하지 않아도 되고, 사용자 입장에서는 필요 없는 기능은 받지 않아도 된다. 참고로 AAB 형태로 배포하면 앱 크기가 평균 15% 줄어든다고 한다. 특히 경제적인 이유로 용량이 넉넉한 최신 폰을 사용하기 힘든 사용자들에겐 정말 좋은 소식이다.
보안에 대한 우려가 있다. 모든 안드로이드 앱에는 개발자의 서명 파일이 들어간다. 서명을 하여 '이 앱을 만든 사람은 나'라는 증거를 남기는 것이다. 서명 파일은 개발자가 APK 파일에 직접 첨부한다. 따라서 누군가가 앱을 멋대로 변형해 배포하려고 해도, 원래 개발자의 서명이 없기 때문에 공식 앱이 아님을 확인할 수 있다.
하지만 AAB 파일은 위에서 짚었듯이 완성된 앱이 아니라 완성품으로 태어날 수 있는 레고 블록의 모음이다. 그리고 사용자를 위해 레고 블록을 끼워 맞추는 것은 개발자가 아니라 구글 플레이다. 따라서 서명은 개발자가 아닌 구글 플레이가 대신하게 된다. 마치 부동산 계약할 때 대리인이 서명할 수 있는 것처럼, AAB로 배포되면 필연적으로 구글 플레이가 대리 서명을 하게 되는 것이다.
다른 이가 나 대신 서명하는 것은 (아무리 철저하게 진행된다고 해도) 찝찝함이 있을 수밖에 없다. 구글은 대리 서명에 있어 최고의 보안을 약속했지만, 만에 하나 구글이 레고 블록을 엉성하게 조립하거나, 없던 코드를 집어넣는 일이 생기면 그에 대한 사용자들의 불만은 개발자가 고스란히 떠안아야 한다. 사용자 입장에서는 APK건 AAB건 알 바 아니기 때문이다. 개발자 자신의 컨트롤 범위를 벗어난다는 점에서 우려하는 이가 많다.
'사용자들에게 딱 필요한 코드만 제공해 앱 용량을 줄이고, 개발자들은 여러 개의 빌드를 준비할 필요가 없다'라는 것이 명분이지만, 사업적인 측면에서도 강제 AAB 정책은 구글에게 이득이다.
안드로이드 앱은 iOS 앱과는 다르게 스토어 종류가 굉장히 많다. 반드시 구글 플레이를 통해 다운 받을 필요가 없다. 삼성이 운영하는 갤럭시 스토어, 통신사들이 운영하는 원스토어, 아마존 앱스토어도 있고, 인터넷에 돌아다니는 APK 파일을 직접 복사해 설치하는 것도 가능하다.
이렇게 되면 구글이 스토어 수수료를 떼 가기 힘들어진다. 어떻게든 구글 플레이 스토어를 통해 설치가 되어야 구글이 인앱 결제 수수료를 가져갈 수 있다. AAB 형식을 강제하면 최종 파일은 구글 플레이 서버에서 만들어지고 서명되어 배포되기 때문에, 배포를 컨트롤하는 힘이 구글 쪽으로 쏠릴 수밖에 없다.
안드로이드 앱의 AAB 형식은 2018년에 처음 등장하였고, 올해 8월부터 강제화 될 예정이다. 기존 앱들은 (원한다면) 계속 APK 형식으로 올려도 되지만, 구글 플레이에 새롭게 올라오는 앱은 무조건 AAB 형식으로 올려야 하는 것이다. 안드로이드 진영에서 구글 플레이만큼의 점유율을 가진 스토어가 없기 때문에(중국 제외), 일정이 미뤄지지 않는 이상 다들 AAB 방식으로 옮겨갈 것으로 보인다.
사용자 입장에서는 (앱이 더 가벼워진다고 하니) 장점으로 다가오지만, 부디 개발자들도 'AAB로 하니 더 좋은 걸?'이라고 느낄 만큼 구글이 많은 지원과 업데이트를 약속해주었으면 하는 바람이다. 결국 개발자들이 개발하기 좋은 환경일수록 앱의 퀄리티도 올라갈 것이기 때문이다.
*글에 사용된 이미지 일부는 안드로이드 개발자 공식 홈페이지에서 캡처한 것입니다.
*본 내용은 요즘IT와 함께 작성한 글입니다.