Doze Mode: 본질, 단계 및 에너지 절약 메커니즘

저자: IT Sectr 게시일: 2026-03-28 읽는 시간: 10 분

Doze Mode는 Android 6.0 Marshmallow에서 도입된 에너지 절약 기능으로, 기기가 유휴 상태일 때 앱의 백그라운드 활동을 크게 제한합니다. 시스템은 앱을 저전력 소비 상태로 전환하여 네트워크 요청, 동기화 및 JobScheduler를 연기함으로써 배터리 수명을 연장합니다. Android Developers, 2025의 분석에 따르면, Doze Mode는 모델 및 OS 버전에 따라 기기의 대기 시간을 2~3배까지 늘릴 수 있습니다.

핵심 사항

  • Doze Mode — Android 6+ 절전 모드로, 유휴 상태에서 백그라운드 활동 제한
  • 두 단계 — Light Doze(가벼운 수면)와 Deep Doze(깊은 수면), 각각 다른 제한 사항
  • 유지 관리 창 — Deep Doze 중 앱이 작업을 수행할 수 있는 짧은 기간
  • Whitelist — Doze 중 백그라운드 작업이 허용된 앱의 예외
  • GCM/FCM — 높은 우선순위 푸시 알림이 기기를 Doze에서 깨움

Doze Mode란

Doze Mode는 Android에 내장된 에너지 절약 메커니즘으로, 기기가 충전기에 연결되지 않고 화면이 꺼져 있으며 사용자가 일정 시간 동안 기기와 상호 작용하지 않을 때 활성화됩니다. Doze의 목표는 대기 모드에서 배터리 수명을 최대화하기 위해 앱의 백그라운드 활동을 최소화하는 것입니다. 시스템은 JobScheduler, 계정 동기화, AlarmManager 및 네트워크 요청을 연기합니다.

이 모드는 Android 6.0 Marshmallow(API 23)에서 도입되었으며 이후 버전에서 크게 개선되었습니다. Android 7.0 Nougat에서는 기기가 움직일 때 활성화되는 두 번째 단계(Light Doze)가 도입되었습니다. Android 8.0에서는 Doze와 함께 작동하는 백그라운드 서비스에 추가 제한이 추가되었습니다. Android 12+에서는 Doze가 사용자 행동을 분석하는 업데이트된 배터리 관리 시스템과 통합되었습니다.

중요한 이해 사항: Doze Mode는 앱을 완전히 비활성화하지 않습니다. 작업이 연기된 상태로 전환하지만 프로세스를 종료하지는 않습니다. 알림이 있는 Foreground Service는 계속 작동하고, 높은 우선순위 푸시 알림(FCM high-priority)은 전달되며, 알람은 예약대로 작동합니다. Doze는 사용자가 해당 순간에 보거나 기대하지 않는 백그라운드 작업에만 영향을 미칩니다.

활성화 조건

Doze Mode는 모든 조건이 충족되면 활성화됩니다: 화면이 30분 이상 꺼져 있고(첫 번째 활성화), 기기가 정지되어 있으며(가속도계 사용), 충전기에 연결되어 있지 않습니다. 사용자가 전화기를 집거나 충전기를 연결하면 Doze가 즉시 비활성화됩니다. Android 7+에서는 기기가 움직이는 경우에도 단 5분의 비활동 후에 Light Doze가 활성화됩니다.

Doze Mode 작동 방식

Doze Mode는 시스템 서비스 DeviceIdleController를 통해 백그라운드 활동을 관리하며, 센서, 화면 및 충전기 상태를 분석합니다. 모든 활성화 조건이 충족되면 시스템은 앱을 대기 모드로 전환하고 요청을 유지 관리 창으로 그룹화합니다. 이 창 내에서 연기된 모든 작업(네트워크 호출, 동기화, AlarmManager)이 일괄 실행됩니다.

시스템 PowerManager는 Doze에서 나갈 수 있는 앱을 제어합니다. 높은 우선순위 푸시 알림(FCM high-priority)은 메시지를 전달하기 위해 기기를 깨울 수 있습니다. 시스템은 사용자가 배터리 최적화 Whitelist에 추가한 앱에 대해서는 Doze를 무시합니다. 다른 모든 앱은 다음 유지 관리 창을 기다려야 합니다.

Deep Doze의 유지 관리 창 지속 시간은 기하급수적으로 증가합니다: 첫 번째 창은 1시간 후, 두 번째는 2시간 후, 세 번째는 4시간 후, 최대 12시간 간격까지. 즉, 기기가 Doze에 오래 있을수록 앱이 백그라운드 작업을 수행할 수 있는 빈도가 줄어들어 배터리를 최대한 적극적으로 절약합니다.

