2021년의 모바일 게임 이용자 지출은 어떠한 둔화 조짐도 없이 7.3% 증가하여 932억 달러를 기록했습니다. 이같이 경쟁이 치열한 성장세의 시장에서는 잠재고객으로부터 효과적으로 수익을 창출해내는 것이 그 무엇보다도 중요합니다. 하지만 전략 컨설턴트의 도움 없이도, 여러분의 수익화 전략이 최대한의 효과를 내고 있는지 어떻게 알 수 있을까요?
바로 그 부분을 지원하기 위해 저희는 Play Console에서 사용할 수 있는 도구 모음을 확장하고 있습니다. 여러분의 비즈니스 성장에 도움을 드리고자 작년에는 통계 페이지에 새로운 인게이지먼트 및 수익화 메트릭을 선보인 바 있으며, 이번에는 성공적인 수익 창출을 지원하는 새로운 전략적 가이드 도구를 소개해드리고자 합니다.
이 새로운 섹션에서는 게임에서 수익을 더욱 창출하는 데 도움이 되는 메트릭 기반 가이드를 아래와 같이 살펴볼 수 있습니다.
수익 현황 파악: 게임의 수익 메트릭이 전체 비즈니스 목표 달성에 어떻게 도움이 되는지 이해하고, 어떤 메트릭을 어느 시기에 우선순위로 지정할 지 알아보세요.
기회 식별: 동종 앱 그룹에 대한 벤치마킹을 통해 메트릭을 개선할 수 있는 지점을 찾고 국가별 통계 데이터를 확인해 보세요.
다음 단계 추천: 수익 창출 기회를 활용할 수 있는 즉시 수행 가능한 방법들을 알아보세요.
전략적 가이드 메트릭 계층 구조. (KPI 모니터링과 같은 특정한 과정에 대해서는 여기서 살펴보거나 Play Academy에서 확인하세요.)
Google Play는 지난 몇 년간 엄선된 파트너와 함께 가이드를 완벽하게 다듬고 대시보드를 테스트하는 데 심혈을 기울였습니다. 이에 전략적 가이드 도구에 대해 긍정적인 반응을 얻을 수 있었으며, 여러분께서도 유용하게 활용하시기 바랍니다.
“굉장히 유용합니다! 이런 인사이트가 바로 저희들이 Google에게 기대하는 바이죠. 실제로 비즈니스를 확장하는데 많은 도움이 되기 때문입니다.” - Gameloft의 Product Manager
전략적 가이드는 Play Console의 재무 보고서에서 확인할 수 있습니다. 저희는 모바일 게임 성장 분야의 전문가들과 제휴하여, 개발자가 앱 실적을 손쉽게 평가하고 동종 앱과 비교하여 측정하는 데 도움이 되도록 기본 수익 창출 메트릭(새로운 메트릭 포함)과 메트릭 계층 구조와의 관계 내용을 포함했습니다. 이 고객센터 도움말에서 모든 메트릭을 확인할 수 있습니다.
메트릭 계층 구조는 비즈니스 전체 매출 실적에 기여하는 구매자 전환(buyer conversions)과 같은, 게임 실적 관련 하위 단계 메트릭에 직접 영향을 미치는 방법을 이해하는 데 도움이 되는 도구입니다. 동종 앱 비교와 국가별 분석 기능을 사용하여 최대의 성장 기회, 즉 실적이 저조하거나 우수한 시장을 빠르게 파악할 수 있습니다.
특정 메트릭을 골라 자세히 탐색하며 시간 경과에 따른 실적을 확인해 보세요. 전략적 가이드를 통해 선택한 메트릭을 지역별로 분석하여, 전 세계 시장으로 게임을 진출할 기회를 파악할 수 있습니다. 자세한 메트릭 분석은 투자 대비 고수익 지역을 파악하는 데도 도움이 됩니다.
일일 구매자 비율을 되돌리는 전략적 가이드 메트릭 권장 사항의 예
메트릭별 권장 사항은 캐주얼 게임, RPG 등 장르를 가리지 않고 다양한 게임 개발자들에게 관련성 높은 인사이트를 제공하도록 제작되었습니다. 이러한 권장 사항을 활용하면 프로모션 콘텐츠를 다각화하고, 게임 메커니즘을 정교하게 다듬고, 새로운 가격대로 구매력을 테스트해 볼 수 있습니다.
더욱 더 많은 개발자가 광고 수익 중심의 비즈니스 모델에서 IAP(인앱 구매)를 함께 진행하는 방향으로 초점을 전환하고 있어, IAP 수익 창출을 전체 전략의 일부로 고려하는 개발자에게 도움이 될 전략적 가이드를 마련했습니다. 이번 가이드를 통해 다양한 규모의 게임 개발자들이 더욱 성장할 수 있도록 도움을 드리게 되어 기쁩니다. 수익 성장을 지원하는 업데이트가 앞으로도 진행되니 계속해서 지켜봐 주시기 바랍니다.
게시자: Dave Burke (VP of Engineering)
이 글의 원문은 여기서 확인하실 수 있으며 블로그 리뷰에는 노현석(GDE)님이 참여해주셨습니다.
지난 2월에 저희는 개인정보 보호와 보안, 개발자 생산성에 더해 태블릿 및 대화면 지원을 핵심 테마로 Android 13의 첫 번째 개발자 프리뷰를 출시했습니다. 오늘은 앱에서 시도해 볼 수 있는 새로운 기능과 변경 사항이 반영된 Android 13 Developer Preview 2를 소개해 드리고자 합니다. Android가 개발자와 사용자를 위한 더 나은 플랫폼이 되도록 개발자 여러분의 의견을 들려주시기 바랍니다.
지난주 AOSP(Android 오픈소스 프로젝트)로 이동한 12L 기능에 이어 Android 13 Developer Preview 2도 공개되므로, 2억 5천만 개 이상 대화면 Android 기기를 활용하는 것이 더욱 수월해질 것입니다. Android 13, 태블릿, 그리고 Jetpack Compose 내 개발자 생산성 투자에 대해 자세히 알아보려면 #TheAndroidShow의 최신 에피소드를 확인해 보세요.
Developer Preview 2를 설명하기 전에, 지난 주의 새로운 소식들을 먼저 살펴보겠습니다. 저희는 AOSP의 12L 기능 출시를 공식 발표했고, 지원 가능한 모든 Pixel 기기에 앞으로 몇 주에 걸쳐 배포할 예정입니다. 12L은 태블릿에서 Android 12의 성능을 훨씬 높여 주며, 사용자가 화면 분할 모드로 즉시 앱을 드래그 앤 드롭할 수 있는 새로운 작업 표시줄, 알림 창과 잠금 화면의 새로운 대화면 레이아웃, 앱을 위해 개선된 호환성 모드 등의 업데이트를 포함되어 있습니다. 자세한 정보는 여기에서 확인해보세요.
12L은 업데이트 계획에 따라 올해 말부터 삼성, Lenovo, Microsoft의 태블릿 및 폴더블 기기에 제공될 예정이므로, 지금부터 그에 맞게 앱을 준비하시기 바랍니다. 여러 크기의 창을 사용하여 화면 분할 모드에서 앱을 테스트하고 다양한 방향으로 사용해 보면서, 특이 사항이 있을 경우 새로운 호환성 모드 변경 사항을 확인하시는 것이 좋습니다. 개발자를 위한 12L 관련한 자세한 내용은 여기에서 확인할 수 있습니다.
또한 12L의 대화면 기능이 Android 13에서는 기본 제공되므로, Android 12L을 실행하는 태블릿을 위한 기본 사항이 포함된다는 사실을 인지한 채로 Android 13에서 앱을 개발하고 테스트하실 수 있습니다. 저희는 대화면이 Android의 미래를 위한 핵심적인 기기가 될 것으로 보고 있으며, 태블릿, Chromebook, 폴더블 화면의 뛰어난 경험을 구축하는데 필요한 도구를 제공하기 위해 계속 투자하고 있습니다. 대화면에 맞게 최적화를 시작하는 방법에 대해 알아보고 대화면 개발자 리소스를 꼭 확인해 보세요.
그럼 이제부터 Android 13 Developer Preview 2의 새로운 기능에 대해 자세히 알아보겠습니다.
사용자는 누구나 자신이 사용하고 있는 기기의 리소스와 민감한 개인정보에 대해 신뢰할 수 있는 OS와 앱을 필요로 합니다. 개인정보 보호와 사용자 신뢰는 Android 제품 원칙의 핵심이며, Android 13에서 저희는 앞으로도 기기에 더 안전한 환경을 마련하고 사용자에게 더 많은 컨트롤을 제공하여 모두를 위한 책임 있는 고품질 플랫폼을 만드는 데 집중할 것입니다. Developer Preview 2의 새로운 기능은 다음과 같습니다.
알림 권한 - 사용자가 자신에게 가장 중요한 알림에만 집중할 수 있도록, Android 13에는 앱에서 알림을 보내기 위한 새로운 런타임 권한인 POST_NOTIFICATIONS을 도입했습니다. Android 13을 대상으로 하는 앱이 알림을 게시하려면 이제 사용자에게 알림 권한을 요청해야 합니다. Android 12 이하를 대상으로 하는 앱의 경우는 시스템이 개발자 대신 업그레이드 플로우를 처리하며, 플로우는 계속 미세 조정됩니다. 사용자에게 더 많은 컨텍스트와 컨트롤을 제공하려면 최대한 빨리 Android 13을 대상으로 지정하고 앱에서 알림 권한을 요청하는 것이 좋습니다. 여기서 자세히 알아보시기 바랍니다.
Android 13의 알림 권한 대화상자
개발자의 다운그레이드 권한 - 일부 앱은 특정 기능을 사용하거나 이전 Android 버전의 민감한 권한을 유지하는 데 사용자가 이전에 부여했던 특정 권한이 더 이상 필요하지 않을 수도 있습니다. Android 13은 이전에 부여된 런타임 권한을 다운그레이드하여 앱이 사용자 개인정보를 보호할 수 있도록 해 주는 새로운 API를 제공합니다.
컨텍스트 등록 리시버의 더 안전한 내보내기 - Android 12에서 개발자는 매니페스트 선언 인텐트 리시버의 내보내기 가능성을 선언해야 했습니다. Android 13에서는 비시스템 소스에 대해 리시버를 등록할 때 RECEIVER_EXPORTED 또는 RECEIVER_NOT_EXPORTED 플래그를 추가하여 컨텍스트 등록 리시버에 대해서도 같은 작업을 수행해야 합니다. 따라서 원치 않을 경우에는 브로드캐스트를 보낼 다른 앱에 리시버가 제공되지 않게 할 수 있습니다. Android 13에서 필수는 아니지만, 앱 보안을 위한 조치로 내보내기 가능성을 선언하실 것을 권장합니다.
저희는 Android 13에서 사용자가 세련된 경험과 더 나은 성능을 제공하는 데 도움이 될 만한 도구를 더 많이 제공하고자 노력하고 있습니다. 오늘 출시되는 버전의 업데이트 사항 중 일부를 소개합니다.
일본어 텍스트 줄 바꿈 기능 개선 - TextView는 이제 더 읽기 쉬운 세련된 일본어 앱을 위해 문자 대신 분세츠(문절, 자연스럽게 들리는 가장 작은 단어 단위)나 구문별로 텍스트 줄 바꿈을 할 수 있습니다. TextView와 함께 android:lineBreakWordStyle="phrase"를 사용하여 이 줄 바꿈을 이용할 수 있습니다.
구문별 줄 바꿈을 사용할 때(아래)와 사용하지 않을 때(위)의 일본어 텍스트
비라틴어 스크립트의 줄 높이 개선 - Android 13은 각 언어에 맞게 조정된 줄 높이를 사용하여 비라틴어 스크립트(예: 타밀어, 버마어, 텔루구어, 티베트어)의 표시 방법을 보완합니다. 새로운 줄 높이를 사용해 문자가 잘리는 문제를 방지하고 문자의 위치 지정을 개선합니다. Android 13을 대상으로 지정하기만 해도 앱이 이런 개선 사항을 활용할 수 있습니다. 변경 사항이 비라틴어의 UI에 영향을 줄 수 있으므로, 새로운 줄 간격 사용 시 앱을 테스트하시기 바랍니다.
Android 13을 대상으로 하는 앱에서 개선된 비라틴어 스크립트의 줄 높이(아래)
텍스트 변환 API - 일본어나 중국어 같은 언어를 사용하는 이들은 음성 문자 변환 입력 방법을 이용하는데, 이 때문에 검색이나 자동 완성 같은 기능의 속도가 느려질 때가 많습니다. Android 13에서는 사용자가 원하는 내용을 더 빠르고 쉽게 찾을 수 있도록 앱이 새로운 텍스트 변환 API를 호출할 수 있습니다. 예를 들어, 이전에는 일본어 사용자가 (1) 검색어(예: 장소 또는 앱 이름)의 발음으로 히라가나를 입력하고, (2) 키보드를 사용하여 히라가나 문자를 한자로 변환한 다음, (3) 한자로 다시 검색해야 (4) 검색 결과를 얻을 수 있었습니다. 새로운 텍스트 변환 API를 사용할 경우, 일본어 사용자는 2단계와 3단계를 건너뛰고 히라가나를 입력하면 그 즉시 한자 검색 결과를 볼 수 있습니다.
컬러 벡터 글꼴 - Android 13은 COLR 버전 1(스펙, 소개 영상) 글꼴에 대한 렌더링 지원을 추가하고 시스템 그림 이모티콘을 COLRv1 형식으로 업데이트합니다. COLRv1은 어떤 크기에서든 빠르고 또렷하게 렌더링되는 새로운 초소형 글꼴 형식입니다. 대부분의 앱에서 COLRv1이 작동하며 시스템이 모든 것을 처리합니다. Developer Preview 2부터 앱에 대해 COLRv1을 선택할 수 있습니다. 앱이 자체 텍스트 렌더링을 구현하고 시스템 글꼴을 사용하는 경우, 그림 이모티콘 렌더링을 선택하고 테스트하는 것이 좋습니다. Chrome 발표에서 COLRv1에 대해 자세히 알아보세요.
COLRv1 벡터 그림 이모티콘(왼쪽)과 비트맵 그림 이모티콘
Bluetooth LE Audio - LE(Low Energy) Audio는 Bluetooth 클래식을 대체하고 새로운 사용 사례 및 연결 토폴로지를 가능케 하고자 제작된 차세대 무선 오디오입니다. 이를 통해 사용자는 오디오를 친구와 가족에게 공유하고 방송하거나, 정보, 엔터테인먼트, 접근성을 목적으로 하는 공개 방송을 구독할 수 있습니다. Bluetooth LE Audio는 사용자가 배터리 수명 단축 없이 하이파이 오디오를 수신하고, Bluetooth Classic에서는 불가능했던 다양한 사용 사례 간의 매끄러운 전환을 체험하도록 설계되었습니다. Android 13에서는 LE Audio의 기본 제공 지원이 추가되므로, 개발자는 호환되는 기기에서 새로운 기능을 무료로 얻을 수 있습니다.
MIDI 2.0 - Android 13에서는 USB를 통해 MIDI 2.0 하드웨어를 연결하는 기능을 비롯해 새로운 MIDI 2.0 표준에 대한 지원이 추가됩니다. 이 최신 표준에서는 해상도가 컨트롤러용으로 높아졌고, 비서구권 억양에 대한 지원이 개선되었으며, 음별 컨트롤러를 통해 표현력이 향상되었습니다.
저희는 새 플랫폼 버전을 출시할 때마다 앱 호환성을 최우선시하여 더 빠르고 원활한 업데이트를 이루고자 합니다. Android 13에서는 개발자 여러분에게 시간을 더 드리기 위해 앱에 어떤 변경 사항을 적용할지 선택할 수 있게 했을 뿐 아니라, 더 신속한 준비에 도움이 되도록 관련 도구와 프로세스를 업데이트했습니다.
Developer Preview 2가 순조롭게 출시되어 안정성이 전반적으로 계속 개선되는 가운데, 이제는 새로운 기능과 변경 사항을 시험해 보고 의견을 주실 차례입니다. 특히, 플랫폼 변경 사항이 앱에 미치는 영향을 비롯해 API에 대해서도 자세히 의견을 남겨주시면 감사하겠습니다. 여러분의 생각을 알려주시거나 문제를 신고하려면 피드백 페이지를 방문해주시기 바랍니다.
지금은 호환성 테스트를 시작하고 어떤 작업을 수행할지 파악할 좋은 시기이기도 합니다. 호환 가능한 업데이트를 Android 13 Beta 1로 출시할 수 있도록, 이 작업을 일찍 진행하시기를 권장합니다. 당장 앱의 targetSdkVersion을 변경할 필요는 없지만, 개발자 옵션에서 동작 변경 전환 기능을 사용하여 Android 13의 옵트인 변경 사항으로 앱이 어떤 영향을 받을지 미리 알아보시는 것이 좋습니다.
2022년 6월에 플랫폼 안정성 단계에 도달하면 앱에 표시되는 모든 시스템 동작, SDK/NDK API, 비 SDK 목록이 최종 확정됩니다. 이후 최종 호환성 테스트를 마무리하고 완전히 호환 가능한 버전의 앱, SDK 또는 라이브러리를 출시할 수 있습니다. 개발자 여러분을 위한 자세한 일정은 여기에서 확인하세요.
개발자 옵션의 앱 호환성 전환 화면
이번 개발자 프리뷰에는 Android 13의 기능을 사용하고, 앱을 테스트하고, 의견을 제시하는 데 필요한 모든 것이 담겨 있습니다. 오늘 바로 Pixel 6 Pro, Pixel 6, Pixel 5a 5G, Pixel 5, Pixel 4a(5G), Pixel 4a, Pixel 4 XL 또는 Pixel 4 기기에 기기 시스템 이미지를 플래시하여 앱 테스트를 시작하실 수 있습니다. Pixel 기기가 없으면 Android Studio Dolphin의 Android Emulator로 64비트 시스템 이미지를 사용하셔도 좋습니다. 더욱 광범위한 테스트를 위해 GSI 이미지를 사용할 수도 있습니다. Pixel 기기에 프리뷰 빌드를 이미 설치하셨다면 무선 업데이트 방식으로 이 업데이트 이후의 모든 프리뷰와 베타 버전을 자동으로 받게 됩니다. Android 13을 다운로드 받는 방법은 여기서 자세히 확인할 수 있습니다.
더욱 상세한 내용은 Android 13 개발자 사이트를 참조 부탁드립니다.
작성자: Krish Vitaldevara (Director, Product Management)
이 글의 원문은 여기서 확인 가능하며 블로그 리뷰에는 서본양(Google)님이 참여해주셨습니다.
Google Play는 개발자 여러분들이 수십억 명의 사람들에게 세계에서 가장 혁신적이고 믿을 수 있는 앱을 배포하도록 지원하고 있습니다. 저희는 이런 노력을 지속하고 있으며, 앱 생태계 전반에 있어서 앱의 안전성을 강화할 수 있는 방법을 항상 모색하고 있습니다.
이를 위해 안전한 앱 사용에 핵심 역할을 하는 Google Play의 기능과 정책을 마련하고, Android OS 업데이트를 통해 개인정보 보호, 보안, 그리고 이용자 경험을 개선하고 있습니다. 이에 더하여, 이용자들이 개선 사항의 혜택을 모두 누리고 Google Play에 기대하는 믿을 수 있는 경험이 보장되도록, 개발자 여러분들과의 협업을 통해 최신 Android 버전에서도 앱이 원활히 작동하는지 확인하고 있습니다.
저희는 현재 새로운 앱과 앱 업데이트가 최신의 주요 Android OS 버전 출시로 부터 1년 이내의 Android API 수준을 타겟팅하도록 요구하고 있습니다. 이러한 요구사항을 충족하지 못한 앱과 앱 업데이트는 Google Play에 출시될 수 없습니다. 정확한 타임라인은 고객센터 도움말에서 확인해 주시기 바랍니다.
앞으로 출시될 앱과 앱 업데이트의 대상 API 수준 요구사항
여기에 더하여, Google Play 최신 정책 업데이트의 일환으로, 개인정보 보호와 보안과 관련한 최신 기능을 갖추지 못한 앱이 설치되는 것을 방지하기 위해 대상 API 수준 요구사항을 확장하기로 했습니다.
2022년 11월 1일부터, 최신 주요 Android OS 버전 출시 2년 이내의 API 수준을 타겟팅하지 않는 기존 앱들은 앱의 대상 API 수준보다 높은 Android OS 버전의 기기를 이용하는 새로운 이용자가 검색하거나 설치할 수 없습니다. 추후 새로운 Android OS 버전이 출시되면, 요구사항 역시 조정될 예정입니다.
11월 1일부터 적용되는 기존 앱의 대상 API 수준 요구사항
이와 같은 요구사항을 결정한 이유는 간단합니다. 최신 기기를 사용하고 있거나 최신의 Android 버전으로 업데이트한 이용자들은 Android가 제공하는 모든 개인정보 보호 및 보안을 기대하기 때문입니다. 저희는 대상 API 수준 요구사항을 확장하여 이용자들이 이러한 보호 조치를 갖추지 못한 오래된 앱을 설치하지 않도록 예방하고자 합니다.
Google Play에 등록된 앱은 대부분 이 기준을 충족하지만, 그렇지 않은 앱은 추가 수정이 필요합니다. 이에 개발자 여러분들께 도움을 드리고자 리소스와 함께 미리 안내드리며, 아래와 같이 조치해 주시기를 권해 드립니다.
Google Play 앱의 대상 API 수준 요구사항을 충족하도록 기술 가이드라인의 앱 이전 방법을 참고해 주시기 바랍니다.
Android OS의 대상 API 수준 요구사항에 관한 고객센터 도움말을 참고해 주시기 바랍니다.
이전할 시간이 더 필요하시다면 6개월 기한 연장을 추가로 신청하시기 바랍니다. 신청 양식은 올 하반기에 Google Play Console에서 확인해 보실 수 있습니다.
이전에 Google Play에서 설치한 기존 앱을 사용하는 이용자들은 앱이 지원하는 Android OS 버전이 탑재된 기기로 계속 앱을 검색하고, 재설치하고, 사용할 수 있습니다.
대상 API 수준 강화 정책은 이용자 보안을 확대하고 Google Play 이용 경험을 개선하기 위한 정책 업데이트의 한 부분입니다. 전반적인 앱 프라이버시 및 보안 기준을 높이고 Google Play와 Android를 모두에게 더욱 안전한 플랫폼으로 만드는 이 중요한 작업에 대한 새로운 소식은 앞으로도 계속 공유해드리겠습니다.
추가로 확인해 보세요
Jetpack Compose 채택을 위한 Google Play 스토어의 전략과 특정 성능 문제를 극복하고 개발자 생산성과 만족도를 높인 방법에 대해 알아보세요.
작성자: Andrew Flynn, Jon Boekenoogen (Tech leads on Google Play)
Google Play 스토어 엔지니어링 책임자들은 지난 2020년에 전체 홈페이지 기술 스택 개편이라는 중대한 결정을 내렸습니다. 출시 후 10년이 넘은 기존 코드에 수없이 많은 Android 플랫폼 버전 및 기능 업데이트가 누적되면서 막대한 기술 부채가 발생했습니다. 개발자 생산성이나 스토어 자체의 사용자 경험 또는 성능에는 부정적인 영향을 미치지 않으면서, 제품에 대한 작업을 수행하는 수백 명의 엔지니어로 확장되는 새로운 프레임워크가 필요했습니다.
저희는 네트워크 레이어부터 픽셀 렌더링에 이르기까지, 스토어의 모든 것을 업데이트하기 위한 다년간의 로드맵을 마련했습니다. 그 일환으로서 저희는 상호 작용성 및 사용자 만족과 관련된 제품 목표를 충족시킬 현대적이고 선언적인 UI 프레임워크도 도입하고자 했습니다. 전반적인 옵션 분석 후 아직 알파 버전 이전 단계에 있었던 Jetpack Compose에 전념한다는 (당시로서는) 과감한 결정을 내렸습니다.
그 이후, Google의 Google Play 스토어 팀과 Jetpack Compose 팀은 구체적인 요구사항에 부합하는 Jetpack Compose 버전의 출시 및 개선을 위해 매우 긴밀하게 협력했습니다. 이번 게시물에서는 마이그레이션에 대한 접근 방식과 그 과정에서 발견한 해결 과제와 이점을 다루면서 앱에 Compose를 채택하면 어떻게 되는지에 대해 함께 알아보겠습니다.
저희는 새로운 UI 렌더링 레이어로 Jetpack Compose를 고려하면서 다음 두 가지를 우선에 두었습니다.
개발자 생산성: 이 코드에 기여하는 Play 스토어 팀 소속 엔지니어가 매우 많기 때문에, 개발하기 쉽고 재미있어야 합니다.
성능: Play 스토어에서 렌더링하는 미디어 중심 콘텐츠는 지연 시간과 버벅거림에 매우 민감한 비즈니스 측정 항목이 많으므로, 모든 기기, 특히 메모리 용량이 적은 하드웨어와 Android (Go Edition) 기기에서 제대로 작동하도록 해야 했습니다.
저희는 현재 1년 이상 Jetpack Compose를 사용해 UI 코드를 작성하고 있으며 Jetpack Compose 덕분에 UI 개발이 더욱 간단해 졌습니다.
UI 작성에 필요한 코드가 때로는 최대 50%나 감소할 정도로 크게 줄어든 점이 무척 마음에 듭니다. 이는 Compose가 선언적 UI 프레임워크라는 점과 Kotlin의 간결함 덕분에 가능한 일입니다. 사용자 설정 그리기 및 레이아웃을 N개의 메서드 재정의를 통한 View 서브클래스 대신 간단한 함수 호출로 사용할 수 있습니다.
Ratings Table을 예로 들어보겠습니다.
Views를 사용할 경우 이 테이블은 다음으로 구성됩니다.
Compose를 사용할 경우 이 테이블은 다음으로 구성됩니다.
애니메이션은 그 단순성과 표현력으로 호평받는 Compose 기능입니다. 저희 팀은 Compose를 사용해 그 어느 때보다도 Play 스토어 사용자를 즐겁게 할 모션 기능을 제작 중입니다. Compose의 선언적 특성과 애니메이션 API 덕분에 순차 또는 병렬 애니메이션 작성이 비교할 수 없을 정도로 수월해졌습니다. 취소 및 콜백 체인과 관련된 애니메이션의 특수 사례도 더 이상은 저희 팀에게 어려운 문제가 아닙니다. 인기 애니메이션 라이브러리인 Lottie는 간단히 사용할 수 있는 Compose API를 이미 제공하고 있습니다.
그러면 이렇게 생각하실지도 모르겠습니다. '다 좋은 얘기로 들리지만, View를 제공하는 라이브러리 종속성은 어떨까?' 맞습니다. 특히 처음 마이그레이션할 때는 Compose 기반 API를 구현하지 않은 라이브러리도 있었습니다. 하지만 Compose는 ComposeView 및 AndroidView API와의 손쉬운 View 상호 운용성을 제공합니다. 이러한 방식으로 ExoPlayer 및 YouTube의 Player와 같은 인기 라이브러리와 성공적으로 통합했습니다.
Play 스토어 팀과 Jetpack Compose 팀은 Compose가 View 프레임워크만큼 빠르고 버벅거림 없이 실행될 수 있도록 긴밀하게 협력했습니다. Compose가 Android 프레임워크의 일부가 아닌 앱 내의 번들에 포함되어 제공되기 때문에 이는 힘든 과제였습니다. 화면에 개별 UI 구성 요소를 렌더링하는 속도는 빠르지만 Compose 프레임워크 전체를 앱용 메모리로 로드하는 전체 시간 비용은 높았습니다.
Play 스토어에 Compose를 채택하면서 가장 크게 실현한 성능 개선 사항 중 하나는 Baseline Profile 개발에서 비롯되었습니다. 앱 시작 시간을 개선해 주는 클라우드 프로필은 이미 한동안 제공되었지만, API 28 이상에서만 사용할 수 있으며 (매주마다) 릴리스 주기가 잦은 앱 등에는 효과적이지 않습니다. 이 문제를 해결하고자, Play 스토어 팀과 Android 팀은 앱 소유자가 지정할 수 있는 개발자 정의 번들 프로필인 Baseline Profile을 함께 제작했습니다. Baseline Profile은 앱과 함께 제공되고 클라우드 프로필과 완벽히 호환되며 앱 수준의 특이성과 라이브러리 수준에서 모두 정의할 수 있습니다. 또한, Baseline Profile은 Compose 채택자에게 무료로 제공됩니다! Play 스토어는 Baseline Profile 출시를 통해 검색 결과 페이지에서 40%의 초기 페이지 렌더링 시간 단축 효과를 보았습니다. 엄청난 성과입니다!
특히 스크롤이 사용되는 상황에서, Compose를 렌더링에 적합한 성능을 발휘하도록 만드는 핵심 메커니즘은 바로 UI 구성 요소 재사용입니다. Compose는 건너뛸 수 있는 Composable(예: 불변)의 Recomposition에 있어 생략을 시도하지만, 모든 매개변수가 @Stable 주석 요구 사항을 충족할 경우 개발자가 Composable 생략을 강제 적용할 수도 있습니다. Compose 컴파일러는 특정 기능을 생략할 수 없도록 하는 요소에 대한 편리한 가이드도 제공합니다. 스크롤 상황에서 자주 사용되는 Play 스토어의 재사용 UI 구성 요소를 만드는 동안, 저희는 불필요한 Recomposition이 누락된 프레임 시간을 유발하여 버벅거림을 일으킨다는 사실을 발견했습니다. 저희는 이러한 Recomposition을 디버그 설정에서 쉽게 찾을 수 있도록 Modifier를 만들었습니다. 이러한 기술을 UI 구성 요소에 적용하여 버벅거림을 10~15% 줄일 수 있었습니다.
Recomposition 시각화 Modifier가 작동 중인 모습. 파란색(Recomposition 없음), 녹색(Recomposition 1개).
Play 스토어 앱을 위해 Compose를 최적화하는 데에 있어 또 다른 핵심 구성 요소는 앱 전체에 대한 상세하면서도 포괄적인 마이그레이션 전략이었습니다. 초기 통합 실험 과정에서는 단일 사용자 세션 내에서 Compose 렌더링과 View 렌더링을 모두 실행할 경우, 특히 저사양 기기에서 상당히 메모리 집약적인 작업이 되는 2 스택 문제가 있었습니다. 이 문제는 같은 페이지에서 코드를 롤아웃하는 동안뿐 아니라, 서로 다른 두 페이지(예: Play 스토어 홈 페이지와 검색 결과 페이지)가 각각 다른 스택에 있을 때에도 갑자기 발생했습니다. 이 시작 지연 시간을 개선하기 위해, Compose로 마이그레이션하는 페이지의 순서와 타임라인에 대한 구체적인 계획을 세우는 것이 중요했습니다. 또한 앱이 완전히 마이그레이션될 때까지 임시방편으로 일반 클래스를 단기적으로 변경하는 것이 도움이 된다는 점을 알 수 있었습니다.
Compose를 Android 프레임워크에서 독립시킴으로써 Jetpack Compose에 직접 기여하는 팀의 비용이 줄어 모든 개발자에게 이익이 되는 개선 사항을 빠른 시간 내에 실현할 수 있었습니다. Jetpack Compose 팀과 협력하여 LazyList 항목 유형 캐싱과 같은 기능을 출시하고 추가 객체 할당과 같은 간단한 수정 작업을 빠르게 진행할 수 있었습니다.
Play 스토어의 Compose 채택은 저희 팀의 개발자 만족도에 큰 도움이 되었으며 코드 품질과 상태의 대폭적 향상이 이루어졌습니다. 모든 새로운 Play 스토어 기능은 이 프레임워크를 기반으로 하며, Compose는 앱의 속도 향상과 더욱 매끄러운 안착을 실현하는 데 중요한 역할을 했습니다. Compose 마이그레이션 전략의 특성 때문에 APK 크기 변화 또는 개발 속도와 같은 사항을 면밀히 측정할 수는 없었지만, 확인할 수 있는 모든 부분에서는 매우 긍정적으로 보입니다!