2007년에 설립된 JioSaavn은 음악과 팟캐스트를 위한 선도적인 오디오 스트리밍 서비스입니다. 음반사는 900개 이상의 음반사 파트너십을 맺고 16개 언어로 8천만 개 이상의 트랙을 스트리밍합니다. JioSaavn 앱은 인도에서 6개 지역 언어로도 제공됩니다.
JioSaavn은 1억 명이 넘는 월간 활성 사용자 (MAU)를 지원하는 기술 스택을 통해 규모와 속도로 운영됩니다. 이러한 잠재고객은 보통 리소스가 제한된 Android 휴대전화를 사용하므로 JioSaavn 팀에 가장 중요한 사용자 경험을 제공합니다.
과제
저사양 휴대기기에서 볼 수 있는 것과 같이 제약이 심한 환경에서 최적화하는 작업은 엔지니어링의 관점에서 봤을 때 어렵고 흥미로울 수 있습니다. JioSaavn이 직면한 과제는 중급형 휴대기기를 사용하여 주요 타겟층에 맞게 사용자 경험을 최적화하는 것이었으며 주로 인도의 계층 2 및 3 도시에서 찾을 수 있었습니다.
유입경로를 분석한 결과 앱을 실행하되 노래를 듣지 않는 사용자가 상당히 많다는 것이 분명했습니다. 팀에서는 앱 시작 시간이 원인으로 판단했습니다. 따라서 앱 시작 시간을 개선하면 앱의 리스너 수가 늘어났습니다.
실험 방식
JioSaavn은 이러한 문제를 분석하고 지속 가능한 솔루션을 찾기 위해 종합적인 분석과 Perfetto, dumpsys 같은 강력한 도구 세트를 사용했습니다. 팀에서는 작업 병렬화와 지연 시간이라는 두 가지 원칙을 사용하여 이 문제에 접근했습니다.
Google의 분석을 바탕으로 팀은 작업의 우선순위를 정했습니다.
- systrace 및 perfetto를 사용하여 앱 흐름을 연구하고, 고충사항을 분석하고, 앱 시작 시간의 개선사항을 검증했습니다.
- 지연된 초기화: 홈페이지가 표시될 때까지 지연될 수 있는 프래그먼트/인스턴스/클래스 초기화를 식별했습니다.
- Google Ads
- 음악 서비스 (포그라운드 서비스) 및 플레이어 리소스 (예: Exoplayer, 캐시된 플레이어 대기열 등)
- 시작 시 최소화되는 플레이어 프래그먼트
- 주문형 초기화: 라이브러리가 필요할 때 다양한 라이브러리 (예: Facebook lib)를 초기화합니다.
- viewStub: 뷰 확장이 및 리소스 로드가 많았습니다. 팀은 viewStub을 사용하여 레이아웃을 평면화하고 이미지를 webP로 변환했습니다.
- 작업자 스레드: UI 스레드가 필요하지 않은 일부 작업은 b/g 스레드로 이동하여 UI 스레드를 확보했습니다.
- 분할 캐시 데이터 - 파일에서 대량의 캐시된 데이터를 읽고 파싱하는 데 시간이 오래 걸립니다. 팀은 데이터를 중요한 데이터 (홈페이지 표시에 필요)와 중요하지 않은 데이터로 분할했습니다.
- Async LayoutInflater: 홈페이지 recyclerview에 필요한 일부 뷰가 Async LayoutInflater를 사용하여 미리 확장되었습니다.
사용된 도구 - Perfetto, Systrace, Google Play vitals, Android 스튜디오 프로파일러, Firebase 성능 SDK
결과
JioSaavn팀은 앱 안정성을 유지하기 위해 여러 버전의 앱을 대상으로 이러한 변경사항을 배포했습니다. 다음과 같은 성과를 달성했습니다.
- 모든 기기에서 앱 시작 시간이 30%, 중저가형 기기에서 35~40% 개선되었습니다.
- 홈 화면 시청자/ DAU가 5% 개선되어 이탈률이 감소함
이 최적화 연습을 통해 팀 전체가 협력하게 되었습니다. 세부 둘러보기를 통해 팀이 변경사항에 익숙해지고 앱에 대한 성과 중심의 접근 방식을 취하도록 유도했습니다.
"JioSaavn은 합리적인 가격의 스펙트럼을 포괄하는 다양한 지역과
도시에서 온 사용자들의 청취 환경을 개선하는 것을 목표로 하고 있습니다. 따라서 사용자 지역의 모바일 연결 인프라를 넘어서는 것은 사용자의 기기 성능에 맞춰 사용자 환경을 최적화하는 것을 늘 해결하기 위해 노력하고 있습니다. Google의 개발자 관계 가이드 덕분에 이 방향으로 확고히 나아갈 수 있었습니다.”– JioSaavn 제품팀