네트워크 요청에 미치는 영향

Doze Mode에서는 유지 관리 창이 열릴 때까지 모든 네트워크 요청이 일시 중단됩니다. 유일한 예외는 FCM 높은 우선순위 메시지(페이로드에 “high_priority” 태그 포함)와 AlarmManagersetAndAllowWhileIdle() 또는 setExactAndAllowWhileIdle() 플래그가 있는 신호입니다. Retrofit, OkHttp 또는 Volley를 통한 일반 네트워크 호출은 창이 열릴 때까지 실행되지 않습니다.

Doze Mode의 단계

Doze Mode는 두 단계로 구성됩니다: Light Doze(가벼운 수면)와 Deep Doze(깊은 수면). 각 단계는 자체 제한 사항을 적용하며 활성화 임계값이 다릅니다. 단계 간의 차이를 이해하는 것은 에너지 절약 모드에 탄력적인 백그라운드 작업을 설계하는 개발자에게 중요합니다.

Light Doze(가벼운 수면)

Light Doze는 기기가 5~30분 동안 비활성(화면 꺼짐, 움직임 없음) 상태일 때 활성화됩니다. 이 단계에서는 네트워크 요청과 동기화가 일시 중단되지만 AlarmManager와 JobScheduler는 약간의 지연으로 계속 작동합니다. 앱은 푸시 알림을 받거나 충전기에 연결될 때 Light Doze에서 나갈 수 있습니다. Light Doze는 완전한 정지가 필요하지 않으며 기기가 움직여도 됩니다.

Deep Doze(깊은 수면)

Deep Doze는 기기가 정지된 상태(가속도계가 움직임을 감지하지 않음)에서 60~90분 동안 비활성화된 후 발생합니다. Deep Doze에서 시스템은 작업 연기에 훨씬 더 적극적입니다: 유지 관리 창이 덜 자주 열리고(기하급수적으로 간격 증가), AlarmManager는 setAndAllowWhileIdle() 플래그로만 작동하며, WakeLock은 일반적인 방식으로 작동하지 않습니다. Whitelist에 없는 앱은 백그라운드 활동이 거의 완전히 차단됩니다.

매개변수Light DozeDeep Doze
활성화 시간5~30분60~90분
움직임 요구 사항필요 없음정지 상태
창 간격10~60분1~12시간
AlarmManager지연과 함께 작동withAllowWhileIdle만
창 내 네트워크사용 가능사용 가능

Doze Mode의 제한 사항

Doze Mode는 앱을 설계할 때 개발자가 고려해야 하는 여러 범주의 제한 사항을 적용합니다. 이러한 제한 사항을 무시하면 백그라운드 작업이 실행되지 않고 사용자는 업데이트 누락, 전송되지 않은 메시지, 불완전한 동기화 등 잘못된 앱 동작을 보게 됩니다.

네트워크 제한 사항

모든 네트워크 요청은 유지 관리 창이 열릴 때까지 차단됩니다. 이는 HTTP 호출, WebSocket 연결 및 파일 다운로드에 적용됩니다. 예외는 Doze와 독립적인 Google Play Services의 별도 채널을 통과하는 FCM 높은 우선순위 메시지입니다. 중요한 데이터 동기화를 위해서는 NetworkType.CONNECTED 정책과 함께 WorkManager를 사용하는 것이 좋습니다.

AlarmManager 제한 사항

Deep Doze의 AlarmManagersetAndAllowWhileIdle()setExactAndAllowWhileIdle() 메서드로 생성된 알람을 제외한 모든 알람을 연기합니다. 그러나 이러한 메서드에도 제한이 있습니다. 앱당 9분에 1회 이상 작동하지 않습니다. Deep Doze에서 setExact()를 사용한 정확한 알람은 지정된 시간에 작동을 보장하지 않습니다.

WakeLock 제한 사항

WakeLock은 Doze Mode에서 비정상적으로 작동합니다: 시스템은 Whitelist 외부의 앱에 대해 웨이크 락을 유지하지 않습니다. 앱이 올바르게 PARTIAL_WAKE_LOCK을 획득했더라도 Deep Doze가 시작되면 시스템이 강제로 해제할 수 있습니다. Doze에서 작업 실행을 보장하는 유일한 방법은 알림과 함께 Foreground Service를 사용하는 것입니다.

  • 네트워크 — FCM high-priority를 제외한 모든 요청이 유지 관리 창까지 연기됨
  • AlarmManager — 정확한 알람 연기; setAndAllowWhileIdle — 1/9분 이내
  • WakeLock — Whitelist 외부 앱에 대해 강제 해제
  • JobScheduler — 작업이 기하급수적 간격으로 유지 관리 창에 그룹화됨
  • 동기화 — Doze 종료까지 Account SyncManager 일시 중단

