배터리 소모 증가 — 모바일 앱 사용자들의 가장 흔한 불만 중 하나입니다. 앱이 비정상적으로 많은 에너지를 소비하기 시작하여 백그라운드에서도 기기가 빠르게 방전됩니다. Google I/O 2023에 따르면 Google Play 앱의 최대 30%가 사용자 유지에 직접적인 영향을 미치는 에너지 소비 문제를 가지고 있습니다. 이 글에서는 원인, 진단 및 최적화 방법을 살펴보겠습니다.
주요 포인트
배터리 소모 증가는 모바일 앱이 일반적인 사용 시나리오에서 예상되는 것보다 훨씬 더 많은 에너지를 소비하는 상태입니다. 사용자는 앱을 설치하거나 업데이트한 후 기기가 20-30% 더 빨리 방전되는 것을 알게 됩니다.
최신 모바일 OS인 Android와 iOS에는 에너지 소비를 제어하는 내장 메커니즘이 있습니다. Android는 Battery Optimization을 사용하고 iOS는 Background Modes를 사용합니다. 그러나 API를 잘못 사용하면 이러한 메커니즘을 우회할 수 있습니다.
Purdue University의 연구(2021)에 따르면 약 60%의 앱이 명확한 필요 없이 백그라운드 작업에 에너지를 소비합니다. 이는 특히 광고, 분석 및 지속적인 네트워크 연결이 있는 앱에서 일반적입니다.
에너지 소비는 mA·h(밀리암페어시)로 측정됩니다. Android는 BatteryManager API를 통해 데이터를 제공하며, CPU, 무선 모듈, GPS, 디스플레이, 센서 등 각 구성 요소의 소비를 추적합니다.
val batteryManager = getSystemService(Context.BATTERY_SERVICE) as BatteryManager
val chargeCounter = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER)
val capacity = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
// chargeCounter / capacity * 100 = current charge percentage
BatteryManager API는 현재 충전량과 배터리 용량을 얻을 수 있지만 앱별 세부 정보는 제공하지 않습니다 — 이를 위해서는 시스템 유틸리티가 필요합니다.
WakeLock — 배터리에 가장 위험한 메커니즘입니다. 앱이 WakeLock을 해제하지 않고 유지하면 기기가 절전 모드로 전환되지 않습니다. WakeLock을 1시간 유지하면 약 50-80 mA·h를 소비합니다.
배치 처리되지 않은 네트워크 요청은 두 번째로 흔한 원인입니다. 앱이 네트워크 연결을 설정할 때마다 무선 모듈이 절전 모드에서 활성 모드로 전환됩니다. 5분 미만의 간격으로 빈번한 짧은 요청은 무선 모듈을 계속 활성 상태로 유지합니다.
고정밀 GPS 위치(GPS_PROVIDER)는 대략적인 위치(NETWORK_PROVIDER)보다 10-15배 더 많은 에너지를 소비합니다. 백그라운드에서 지속적인 위치 업데이트는 사용자들의 가장 흔한 불만 중 하나입니다.
Android Developers Blog에 따르면 평균 앱은 기기 전체 배터리 소모의 약 15%를 차지합니다. 이 수준을 초과하면 에너지 소비에 대한 필수 감사가 필요합니다.
Battery Historian — Google의 공식 에너지 소비 분석 도구입니다. ADB에서 BatteryStats 덤프를 받아 CPU, 네트워크, GPS, WakeLock, 디스플레이 등 구성 요소별 소비를 시각화합니다.
덤프를 생성하려면 adb shell dumpsys batterystats 명령어를 실행합니다. 2-3시간 정상 사용 후 데이터를 수집하여 분석을 위해 Battery Historian에 보고서를 업로드할 수 있습니다.
Android Energy Profiler는 Android Studio에서 실시간으로 에너지 소비를 추적합니다. 각 앱 작업에 대한 CPU, 네트워크, GPS, 디스플레이 소비를 보여줍니다.
# Reset battery stats before test
adb shell dumpsys batterystats --reset
# Use the app for 2-3 hours
# Export dump for Battery Historian
adb shell dumpsys batterystats > batterystats_dump.txt
iOS의 경우 Xcode Instruments를 통해 Energy Log를 사용합니다. CPU, 네트워크, GPU, 디스플레이, 위치 등 모듈별로 에너지 소비 데이터를 수집합니다. 읽기 시간: 세션 분석당 15-30분.
실제 iOS 기기에서는 Settings > Battery에서도 에너지 소비 통계를 확인할 수 있습니다. 앱이 소비량 상위 10위 안에 들면 최적화가 필요하다는 신호입니다.
WorkManager — 배터리 상태, 네트워크 및 Doze 모드를 고려한 백그라운드 작업의 표준 API입니다. 즉시 실행하는 대신 최적의 조건에서 작업 실행을 보장하여 백그라운드 작업에서 최대 40%의 에너지를 절약합니다.
val workRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(
Constraints.Builder()
.setRequiresCharging(true)
.setRequiresBatteryNotLow(true)
.setRequiresNetworkType(NetworkType.CONNECTED)
.build()
)
.build()
WorkManager.getInstance(this).enqueue(workRequest)
요청 배치 처리는 여러 네트워크 작업을 하나의 통신 세션으로 결합하는 것입니다. 10개의 개별 요청 대신 앱이 한 번의 배치 요청을 수행하여 무선 모듈의 활성 시간을 30초에서 2-3초로 줄입니다.
Google Play Services의 FusedLocationProviderClient는 필요한 정확도에 따라 최적의 위치 소스를 선택합니다. 백그라운드 작업의 경우 PRIORITY_BALANCED_POWER_ACCURACY 우선순위를 사용하세요 — 최소한의 배터리 소비로 최대 100미터의 정확도를 제공합니다.
iOS에서는 Continuous Location 대신 Significant Location Change를 사용하세요. 몇 초마다가 아니라 중요한 이동(500미터 이상)이 있을 때만 업데이트를 받을 수 있습니다.
Android Battery Historian — Google의 BatteryStats 데이터 시각화 웹 도구입니다. 덤프 가져오기, 색상 코드 구성 요소 및 세션 비교를 지원합니다. 주요 지표: WakeLock 유지 시간, 무선 모듈 활동, GPS 세션.
Xcode Energy Organizer는 TestFlight와 App Store를 통해 프로덕션 사용자의 에너지 소비 데이터를 수집합니다. 다양한 기기 및 iOS 버전의 평균 소비에 대한 보고서를 받을 수 있습니다. 이를 통해 업데이트 후 성능 저하를 추적할 수 있습니다.
PerfDog(Tencent) — 에너지 소비 측정을 포함하는 크로스 플랫폼 성능 테스트 도구입니다. iOS와 Android를 지원하며 초당 1-10프레임으로 메트릭을 기록할 수 있습니다.
| 도구 | 플랫폼 | 메트릭 |
|---|---|---|
| Battery Historian | Android | WakeLock, 네트워크, GPS, CPU, 디스플레이 |
| Energy Profiler | Android Studio | 실시간 CPU, 네트워크, GPS, 무선 |
| Energy Log | iOS (Xcode) | CPU, 네트워크, GPU, 디스플레이, 위치 |
| PerfDog | iOS + Android | 에너지, FPS, CPU, 메모리(모두 함께) |
Apple WWDC 2023에 따르면 Energy Organizer를 사용하면 App Store 출시 전 성능 저하를 식별하고 수정하여 평균 앱 에너지 소비를 15-25% 줄일 수 있습니다.
자주 묻는 질문
소셜 네트워크와 메신저(Facebook, Instagram, WhatsApp, Telegram)가 전통적으로 에너지 소비에서 선두를 차지합니다. 이들은 지속적으로 데이터를 동기화하고, 피드를 업데이트하고, 푸시 알림을 수신하고, GPS를 사용합니다. 두 번째는 3D 그래픽 게임으로 GPU와 CPU를 동시에 부하하여 활성 게임 1시간당 최대 400-600 mA·h를 소비합니다.
네, 직접적인 영향을 미칩니다. 화면은 스마트폰에서 가장 에너지를 많이 소비하는 구성 요소입니다. 주파수를 60Hz에서 120Hz로 높이면 디스플레이 에너지 소비가 30-50% 증가합니다. 그러나 LTPO 기술을 탑재한 최신 디스플레이는 콘텐츠에 따라 1Hz에서 120Hz까지 동적으로 주파수를 변경하여 배터리에 미치는 영향을 줄입니다.
고정밀 GPS는 연속 작동 시 시간당 약 200-300 mA·h를 소비합니다. 비교를 위해 Wi-Fi와 이동통신 기지국을 통한 위치 확인(NETWORK_PROVIDER)은 같은 기간에 20-40 mA·h만 소비합니다. 특정 영역에 들어갈 때만 GPS를 활성화하려면 Geofencing API를 사용하세요.
아니요. 최신 OS(Android와 iOS)는 백그라운드 프로세스를 스스로 최적화합니다. 앱을 강제 종료하고 다시 시작하면 백그라운드에 남겨두는 것보다 더 많은 에너지를 소비합니다. 예외는 명백히 문제를 일으키는 앱입니다(설정의 배터리 통계를 통해 확인 가능).
Settings > Battery > Battery Usage를 엽니다. 시스템이 소비 비율과 함께 앱 목록을 표시합니다. 자세한 분석을 위해 ADB를 사용하세요: adb shell dumpsys batterystats를 실행하고 덤프를 Battery Historian에 업로드합니다. 총 소비량뿐만 아니라 구성 요소별(WakeLock, 네트워크, GPS) 분석도 확인할 수 있습니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.