Android vitals를 사용하여 앱의 성능, 안정성, 크기 개선하기

  • 테스트
  • 개발
  • 분석

성능과 안정성은 Google Play의 긍정적인 평가와 직결됩니다. 문제를 해결하고 오류를 방지하면 사용자 환경을 개선하고, 평점을 높이며, 설치 후 제거하지 않은 사용자의 수를 늘릴 수 있습니다. 또한 앱 크기를 줄이면 설치율을 높이고 제거 수를 줄일 수 있습니다.

효과가 있는 이유

Android vitals는 안정성, 전원, 버벅거림, 시작 시간, 권한 거부 등 앱 성능과 관련된 측정항목을 표시합니다. 이러한 측정항목을 추적하면 사용자 환경에 직접 영향을 미치는 잘못된 앱 동작을 파악하고 해결할 수 있습니다. 또한 핵심 vitals가 갑자기 변경되어 조사가 필요한 비정상 이벤트와 벤치마크가 표시되기 때문에 앱의 성능을 비슷한 앱이나 선택한 앱과 비교할 수 있습니다. 측정항목 값이 높은 앱은 프로모션에 적합하기 때문에 Google Play 스토어 검색에서의 순위도 높아집니다. 또한 Google Play의 신규 및 업데이트 컬렉션, 에디터 추천 컬렉션에 포함되거나 Google Play 어워즈 후보작으로 지명될 가능성이 높습니다.

주요 측정항목

  • 안정성 | ANR 발생률: 일일 세션 동안 애플리케이션 응답 없음(ANR)을 1회 이상 경험한 사용자의 비율입니다. 일반적으로 ANR은 UI 스레드 및 백그라운드 프로세스(broadcast receiver)가 교착 상태이거나 느려지는 경우 발생합니다.
  • 안정성 | 비정상 종료 발생률: 일일 세션 동안 비정상 종료를 1회 이상 경험한 사용자의 비율입니다. 비정상 종료는 예외가 제대로 처리되지 않거나, 리소스가 고갈되거나, 어설션에 실패하거나, 그 밖의 예기치 못한 상태로 인해 발생하는 경우가 많습니다.
  • 렌더링 시간 | 16ms(60fps): 렌더링 시간이 16ms를 초과한 프레임이 50% 이상인 일일 세션의 비율에 관한 정보가 표시됩니다. 앱과 사용자의 상호작용은 초당 60프레임으로 실행되어야 하며, 프레임 누락이나 지연이 발생하지 않아야 합니다.
  • 렌더링 시간 | 700ms: 하루 동안 렌더링 시간이 700ms를 초과한 프레임이 0.1% 이상인 현상을 경험한 사용자의 비율입니다. 위에서 설명한 바와 같이 렌더링 시간이 길어지면 앱이 매끄럽게 작동하지 않게 되므로 사용자 환경의 품질이 악화됩니다. 렌더링하는 데 700ms 이상 걸리는 프레임이 있는 경우 앱이 멈춘 것처럼 보일 수 있습니다.
  • 배터리 | 부분적인 wake lock: 하루 동안 1시간을 초과하는 wake lock을 1회 이상 경험한 사용자의 비율입니다. 부분적인 장기간 wake lock은 유휴 상태에 있는 기기가 절전 모드로 들어가거나 배터리를 절약하지 못하게 방해합니다.
  • 배터리 | Wakeup: 기기가 완전히 충전된 이후 시간당 60회 이상의 wakeup을 경험한 사용자의 비율입니다. 앱이 사용되지 않을 때 시간 기반의 작업을 수행하는 알람으로 인해 wakeup이 빈번하게 발생하게 되면 유휴 상태의 기기가 절전 모드로 들어가지 못합니다.
  • 시작 시간: 사용자가 콜드, 웜, 핫 시작 시간 지연을 경험한 세션 비율입니다. 시작 시간 지연은 다양한 문제로 인해 야기될 수 있지만 일반적으로 앱을 초기화할 때 작업 부하가 과중하거나 복잡한 로직을 실행하는 경우에 발생합니다.
  • 권한 거부: 사용자가 권한을 거부하거나 다시 묻지 않음을 선택한 일일 권한 세션의 비율입니다. 권한 거부는 사용자가 권한 요청의 이유를 분명히 알지 못하거나 요청이 불필요하거나 불합리하다고 생각하고 있음을 나타낼 수도 있습니다.
  • 앱 크기: 앱의 다운로드 크기 및 기기 내에서 차지하는 크기를 추적하여 이러한 측정항목을 유사한 앱과 비교합니다. 또한 저장용량이 적은 기기의 활성 사용자와 제거 측정항목을 확인하세요. 출시한 앱의 분석 결과를 바탕으로 앱 크기를 줄이는 방법에 관한 최적화된 추천을 받으세요.