Whitelist 및 예외

Doze Whitelist는 시스템이 최소한의 제한으로 에너지 절약 모드에서 백그라운드 활동을 허용하는 앱 목록입니다. 사용자는 설정 → 배터리 → 배터리 최적화를 통해 수동으로 앱을 목록에 추가할 수 있습니다. 시스템 앱, 런처 및 Google Play Services는 기본적으로 Whitelist에 포함됩니다.

개발자는 Intent ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS를 사용하여 시스템 대화 상자를 통해 Whitelist 추가를 요청할 수 있습니다. 이를 위해서는 매니페스트에 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 권한이 필요합니다. 그러나 Google은 타당한 이유 없이 예외를 요청하는 것을 권장하지 않습니다. 이 기능을 남용하는 앱은 Google Play에 게시될 때 거부될 위험이 있습니다.

Whitelist가 없어도 앱은 FCM 높은 우선순위를 사용하여 기기를 Doze에서 깨울 수 있습니다. 이러한 각 메시지는 앱에 작업 실행을 위한 짧은 창(10~30초)을 제공합니다. 더 긴 작업의 경우 앱은 Doze 유지 관리 창 내에서 계속 작동하는 Foreground Service를 시작해야 합니다. Google은 특정 유형의 앱(내비게이션, 의료, 메시징)에 대한 면제 메커니즘도 제공합니다.

Whitelist 상태 확인 방법

앱이 배터리 최적화 Whitelist에 있는지 확인하려면 powerManager.isIgnoringBatteryOptimizations() 메서드를 사용합니다. 메서드가 false를 반환하면 앱이 모든 Doze 제한 사항의 적용을 받습니다. true를 반환하면 앱이 Deep Doze에서도 제한 없이 Wakelock, AlarmManager 및 네트워크를 사용할 수 있습니다. 그러나 이 권한을 남용하면 사용자로부터 나쁜 평가를 받게 됩니다.

Doze Mode 테스트

Doze Mode에서 앱 동작을 테스트하는 것은 필수 개발 단계입니다. Doze가 백그라운드 기능을 방해할 수 있기 때문입니다. Android는 ADB를 통해 명령줄 도구를 제공하여 기기를 Light Doze 및 Deep Doze로 강제 전환할 수 있습니다. 테스트는 Android 6.0+가 설치된 실제 기기 또는 에뮬레이터에서 수행해야 합니다.

Light Doze에 진입하려면 adb shell dumpsys deviceidle step light 명령을 사용합니다. Deep Doze의 경우 adb shell dumpsys deviceidle step deep을 사용합니다. adb shell dumpsys deviceidle force-idle deep 명령은 표준 시간 제한을 기다리지 않고 기기를 즉시 Deep Doze로 전환합니다. 테스트 후 adb shell dumpsys deviceidle unforce 명령으로 Doze를 종료합니다.

bash
# Light Doze 강제 진입
$ adb shell dumpsys deviceidle step light

# Deep Doze 강제 진입
$ adb shell dumpsys deviceidle step deep

# 즉시 Deep Doze로 전환
$ adb shell dumpsys deviceidle force-idle deep

# Doze 종료
$ adb shell dumpsys deviceidle unforce

# Doze 상태 확인
$ adb shell dumpsys deviceidle

앱 작동 확인

Doze Mode로 전환한 후 네트워크 요청이 작동하는지(연기되어야 함), AlarmManager가 작동하는지, FCM 메시지가 전달되는지, WorkManager 작업이 올바르게 실행되는지 확인합니다. WorkManager는 Doze에서 계속 작동하며 해당 작업은 유지 관리 창에서 실행됩니다. 그러나 작업이 즉시 실행되어야 하는 경우 setExpedited()를 지정하거나 Foreground Service를 사용합니다.

Doze Mode 모범 사례

Doze Mode에 탄력적인 앱을 개발하려면 백그라운드 작업에 대한 접근 방식을 재고해야 합니다. Google은 백그라운드 작업의 즉시 실행에 의존하지 않고 Doze의 모든 제한 사항에서 올바르게 작동하도록 앱을 설계할 것을 권장합니다. 기본 원칙은 연기할 수 있는 모든 백그라운드 작업에 WorkManager를 사용하는 것입니다.

WorkManager 사용

