Play Asset Delivery(PAD)
지난 번 구글 스토어 관련 포스팅에서 APK와 AAB에 대해서 간단하게 내용을 정리해 보았습니다.
이번에는 구글에서 AAB 이후에 좀 더 효과적인 에셋관리(?)를 위한 기능을 제공하기 시작하는데....
구글에서는 2019년 8월 Play Asset Delivery(PAD)를 제공하기 시작합니다. 그럼 PAD는 무엇일까요?
Play Asset Delivery란?
AAB가 기본적인 모듈을 사용자 환경에 맞게 설치하고 조합하여 사용자에게 앱을 제공하는 방식이라면! PAD는 에셋(에셋팩)을 abb의 일부로 관리하는 방식입니다. 보통의 게임서비스에서는 게임을 위한 기본적인 리소스를 필요로하고 이는 APK에 포함되어 있거나 OBB와 같은 확장파일로 제공되는 방식이며 확장파일을 제공하기 위해서는 별도의 CDN 서비스를 주로 사용하게 됩니다.
게임을 진행하다보면 앱 설치후 "추가적인 리소스 다운로드가 필요합니다"와 같은 팝업을 자주 볼 수 있습니다. 팝업의 확인 버튼을 선택하면 이후 프로그래스바를 보여주며 추가 리소스 다운로드가 진행되는 형태이죠. 현재 구글에서는 APK 용량 제한을 150mb로 제한하고 있기 때문에 추가적인 리소스 제공을 위해서는 CDN을 통한 리소스 제공이 필수적인 상황이 었습니다. 하지만, PAD를 사용하게 되면 비용절감(구글에서 에셋 호스팅 해준다네요!!) 뿐만아니라 앱 설치 시간을 감소시킬 수 있는 장점들이 있습니다.
PAD를 통해 위의 그림처럼 에셋 팩을 생성하고 Android App Bundle 내의 하나의 아티팩트로 제공하게 됩니다.
PAD에서는 압축과 델타 패치까지 진행해주기 때문에 앱을 설치하는 속도와 업데이트가 빨라지게 되고 사용자의 기기에 맞는 최적의 환경을 제공합니다.
PAD의 전송모드
PAD는 우리가 원하는 시점에 리소스 추가를 진행할 수 있도록 제공합니다.
- install-time ⇒ 앱 설치시 함께 다운로드
- fast-follow ⇒ 앱 설치 후 자동으로 다운로드
- on-demand ⇒ 앱이 실행되는 동안 에셋 팩 다운로드
총 세가지의 방식으로 다운로드 시점을 결정할 수 있으니 원하는 시점에 리소스 다운로드를 진행할 수 있습니다.
** fast-follow 및 on-demand로 구성된 에셋 팩은 분할 apk가 아닌 보관파일로 제공되게 된다고 합니다.
에셋 업데이트
전송 모드에 따라 앱 업데이트시 작동되는 과정이 다르므로 이를 확인 후 사용해야 합니다.
install-time의 에셋팩의 경우 앱 업데이트시 기본 앱의 업데이트와 함께 진행되지만 fast-follow 및 on-demand 애셋 팩의 앱 업데이트는 다음 단계를 따릅니다.
- 모든 애셋을 포함한 앱의 패치가 기기의 안전한 위치에 다운로드됩니다.
- 앱 바이너리가 업데이트됩니다. install-time 애셋 팩이 모두 포함됩니다.
- 이전에 다운로드한 애셋 팩이 모두 무효화됩니다.
- 애셋의 패치가 복사되어 앱의 내부 저장소에 저장된 애셋에 적용됩니다.
** 애셋의 패치를 담당하는 프로세스가 완료되지 않았지만 바이너리가 이미 업데이트 될 수 있으므로
- 업데이트 진행중에 대한 UI 제공이 필요
- 무효화된 애셋을 처리하는 로직 필요
다운로드 크기 제한
- 각 fast-follow 및 on-demand 애셋 팩의 다운로드 크기 제한은 512MB입니다.
- 모든 install-time 애셋 팩의 다운로드 크기 제한은 1GB입니다.
- Android App Bundle에 포함된 모든 애셋 팩의 다운로드 크기 제한은 2GB입니다.
- Android App Bundle에서 최대 50개의 애셋 팩을 사용할 수 있습니다.
즉, 타이밍 시점에 따라 에셋을 분리하더라도 최대 2GB까지만 사용가능하다.
적용 가능한 게임 엔진
PAD가 어떤 역할을 하는지에 대해 확인해 보았으니 기능이 현재 개발하고 있는 게임에 적용되는지에 대한 여부를 확인해야 할텐데요.
현재는 대표적으로 unity 와 unreal 엔진 그리고 gradle을 통해 빌드 통합이 이루어지는 엔진에 대해서 사용이 가능합니다.
- unity는 2017.04 버전 이상부터 사용이 가능하며 별도의 플러그인을 제공합니다.
- unreal 또한 4.25 버전부터 에셋 팩을 이용하여 app bundle 구축을 할 수 있도록 진행
- 이외의 엔진에 대해서는 gradle을 통해 에샛팩과 바이너리를 결합하는 방식으로 사용 가능