권장사항

  • 비정상적인 동작에 관해 생각해 보고, 이러한 동작을 없앱니다. 앱 개발 시 앱이 다양한 환경에서 어떻게 작동할지 생각해 보세요. 예를 들어 모든 기능을 갖춘 고급형 기기에서 앱을 테스트하고 있다면 전력, 메모리, 대역폭, CPU/GPI 성능이 제한적인 저가형 기기에서는 앱이 어떻게 작동할지 생각해 보세요. 사전 출시 보고서를 사용하여 출시하기 전에 더 광범위한 기기에서 앱을 테스트해 보세요.
  • 새로운 앱 버전을 출시한 후 Android vitals를 확인합니다. 새로운 앱을 게시하고 나면 Android vitals를 통해 앱이 실제로 프로덕션 기기에서 어떤 성능을 보여주는지 알려주는 측정항목이 제공됩니다. 이를 통해 특정 기기 및 Android 버전을 사용하는 사용자에게 영향을 미치는 문제와 비정상적인 동작에는 어떤 것이 있는지 파악할 수 있습니다.
  • 문제가 발생하는 기기를 파악합니다. 앱이 특정 기기에서만 비정상적인 동작을 보일 수도 있고, 여러 기기에서 보일 수도 있습니다. 사용자 환경에 미치는 영향 및 영향을 받는 기기/사용자 수에 따라 해결책이 제공될 때까지 앱의 기기 타겟팅을 업데이트하여 이러한 기기를 배제할 수 있습니다.
  • 문제가 있는 Android 버전 식별: 앱이 특정 Android 버전에서만 비정상적인 동작을 보일 수도 있습니다. 소수의 사용자만 사용하는 구형 Android 버전의 경우 앱을 업데이트하여 비정상적인 동작을 제거하거나 앱의 매니페스트에 있는 <uses-sdk> 요소의 android:minSdkVersion 속성을 업데이트하여 앱이 비정상적인 동작을 보이지 않는 API 수준으로 설정할 수도 있습니다. 새로운 Android 버전의 경우 새로운 Android 버전을 제외하도록 <uses-sdk> 요소의 android:maxSdkVersion 속성을 설정하는 대신 항상 앱을 업데이트하여 비정상적인 동작을 수정하시기 바랍니다
  • 오류 보고 도구를 사용하여 비정상 종료 및 ANR을 식별하고 추적: 오류 보고 도구, 즉 Firebase 오류 보고 또는 Crashlytics 및 Android 스튜디오 디버깅을 사용하여 비정상 종료 및 ANR로 이어지는 시나리오를 최대한 많이 식별하고 추적합니다.
  • JobScheduling API를 사용하여 wake lock 및 wakeup 방지: JobScheduler와 같은 JobScheduling API를 사용하여 백그라운드 프로세스 및 작업을 효율적으로 예약합니다. 이렇게 하면 플랫폼에서 유휴 상태를 더욱 효과적으로 관리하여 배터리 수명을 절약할 수 있습니다.
  • FrameMetrics API를 사용하여 느린 렌더링 시간 파악: FrameMetrics를 사용하여 프로덕션 단계에 있는 기기의 세부사항, 상호작용별 프레임 렌더링 시간을 측정합니다. 이를 통해 USB를 통해 연결된 테스트 기기에 의존하지 않고도 프로덕션 기기에서 버벅거림을 유발하는 특정 상호작용이나 이벤트를 식별할 수 있습니다.
  • 권한 요청 관련 권장사항 준수: 권한을 요청하기 전에 사용자에게 안내를 제공하고 권한을 허용하면 즉시 혜택을 받을 수 있도록 하세요. 사용자가 권한 거부를 취소하도록 도와주고 앱이 작동할 수 있도록 올바르게 설정했는지도 확인합니다.
  • 사전 출시 보고서를 사용하여 실제 기기에서 앱을 테스트하고 업데이트를 게시하기 전에 문제를 파악 및 수정합니다.
  • Android App Bundle을 사용하도록 전환하여 코드를 리팩터링하지 않고 앱 크기를 줄일 수 있는 앱을 빌드 및 출시하는 효율적인 방법을 활용하세요.