WorkManager는 Doze에 자동으로 적응하기 때문에 백그라운드 작업에 권장되는 Google API입니다. WorkManager는 JobScheduler(API 23+) 또는 이전 버전에서 AlarmManager + BroadcastReceiver를 사용합니다. WorkManager 작업은 가장 가까운 Doze 유지 관리 창에서 실행되거나 필요한 경우 Expedited Work(내부적으로 Foreground Service)를 통해 즉시 실행됩니다.

중요한 작업에는 Foreground Service

작업을 연기할 수 없는 경우(미디어 재생, 내비게이션, VoIP) 필수 알림과 함께 Foreground Service를 사용합니다. Foreground Service는 Doze에서 면제되어 WakeLock을 유지하고 네트워크 요청을 실행할 수 있습니다. 그러나 Foreground Service도 특정 작업 유형(예: dataSync)에 대해 Deep Doze 유지 관리 창 정책의 적용을 받습니다.

알림을 위한 FCM 높은 우선순위

즉시 주의가 필요한 메시지(수신 전화, 긴급 알림)를 전달하려면 FCM 높은 우선순위 메시지를 사용합니다. 이러한 메시지는 기기를 Doze에서 깨우고 앱에 처리를 위한 짧은 창을 제공합니다. 일반 알림에 높은 우선순위를 사용하지 마십시오. 배터리가 빠르게 소모되고 Google Play에서 정책 위반으로 간주될 수 있습니다.

  • WorkManager — 모든 연기 가능한 백그라운드 작업에 선호되는 API
  • Foreground Service — 표시 가능한 알림이 있는 중요 작업용
  • FCM 높은 우선순위 — 기기 깨우기와 함께 긴급 메시지 전달용
  • 꼭 필요한 경우가 아니라면 Whitelist를 요청하지 마세요 — 사용자 경험을 저하시킵니다
  • 출시 전 ADB를 통해 Light 및 Deep Doze에서 앱을 테스트하세요

자주 묻는 질문

Android에서 Doze Mode란 무엇인가요?

Doze Mode는 Android 6+의 에너지 절약 모드로, 기기를 사용하지 않을 때(화면 꺼짐, 움직임 없음) 앱의 백그라운드 활동을 제한합니다. 시스템은 배터리 절약을 위해 네트워크 요청, 동기화 및 JobScheduler를 연기하고 유지 관리 창으로 그룹화합니다.

Doze Mode에는 어떤 단계가 있나요?

Doze Mode에는 두 단계가 있습니다: Light Doze(가벼운 수면)는 5~30분 후 활성화되며 AlarmManager가 지연과 함께 작동합니다. Deep Doze(깊은 수면)는 60~90분의 정지 후 발생하며 최대 12시간의 유지 관리 창으로 백그라운드 작업을 적극적으로 제한합니다.

Doze가 앱에 어떤 제한을 적용하나요?

Doze는 네트워크 요청을 차단하고, AlarmManager를 연기하며(setAndAllowWhileIdle 제외), WakeLock을 강제 해제하고 JobScheduler를 유지 관리 창으로 그룹화합니다. 예외로는 Foreground Service, FCM 높은 우선순위 및 사용자 Whitelist의 앱이 있습니다.

앱을 Doze Whitelist에 추가하는 방법은?

매니페스트에서 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 권한을 요청하고 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 작업으로 Intent를 보냅니다. 시스템이 사용자에게 대화 상자를 표시합니다. Whitelist 추가는 Google이 중요한 앱에만 사용하도록 권장하는 특권입니다.

Doze Mode에서 앱을 테스트하는 방법은?

ADB 명령을 사용합니다: Deep Doze 진입은 adb shell dumpsys deviceidle force-idle deep, Light Doze는 adb shell dumpsys deviceidle step light, 종료는 adb shell dumpsys deviceidle unforce. 각 모드에서 WorkManager, AlarmManager 및 FCM을 확인하세요.

요약

  • Doze Mode — Android 6+ 절전 모드, 배터리 절약을 위해 기기 유휴 시 활성화
  • Light Doze — 5~30분 후 가벼운 단계, AlarmManager 및 네트워크에 부분적 제한
  • Deep Doze — 60~90분 정지 후 깊은 단계, 최대 12시간 유지 관리 창
  • 제한 사항 — 네트워크 차단, AlarmManager 연기, WakeLock 해제
  • 예외 — Foreground Service, FCM 높은 우선순위, Whitelist 앱
  • WorkManager — 백그라운드 작업에 권장되는 API, Doze에 자동 적응
  • 테스트 — 출시 전 ADB(dumpsys deviceidle)를 통한 필수 확인

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기