나는 음악을 정말 좋아한다. 장르를 가리지 않고 그 날의 기분이나 분위기에 맞는 음악을 버스, 지하철에서 듣는다.
그리고 우연히 모 회사에서 뮤직 스트리밍 앱 개발자를 뽑는다는 공고를 보고 음악 앱을 만드는 방법에 대해 생각했었다.
백그라운드에서 돌아갈 수 있게 Service를 만들고, 음악을 재생하면 되겠지?
그리고 자료를 찾아 봤는데, 생각보다 자료가 많이 나와있지 않았다.
그나마 영어 자료는 많지만 한국어 자료들은 오래된 것들이 대부분이고 최근 것들은 부족했었다.
그래서 내가 한번 Compose로 간단한 음악 스트리밍 앱을 만들어 보기로 했다.
클린 아키텍쳐, MVVM을 이야기 하는 것이 아니다.
백그라운드에서도 음악을 재생하려면 Service에 그 기능이 있어야겠다고 생각했다.
그리고 앱이 ForeGround에 있다면 보여줘야 할 Activity와 Service에서 재생되고 있는 음악이 따로 있어야 할텐데,
두 컴포넌트에서 어떻게 통신해야 할까?
다행히 안드로이드에서는 아래와 같은 구조로 짜라고 가이드를 준다.
(역시 친절한 Android...)
처음 보는 단어들이 많이 나온다.
문서에는 저 단어들을 정리한 표를 보여주는데 그 표를 간단히 정리하자면 다음과 같다.
크게 본다면 재생하는 주체인 ExoPlayer, 중간다리 역할을 하는 MediaSession, 그리고 재생하는 주체가 아님에도 마치 재생하는 주체처럼 컨트롤 할 수 있게 하는 MediaController가 있다.
/로 구분지어 놓은 MediaLibraryService와 MediaBrowser가 눈에 띈다.
MediaLibraryService는 MediaSessionService를 상속받고 있다.
공식 문서에서는 아래와 같이 설명하는데

MediaLibraryService는 MediaSessionService와 비슷하며 content library를 제공할 수 있게 한다는 것이다.
그리고 이 제공한 것들을 브라우징 할 수 있는 녀석이 MediaBrowser이다.
멜론이나 라인 뮤직과 같은 앱 들은 빅스비, 시리로도 실행이 가능한데 이처럼 다른 앱에서 접근하여 음악 목록들을 탐색할 수 있게 하려면 MediaLibraryService 사용해야 한다!(혹은 아래 설명할 MediaBrowserService)
자세한 내용은 아래 공식 문서에서 확인할 수 있다.
찾아보니 옛날 문서에는 MediaBrowserService라는 것이 있었다.
이름 그대로 미디어를 브라우징(찾는)역할을 할 수 있는 서비스라는 것인데...

앨범에 있는 트랙, 혹은 오디오북 처럼 음악을 탐색할 때 사용되는 Service라는 것이다.
두 Service를 비교하는 글이 없어서 어떤 것이 달라졌는지 찾기 힘들었지만, 제미나이의 답변은 아래와 같았다.

보면 MediaLibraryService는 외부 클라이언트가 Service에서 음악을 탐색할 수 있지만, MediaBrowserService는 외부 클라이언트가 Service에서 음악을 탐색할 수 없는 것 같다.
(믿을만 한가...?)
정리하면
MediaLibraryService는 미디어 라이브러리를 외부에서 탐색할 수 있도록 제공하는 역할MediaBrowserService는 미디어 라이브러리를 내부에서 탐색하는 역할MediaLibraryService와 함께 나오는 키워드들이 Android Auto랑 Google Assistance이니, 아마 Media3로 넘어오면서 이런 기능 연계가 중요해진게 아닐까?
이것들은 뭐길래 내 Service에 접근하는 것일까?
우리가 음악 앱을 보통 사용하면 이어폰 버튼으로 음악을 재생하거나 멈추는 행동을 많이 한다.
당연히 외부에서 음악을 조절할 수 있어야 하는 것이다...!
그리고 플레이스토어에서 깔 수 있는 음악 꺼주는 앱들도 있다. 이런 앱들이 음악을 꺼줘야 한다.
대부분의 앱 들은 빅스비, 시리로 실행 가능하다. 또한 여러 상황에 맞는 앱을 구현하려면 역시 MediaLibraryService로 구현하는 것이 알맞다고 생각했다.
그럼 자연스럽게 MediaBrowser로 탐색하여 UI에 제공. 그리고 이 기능을 이용하여 Activity와 Compose를 구현하면 되겠다!
Android의 4대 컴포넌트인 Activity, Service, Content Provider, BroadCast Reciever는 면접 단골 질문이다.
그래서 단어들은 다들 익숙하지만, 막상 사용한 것은 Activity밖에 없었다.
이번 기회에 Service를 사용하는 방법을 잘 알 수 있을 것 같다.
그래서 다음 번에는 Service를 이용하여 음악을 재생하는 방법을 알아 보자!