
안드로이드는 정말 오픈소스일까?
안드로이드는 오픈소스라고들 하죠. 맞는 말인데 절반만 맞아요. 운영체제 코드는 AOSP(Android Open Source Project)라는 이름으로 공개돼 있어요. 그런데 우리가 매일 쓰는 앱 상당수는 Google Play 서비스라는 비공개 구성요소에 기대고 있거든요. 푸시 알림, 위치 정보, 구글 계정 로그인, 지도, 앱 무결성 검사까지 다 여기에 달려 있어요. 이게 없으면 앱이 아예 안 켜지거나, 켜지더라도 알림이 안 오는 경우가 수두룩해요.
microG는 바로 이 Play 서비스를 자유 소프트웨어로 다시 구현한 프로젝트예요. 핵심 구성요소인 GmsCore 저장소의 위키에는 프로젝트 구성, 설치 방법, 지원 기능 같은 내용이 정리돼 있어요. 이번 기회에 microG가 어떻게 동작하고 어디까지 가능한지 자세히 들여다볼게요.
Play 서비스는 ‘대리인’이에요
Play 서비스는 앱과 구글 서버 사이에서 일을 대신 처리해주는 대리인이에요. 앱이 “푸시 알림 받을 토큰 하나 발급해줘”라고 요청하면, Play 서비스가 구글 서버와 통신해서 결과를 돌려주는 식이죠. 앱들은 com.google.android.gms라는 패키지에 정해진 인터페이스로 말을 걸어요.
microG의 아이디어는 단순해요. 같은 패키지 이름으로 같은 인터페이스를 제공하는 앱을 만들면, 앱 입장에서는 진짜 Play 서비스와 구분할 수가 없다는 거예요. 그래서 앱 코드를 한 줄도 안 바꾸고 구글 로그인, Firebase Cloud Messaging(FCM) 푸시, 위치 서비스, 지도 API 일부 등을 쓸 수 있어요. 코로나19 때는 접촉 알림(Exposure Notification) API까지 구현해서, 각국 방역 앱이 microG 환경에서도 돌아가게 만들기도 했어요.
여기서 오해하기 쉬운 점이 하나 있어요. microG도 푸시나 로그인 같은 기능은 결국 구글 서버와 통신해요. 구글을 완전히 끊는 게 아니라, 진짜 Play 서비스처럼 기기 정보를 폭넓게 보내지 않고 기능에 꼭 필요한 만큼만 주고받는 게 목표예요. 위치 기능도 구글 대신 다른 위치 데이터베이스를 쓸 수 있게 설계돼 있어요.
가장 큰 벽, 서명 스푸핑
그럼 아무 폰에나 깔면 되냐면 그렇지가 않아요. 많은 앱이 Play 서비스와 통신하기 전에 “너 진짜 구글이 서명한 앱 맞아?” 하고 확인하거든요. microG는 당연히 구글 서명을 가질 수 없어요. 그래서 운영체제가 microG에 한해서 구글 서명이 있는 것처럼 보이게 해주는 서명 스푸핑(signature spoofing) 기능이 필요해요. 이건 OS 차원에서 지원해줘야 하는 기능이에요. 그래서 보통 LineageOS for microG, /e/OS, CalyxOS처럼 microG를 염두에 두고 만든 커스텀 롬에서 쓰게 돼요.
또 하나의 벽은 Play Integrity(예전 이름은 SafetyNet)예요. 앱이 “이 기기가 변조되지 않은 정품 환경인지” 구글 서버에 물어보는 기능이에요. 판정을 구글이 내리는 구조라서, microG 환경에서는 높은 수준의 검사를 통과하기 어려운 경우가 많아요. 은행, 간편결제, 일부 게임이 주로 여기서 막혀요.
다른 선택지와 비교하면
비슷한 문제를 푸는 방법이 몇 가지 더 있어요. GrapheneOS는 정반대로 접근해요. 진짜 Play 서비스를 설치하되, 특별 권한 없이 일반 앱처럼 샌드박스 안에 가둬버리는 방식이에요. 호환성은 더 좋지만 구글의 비공개 코드를 여전히 실행한다는 차이가 있어요. 화웨이의 HMS는 미국 제재 이후 회사가 통째로 만든 대체 생태계예요. Play 서비스 없이 F-Droid 앱과 UnifiedPush 같은 대안 푸시 표준만 쓰는 극단적인 탈구글 방식도 있고요. microG는 이 가운데 ‘기존 앱 호환성’과 ‘자유 소프트웨어’ 사이의 균형점을 노리는 프로젝트라고 볼 수 있어요.
한국 개발자에게 주는 시사점
솔직히 개인 사용자가 국내에서 microG 폰을 메인으로 쓰기는 쉽지 않아요. 금융 앱의 보안 솔루션, 루팅 탐지, Play Integrity 의존도가 높아서 막히는 앱이 꽤 많거든요.
대신 앱 개발자 입장에서는 얻을 게 많아요. 우리 앱이 GMS(Google Mobile Services) 없이 어디까지 동작하는지 점검해보는 계기가 되거든요. GoogleApiAvailability로 Play 서비스가 있는지 먼저 확인하고, 없으면 기본 위치 API로 폴백하거나 푸시 대신 앱 안의 알림함을 보여주면 돼요. 이렇게 하면 기능이 빠져도 앱이 망가지지 않고 자연스럽게 동작해요. 화웨이 기기나 아마존 Fire 태블릿, 중국 시장처럼 GMS가 없는 환경을 고려해야 할 때 이 경험이 그대로 쓰여요. 안드로이드의 Binder 기반 IPC(프로세스 간 통신) 구조를 공부하는 교재로도 훌륭하고요.
마무리
microG는 “안드로이드에서 구글이 차지한 자리를 꼭 구글이 채워야 하나?”라는 질문에 코드로 답한 프로젝트예요. 여러분이 만든 앱은 Play 서비스가 없는 폰에서 어디까지 동작할까요? 한 번이라도 테스트해본 적 있으신가요?
🔗 출처: Hacker News