Google Play Services는 Android에서 Google 시스템 서비스의 계층으로, Google Maps부터 Firebase 및 Google Sign-In까지 모든 Google 앱과 API를 구동합니다. Play Services는 별도의 APK 패키지로 작동하며, Android 펌웨어 업데이트와 독립적으로 Google Play Store를 통해 자동 업데이트됩니다.Android Developers, 2025에 따르면 Google Play Services는 활성 Android 기기의 99.8%에 설치되어 있으며 50개 이상의 개별 모듈을 포함합니다.
핵심 사항
Google Play Services는 Android 운영 체제 위에서 실행되는 Google 서비스의 독점 계층입니다. 기본 라이브러리만 포함하는 AOSP(Android Open Source Project)와 달리 Play Services는 Google 생태계와의 통합을 위한 API(지도, 위치 정보, 인증, 푸시 알림, 광고, 결제)를 제공합니다. Play Services는 상승된 권한을 가진 시스템 애플리케이션으로 설치되며 일반 애플리케이션에서 사용할 수 없는 API에 액세스할 수 있습니다.
Google Play Services와 표준 Android 라이브러리의 주요 차이점은 Play Store를 통한 업데이트 기능입니다. Google이 Maps SDK 또는 Auth API의 새 버전을 출시하면 사용자는 제조사의 OTA 펌웨어 업데이트를 기다리지 않고 Play Services를 통해 업데이트를 받습니다. 이는 Android 파편화 문제를 해결합니다 — Statista(2025)에 따르면 약 40%의 Android 기기가 3년 이상 된 OS 버전에서 실행되지만, 85%의 기기에서 Play Services가 최신 버전으로 업데이트되어 있습니다.
Google Play Services는 Android Open Source Project의 일부가 아니며 Google 라이선스가 없는 기기(예: 2019년 이후 Huawei)에서 사용할 수 없습니다. GMS가 없는 기기에서 실행되는 애플리케이션의 경우 Google은 크로스 플랫폼 지원이 포함된 Firebase SDK를 사용하거나 대체 솔루션(Huawei Mobile Services)으로 전환할 것을 권장합니다.
Google Play Services의 아키텍처는 각각 고유한 기능을 담당하는 독립 모듈(APK 패키지) 세트로 구축됩니다. 기본 APK(com.google.android.gms)에는 핵심 서비스와 필요 시 로드되는 약 50개의 추가 모듈이 포함됩니다. 사용자 프로세스는 Google Play Services process라고 하며 상승된 우선순위로 백그라운드에서 실행됩니다.
각 Google Play Services 모듈에는 자체 버전과 API가 있습니다. 개발자는 build.gradle을 통해 필요한 모듈만 연결하여 애플리케이션 크기를 줄입니다. 예를 들어 Google Sign-In에는 com.google.android.gms:play-services-auth가 필요하고 Google Maps에는 play-services-maps가 필요합니다. Google Play Services는 모듈 간 종속성을 자동으로 해결하고 누락된 구성 요소를 로드합니다.
| 구성 요소 | Gradle 패키지 | 기능 |
|---|---|---|
| Auth | play-services-auth | Google Sign-In, Credential Manager, ID Token |
| Maps | play-services-maps | Google Maps SDK 지도 렌더링, 카메라 |
| Location | play-services-location | FusedLocationProvider, 지오펜스, Activity Recognition |
| Ads | play-services-ads | Google Mobile Ads, AdMob, Ad Manager |
| Wallet | play-services-wallet | Google Pay, Passes, 결제 API |
| SafetyNet | play-services-safetynet | 기기 확인, reCAPTCHA, 증명 |
애플리케이션과 Play Services 간의 상호 작용은 AIDL(Android Interface Definition Language)을 통해 발생합니다. 애플리케이션이 SDK 메서드를 호출하면 SDK가 Google Play Services 프로세스에 IPC 요청을 보내고, 프로세스가 실제 작업(Google 서버에 네트워크 요청, GPS 작업, 암호화)을 수행합니다. Play Services 프로세스는 애플리케이션과 격리되어 있어 — 충돌이 발생해도 애플리케이션은 계속 실행됩니다.
Google Play Services는 Google Play Store를 통해 자동으로 업데이트됩니다 — 사용자는 확인 없이 백그라운드에서 새 버전을 받습니다. 업데이트는 단계적으로 출시됩니다(단계적 출시): 먼저 1% 기기, 그다음 10%, 50%, 100%. 새 버전에서 심각한 오류가 발견되면 Google은 24시간 이내에 안정적인 버전으로 롤백할 수 있습니다.
Google Play Services 버전은 두 숫자로 인코딩됩니다: APK 버전(예: 25.15.32) 및 SDK 버전(예: 12.8.0). 개발자는 GoogleApiAvailability를 통해 기기의 Play Services 버전을 확인해야 합니다 — 사용자가 자동 업데이트를 비활성화했거나 사용자 정의 ROM을 사용하는 경우 버전이 오래되었을 수 있습니다. Google에 따르면 활성 기기의 평균 Play Services 버전은 6개월 이상 오래되지 않았습니다.
// 기기에서 Google Play Services 버전 확인
val availability = GoogleApiAvailability.getInstance()
val resultCode = availability.isGooglePlayServicesAvailable(context)
when (resultCode) {
ConnectionResult.SUCCESS ->
Log.d("GMS", "Google Play Services 사용 가능")
ConnectionResult.SERVICE_MISSING,
ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED -> {
// 업데이트 대화상자 표시
availability.showErrorDialogFragment(
activity, resultCode, REQUEST_CODE
)
}
}버전 문제: Google Play Services가 비활성화된 경우(사용자가 설정에서 수동으로 비활성화한 경우) 모든 Google API가 작동을 중지합니다. 애플리케이션은 Google API 호출 전에 Play Services 가용성을 확인하고 설정으로 이동하거나 Play Services를 다운로드하는 버튼과 함께 명확한 메시지를 사용자에게 표시해야 합니다. Google은 showErrorDialogFragment를 통해 오류 대화상자를 제공하며, 이는 자동으로 Play Store로 이동합니다.
Google Play Services Auth는 Google Sign-In, Credential Manager 및 Smart Lock for Passwords를 제공하는 인증 모듈입니다. 2024년부터 Google은 모든 인증 유형에 대한 통합 API로 Credential Manager를 권장합니다. Google Play Services Maps는 Google 지도 렌더링, 지오코딩, Places API 및 경로 안내를 제공합니다. Location은 Fused Location Provider를 제공하며, GPS, Wi-Fi 및 셀룰러 데이터를 결합하여 최소 전력 소비로 정확한 위치를 파악합니다.
Google Play Services Wallet 모듈은 앱 및 웹사이트에서 결제를 위한 Google Pay와 Google Passes(로열티 카드, 탑승권, 티켓)를 지원합니다. SafetyNet(Play Integrity API로 대체 중) — 기기 무결성 확인: 루트 액세스, 사용자 정의 ROM, 에뮬레이터. Play Integrity API(2024년부터 권장)는 더 정확한 검증을 제공합니다: 기기 무결성, 앱 무결성(서명), 계정 무결성(Google 계정).
// FusedLocationProvider를 통한 위치 요청
val fusedClient = LocationServices.getFusedLocationProviderClient(context)
val locationRequest = LocationRequest.Builder()
.setPriority(Priority.PRIORITY_HIGH_ACCURACY)
.setInterval(10000)
.setFastestInterval(5000)
.build()
if (ActivityCompat.checkSelfPermission(
context, Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED) {
fusedClient.requestLocationUpdates(
locationRequest,
locationCallback,
Looper.getMainLooper()
)
}Google Play Services Awareness 모듈은 위치, 시간, 날씨, 사용자 활동 및 연결된 헤드폰에 대한 데이터를 통합하는 복합 API입니다. Awareness API를 통해 앱은 컨텍스트에 반응할 수 있습니다: 예를 들어 사용자가 직장에 있을 때 무음 모드를 활성화하거나 외출 전에 비 알림을 표시합니다. API는 Play Services 16.0.0부터 사용 가능합니다.
Google Play Services를 Android 프로젝트에 통합하려면 앱 수준 build.gradle에 종속성을 추가합니다. Google은 APK 크기를 줄이기 위해 일반 play-services-all 패키지 대신 개별 모듈 종속성을 사용할 것을 권장합니다. 최소 Play Services SDK 버전은 21.0.0(Android 14에 해당)이지만 대부분의 모듈은 API 19+를 지원합니다.
통합을 위해서는 Google Services Gradle Plugin과 google-services.json 파일 설정이 필요하며, 이 파일은 Firebase Console에서 다운로드됩니다. JSON 파일에는 프로젝트 식별자, API 키 및 OAuth용 Client ID가 포함되어 있습니다. google-services.json이 없으면 대부분의 Play Services 모듈이 Google 서버에서 인증할 수 없습니다. 프로젝트가 Firebase를 사용하지 않는 경우 AndroidManifest.xml에 API 키를 추가하는 것으로 충분합니다.
// build.gradle(프로젝트 수준)
buildscript {
dependencies {
classpath "com.google.gms:google-services:4.4.2"
}
}
// build.gradle(앱 수준)
apply plugin: 'com.google.gms.google-services'
dependencies {
implementation "com.google.android.gms:play-services-auth:21.2.0"
implementation "com.google.android.gms:play-services-maps:19.0.0"
implementation "com.google.android.gms:play-services-location:21.3.0"
}중요한 세부 사항: 서로 다른 Google Play Services 모듈은 서로 다른 버전을 필요로 할 수 있습니다. 한 모듈이 play-services-basement 버전 18.0.0을 필요로 하고 다른 모듈이 18.1.0을 필요로 하는 경우 Gradle은 상위 버전을 우선하여 충돌을 해결합니다. 변수를 통해 모든 모듈에 단일 버전을 사용하는 것이 좋습니다: ext.playServicesVersion = '21.2.0'. Google Play Services는 compileSdk 버전에도 의존합니다 — 버전 21.0.0에는 compileSdk 34+가 필요합니다.
Google Play Services가 없는 기기(Huawei, Honor, 일부 중국 브랜드)는 GMS가 제공하는 API를 사용할 수 없습니다. 이러한 기기의 경우 Google은 Play Services 없이 작동하는 크로스 플랫폼 라이브러리를 포함한 Firebase SDK를 권장합니다. Firebase Authentication은 REST API를 직접 사용하고, Firebase Realtime Database는 WebSocket 연결을 사용하며, Firebase Cloud Messaging은 자체 프로토콜을 사용합니다.
대안적인 접근 방식은 유사한 API(Huawei Maps Kit, Location Kit, Push Kit)를 제공하는 Huawei Mobile Services(HMS)를 사용하는 것입니다. 두 유형의 기기를 모두 지원하기 위해 개발자는 시작 시 GMS 또는 HMS 가용성을 감지하고 적절한 SDK를 연결하는 추상 계층을 구현합니다. Counterpoint Research(2025)에 따르면 GMS가 없는 기기는 전 세계 Android 시장의 약 5%를 차지합니다.
// 기기에서 GMS 가용성 확인
fun isGmsAvailable(): Boolean {
return try {
GoogleApiAvailability.getInstance()
.isGooglePlayServicesAvailable(context) ==
ConnectionResult.SUCCESS
} catch (e: Exception) {
false
}
}
// GMS/HMS 추상 계층
interface PushService {
fun getToken(): String
}
class GmsPushService : PushService {
override fun getToken() =
FirebaseMessaging.getInstance().token.await()
}GMS가 없는 기기에서 실행되는 애플리케이션의 경우 Google API를 사용하는 모든 기능을 테스트하는 것이 중요합니다. Play Services는 서비스를 찾을 수 없는 경우 SERVICE_MISSING 오류를 반환합니다. 적절한 저하(Graceful Degradation)가 권장됩니다: Google Sign-In을 사용할 수 없는 경우 이메일 로그인을 제공하고, Google Maps를 사용할 수 없는 경우 Yandex.Maps 또는 OpenStreetMap으로 WebView를 표시합니다. Huawei AppGallery는 전 세계 Android 애플리케이션의 약 15%를 게시합니다.
Google Play Services 가용성을 확인하고 가능한 모든 상태(서비스 사용 가능, 업데이트 필요, 서비스 비활성화, 서비스 없음)를 처리하는 완전한 예제입니다. 코드는 확인에 GoogleApiAvailability를 사용하고 Play Store로 이동하는 Google의 표준 대화상자를 표시하기 위해 showErrorDialogFragment를 사용합니다.
class GmsCheckActivity : AppCompatActivity() {
companion object {
private const val REQ_UPDATE = 1001
}
fun checkGooglePlayServices() {
val api = GoogleApiAvailability.getInstance()
when (api.isGooglePlayServicesAvailable(this)) {
ConnectionResult.SUCCESS ->
initializeApp()
ConnectionResult.SERVICE_DISABLED ->
showSettingsDialog()
ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED ->
api.showErrorDialogFragment(
this, ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED,
REQ_UPDATE
)
}
}
override fun onActivityResult(request: Int,
result: Int, data: Intent?) {
super.onActivityResult(request, result, data)
if (request == REQ_UPDATE && result == RESULT_OK)
initializeApp()
}
}처음뿐만 아니라 모든 앱 실행 시 Google Play Services 가용성을 확인하는 것이 좋습니다. 사용자는 애플리케이션 설치 후 설정에서 Play Services를 비활성화할 수 있으며, 이 경우 모든 Google API가 중단됩니다. 중요한 기능(예: Google Pay 결제)의 경우 확인이 필수적이어야 합니다 — Play Services 없이는 애플리케이션이 결제를 처리할 수 없습니다.
Play Core는 애플리케이션 모듈 관리, 런타임 업데이트 및 추가 리소스 다운로드를 위한 Google Play Services 라이브러리입니다. Play Core는 Dynamic Delivery를 가능하게 합니다 — 애플리케이션 모듈의 주문형 전달: 사용자가 기본 애플리케이션을 다운로드하고 추가 기능(예: 관리 모듈 또는 프리미엄 콘텐츠)은 사용자가 해당 화면을 처음 열 때만 다운로드됩니다.
Google Play Services Play Core를 통한 모듈식 전달은 초기 애플리케이션 설치 크기를 30~50% 줄입니다. 이는 인터넷이 느린 시장에서 특히 중요합니다 — Google Play Console에 따르면 10MB마다 설치 전환율이 1% 감소합니다. Play Core SDK에는 Android 5.0(API 21) 및 Google Play Services 21.0.0+가 필요합니다. 중요: 모듈이 다운로드되면 삭제할 수 없으며 전체 앱 업데이트로만 업데이트할 수 있습니다.
// Play Core를 통한 주문형 모듈 로딩
val manager = SplitInstallManagerFactory.create(context)
val request = SplitInstallRequest
.Builder()
.addModule("premium")
.build()
manager.startInstall(request)
.addOnSuccessListener {
Log.d("Split", "프리미엄 모듈 로드됨")
}Play Core로 마이그레이션하려면 애플리케이션 아키텍처 변경이 필요합니다: 기능을 Android Studio에서 주문형 모듈로 분할하고 Gradle이 각 모듈을 별도의 APK로 빌드합니다. Google Play Store는 APK Set(Android App Bundle)을 조립하고 사용자에게 기본 APK만 전달합니다. Play Core는 인앱 업데이트도 지원합니다 — 사용자는 Play Store에 가지 않고도 앱을 업데이트할 수 있습니다. 2026년까지 Google Play의 약 70% 애플리케이션이 Android App Bundle과 Play Core를 사용합니다.
자주 묻는 질문
Google Play Services를 삭제하면 모든 Google 서비스(Google Maps, Google Sign-In, FCM 푸시 알림, Google Pay, Play Integrity)가 작동을 중지합니다. 이러한 API를 사용하는 애플리케이션은 오류를 표시하거나 충돌합니다. 대부분의 기기에서 Play Services는 표준 방법으로 삭제할 수 없으며 — 설정에서만 비활성화할 수 있습니다.
Google Play Services는 Play Store를 통해 자동으로 업데이트됩니다. 수동 업데이트: Play Store 열기 → 내 앱 및 게임 → Google Play Services 찾기 → 업데이트. 업데이트를 사용할 수 없는 경우 APKMirror에서 최신 버전의 APK를 다운로드합니다(고급 사용자만 해당). 자동 업데이트는 일반적으로 출시 후 2주 이내에 이루어집니다.
최소 지원 버전은 Android 4.4 KitKat(API 19)입니다. 그러나 일부 모듈(예: Credential Manager)은 Android 6.0(API 23) 이상이 필요합니다. 최신 개발을 위해 Google은 Android 14(API 34)를 대상으로 하고 Play Services 버전 21.0.0+를 사용할 것을 권장합니다. Android 4.4의 오래된 기기는 중요한 Play Services 업데이트만 받습니다.
예, Firebase SDK는 GMS가 없는 기기에서 Google Play Services 없이도 작동할 수 있습니다. Firebase Authentication, Realtime Database, Firestore, Cloud Functions 및 Hosting은 Play Services가 필요하지 않습니다. Firebase Cloud Messaging(FCM)은 GMS 대신 직접 HTTP 프로토콜을 사용할 수 있습니다. 그러나 Firebase Crashlytics 및 Performance Monitoring은 데이터 수집을 위해 Play Services가 필요합니다.
기본 Google Play Services APK는 시스템 파티션에서 약 80~120MB를 차지합니다. 추가 모듈(지도, auth, location)은 필요 시 다운로드되며 10~50MB를 추가할 수 있습니다. 비교를 위해 iOS의 Apple Push Notification Service는 약 5MB입니다. 크기에도 불구하고 Play Services는 사용 가능한 사용자 저장 공간에 영향을 미치지 않습니다 — 시스템 파티션에 있습니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.