모바일 개발의 백그라운드 작업: 정의, 유형 및 작동 방식

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

데이터 로딩, 콘텐츠 동기화, 분석 전송 — 많은 작업에 사용자의 적극적인 참여가 필요하지 않습니다. 그러나 모바일 기기는 배터리 절약과 성능 유지를 위해 백그라운드 작업을 제한합니다. 백그라운드 작업(background tasks)은 사용자가 앱을 보고 있지 않을 때 코드를 실행할 수 있게 하는 메커니즘입니다. 이 기사에서는 WorkManager, BGTaskScheduler, Foreground Service 및 Doze Mode의 특징을 다룹니다. 자세한 내용은 공식 WorkManager 문서를 참조하세요.

주요 포인트

  • WorkManager — Android 백그라운드 작업의 표준(Jetpack)
  • BGTaskScheduler — iOS 백그라운드 작업용 최신 API(iOS 13+)
  • Foreground Service — 사용자가 볼 수 있는 작업용(음악, GPS 추적)
  • Doze Mode 및 App Standby — 백그라운드 작업을 제한하는 절전 모드
  • 두 플랫폼 모두 시스템이 백그라운드 실행을 제한합니다. 개발자는 올바른 API를 선택해야 합니다
  • JobScheduler — Android 5+용 레거시 API. WorkManager로 마이그레이션 권장

백그라운드 작업이란?

백그라운드 작업은 앱이 포그라운드(활성 화면)에 있지 않을 때 실행되는 모든 코드입니다. 여기에는 서버와의 정기적인 데이터 동기화, 대용량 파일 다운로드, 푸시 알림 처리, 위치 추적, 위젯 업데이트가 포함됩니다. 각 플랫폼에는 백그라운드 작업에 대한 자체 제한 사항이 있습니다. iOS는 더 엄격하고(백그라운드 시간 10~30분), Android는 더 관대하지만 버전 9부터 규칙이 강화되었습니다.

백그라운드 작업의 아키텍처는 세 가지 수준으로 구성됩니다: (1) 즉시 작업 — 지금 실행(Foreground Service); (2) 지연 작업 — 적절한 조건에서 실행(WorkManager, BGTaskScheduler); (3) 정기 작업 — 설정된 간격으로 반복. 올바른 수준 선택은 작업이 제시간에 완료될지, 앱 스토어 거부로 이어질지를 결정합니다.

두 플랫폼 모두 Google/Apple은 백그라운드에서 직접 스레드를 관리하는 대신 선언적 API 사용을 강력히 권장합니다. Android의 WorkManager와 iOS의 BGTaskScheduler는 시스템이 앱 간에 백그라운드 작업을 최적으로 분배하고 에너지 절약을 위해 작업을 그룹화할 수 있게 합니다. IT Sectr에서는 항상 업데이트 빈도와 긴급성 요구 사항을 분석하여 백그라운드 아키텍처 설계를 시작합니다.

iOS의 백그라운드 작업(Background Fetch, BGTaskScheduler)

iOS는 백그라운드 작업을 위한 여러 메커니즘을 제공합니다. Background Fetch — 시스템이 결정하는 간격으로 정기적인 콘텐츠 업데이트(개발자가 아님). 앱은 새 데이터를 다운로드할 약 30초의 시간을 얻습니다. Background Fetch는 Capabilities → Background Modes → Background Fetch를 통해 활성화되고 AppDelegate에서 구현됩니다: application(_:performFetchWithCompletionHandler:).

BGTaskScheduler는 iOS 13+용 최신 API로, Background Fetch를 대체합니다. 개발자가 식별자로 작업을 등록하면 시스템이 적절한 조건에서 실행합니다. BGAppRefreshTask — 짧은 콘텐츠 업데이트용; BGProcessingTask — 장기 실행 작업용(캐시 정리, 데이터베이스 동기화). 작업은 앱 실행 시 등록되며, 시스템은 배터리 상태, 네트워크 및 사용자 활동을 고려하여 실행을 예약합니다.

Background Modes — 특정 시나리오에서 백그라운드 작업을 허용하는 모드 목록: Audio(백그라운드 재생), Location(GPS 추적), VoIP(PushKit을 통한 통화), BLE(Bluetooth 기기 연결), Processing(BGTaskScheduler를 통한 장기 작업). 각 모드는 App Store 검토에서 정당성이 필요합니다. 실제 필요 없이 모드를 사용하는 것은 앱 거부의 일반적인 원인입니다.

Significant Location Change — 지속적인 위치 정보가 필요하지 않지만 사용자의 큰 이동(500미터 이상)을 알아야 하는 앱을 위한 메커니즘. 셀룰러 타워가 변경되면 시스템이 앱을 깨웁니다. 이 메커니즘은 지속적인 GPS 추적에 비해 배터리를 크게 절약합니다.

Android의 백그라운드 작업(WorkManager, JobScheduler, Foreground Service)

Android는 백그라운드 작업을 위한 가장 풍부한 API 세트를 제공하지만, 버전 8.0(API 26)부터 규칙이 더 엄격해졌습니다. WorkManager는 모든 유형의 백그라운드 작업에 대해 Google이 권장하는 솔루션입니다. WorkManager는 기기 재부팅 후에도 작업 실행을 보장하고(BootReceiver 통해), 작업 체인, 관찰 가능한 LiveData/Flow 및 API 14까지의 하위 호환성을 지원합니다.

WorkManager는 Worker(doWork() 메서드가 있는 기본 클래스)를 사용합니다. Constraints가 실행 조건을 정의합니다: NetworkType.CONNECTED, BatteryNotLow, StorageNotLow. PeriodicWorkRequest — 최소 15분 간격의 정기 작업용. WorkManager는 Doze Mode 및 App Standby에 자동으로 적응하며, 작업을 유지 관리 창으로 그룹화합니다. 간단한 Worker 예제:

kotlin
class SyncWorker(
    context: Context,
    params: WorkerParameters
) : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result {
        return try {
            val repository =
                Injection.provideRepository(applicationContext)
            repository.syncData()
            Result.success()
        } catch (e: Exception) {
            Result.retry()
        }
    }
}

// Запланировать задачу
val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.CONNECTED)
    .build()

val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
    .setConstraints(constraints)
    .build()

WorkManager.getInstance(context)
    .enqueue(syncRequest)

JobScheduler — 더 오래된 API(Android 5+, API 21). 지정된 조건(네트워크, 충전, 유휴)으로 작업을 예약합니다. 제한 사항: 기기 재부팅을 지원하지 않으며(BootReceiver 필요), 관찰 가능한 상태가 없습니다. JobScheduler는 레거시 프로젝트의 간단한 작업에 적합합니다. 새 프로젝트에는 WorkManager를 사용하세요.

Foreground Service — 사용자가 지속적인 알림(ongoing notification)을 통해 보는 서비스입니다. 음악 재생, GPS 추적, 대용량 파일 다운로드에 사용됩니다. Foreground Service는 높은 우선순위를 가지며, 메모리가 부족해도 시스템이 종료하지 않습니다. Android 13부터 일부 유형에는 FOREGROUND_SERVICE_SPECIAL_USE 권한이 필요합니다. 대안으로 ForegroundServiceOption이 있는 WorkManager(장기 작업)가 있습니다.

AlarmManager — 정확한 시간에 실행되어야 하는 작업용(알람, 알림). AlarmManager는 Doze Mode에서 기기를 깨울 수 있습니다(setAlarmClock). 높은 전력 소비로 인해 일반 동기화에는 권장되지 않습니다. 정기 작업에는 WorkManager를 사용하고, AlarmManager는 정확한 시간이 중요한 경우에만 사용하세요.

시나리오 iOS Android
정기 콘텐츠 업데이트BGAppRefreshTask(BGTaskScheduler)WorkManager(PeriodicWorkRequest)
장기 백그라운드 작업BGProcessingTaskWorkManager + ForegroundService
오디오 재생Background Audio ModeForeground Service
GPS 추적Significant Location Change / Background LocationForeground Service + FusedLocationProvider
VoIP / 통화PushKit + CallKitConnectionService + Foreground Service
정확한 시간(알람)UNNotificationRequest(calendar)AlarmManager
푸시 처리(백그라운드)Notification Service ExtensionFirebaseMessagingService(onMessageReceived)

Doze Mode 및 App Standby

Doze Mode는 백그라운드 작업 실행에 영향을 미치는 Android의 절전 모드입니다. Android 6.0(API 23)에서 도입되었습니다. 기기가 충전 중이 아니고, 화면이 꺼져 있고, 기기가 정지된 경우 Doze Mode는 네트워크 요청을 차단하고 JobScheduler와 WakeLock을 연기합니다. 정기적으로 Doze는 유지 관리 창을 엽니다 — 앱이 지연된 작업을 실행할 수 있는 짧은 간격입니다. Android 7.0(API 24)부터 Doze는 완전히 정지된 경우뿐만 아니라 화면이 꺼진 경우에도 활성화됩니다.

App Standby — 사용되지 않는 앱을 대기 상태로 전환하는 모드입니다. 앱에 활성 알림이 없고 며칠 동안 열리지 않은 경우 Standby Bucket에 배치됩니다: 활성(active), working, frequent, rare. 앱을 덜 사용할수록 제한이 더 엄격해집니다: 네트워크 요청이 연기되고, 동기화가 차단되며, JobScheduler가 실행되지 않습니다.

WakeLock — 기기를 깨어 있는 상태로 유지하는 메커니즘(절전 방지). 중요한 작업을 완료하는 데 사용됩니다. WakeLock은 작업 완료 후 반드시 해제해야 합니다(release). 그렇지 않으면 몇 시간 안에 배터리가 소모됩니다. WakeLock은 Doze Mode에서 작동하지 않습니다 — 시스템이 무시합니다. Android 8+에서 WakeLock으로 작업하려면 WAKE_LOCK 권한과 적절한 라이프사이클 관리가 필요합니다.

IT Sectr에서는 설계 단계에서 Doze Mode와 App Standby를 고려합니다. WorkManager는 이러한 모드를 자동으로 처리하지만, Foreground Service의 경우 Doze 전환에 대한 올바른 처리를 계획해야 합니다. 실제 기기에서 절전 모드를 활성화하고 장시간 유휴 상태 후 백그라운드 작업을 테스트하는 것이 좋습니다.

실용적인 팁

백그라운드 작업을 설계할 때 다음 팁을 따르세요. 1. 새 Android 프로젝트에는 항상 WorkManager를 사용하세요. 호환성 문제, Doze Mode 및 기기 재부팅 문제를 해결합니다. 2. iOS에서는 iOS 13+의 경우 Background Fetch보다 BGTaskScheduler를 선호하세요. 3. Foreground Service는 작업에 실제로 가시적 알림이 필요한 경우에만 사용하세요. 4. WakeLock을 남용하지 마세요 — 배터리를 소모하고 앱 거부로 이어질 수 있습니다. 5. Doze Mode에서 백그라운드 작업을 테스트하세요: adb shell dumpsys deviceidle force-idle. 6. 로깅 및 분석을 통해 항상 작업 완료를 확인하세요. 7. 제한 사항을 기억하세요: iOS는 Background Fetch에 약 30초, BGProcessingTask에 약 몇 분을 제공합니다. Android WorkManager는 정확한 실행 시간을 보장하지 않습니다.

자주 묻는 질문

Android에서 Background Service와 Foreground Service의 차이점은 무엇인가요?

Background Service는 표시되는 알림 없이 실행되며 시스템이 언제든지 종료할 수 있습니다. Foreground Service는 지속적인 알림(ongoing notification)을 표시해야 하며 더 높은 우선순위를 갖습니다. Foreground Service는 음악 재생 및 GPS 추적에 사용됩니다.

Doze Mode란 무엇이며 백그라운드 작업에 어떤 영향을 미치나요?

Doze Mode는 기기가 사용되지 않을 때 네트워크 액세스를 비활성화하고 JobScheduler/WakeLock을 연기하는 Android 절전 모드입니다. WorkManager는 Doze Mode에 자동으로 적응합니다.

iOS에서 백그라운드 작업을 실행하려면 어떻게 하나요?

iOS에서 백그라운드 작업은 Background Fetch(정기 업데이트), BGTaskScheduler(지연 작업) 또는 Background Modes(오디오, VoIP, BLE, 위치)를 통해 실행됩니다. BGTaskScheduler는 iOS 13+용 최신 API로, Background Fetch를 대체합니다.

WorkManager 또는 JobScheduler: 무엇을 선택해야 하나요?

WorkManager는 Android의 모든 백그라운드 작업에 대해 Google이 권장하는 솔루션입니다. JobScheduler는 제한된 기능을 가진 오래된 API입니다. WorkManager는 작업 체인, 관찰 가능한 LiveData/Flow 및 API 14까지의 하위 호환성을 지원합니다.

App Standby란 무엇인가요?

App Standby는 사용되지 않는 앱을 대기 상태로 전환하는 Android 모드입니다: 네트워크 요청이 연기되고, 동기화가 일시 중지됩니다. 앱이 며칠 동안 사용되지 않으면 Android는 이를 Standby Bucket(active, working, frequent, rare)에 배치합니다.

요약

  • WorkManager — Android 백그라운드 작업용 범용 솔루션. Doze Mode에 자동 적응
  • BGTaskScheduler — iOS 13+용 최신 API(BGAppRefreshTask, BGProcessingTask)
  • Foreground Service — 지속적 알림이 있는 사용자 가시 작업용
  • Doze Mode 및 App Standby — 필수 고려 사항. WorkManager가 자동 처리
  • JobScheduler 및 AlarmManager — 레거시 프로젝트용. 새 프로젝트는 WorkManager 사용
  • iOS는 Android보다 백그라운드 작업을 더 엄격하게 제한합니다 — 설계 시 고려
  • 실제 기기에서 절전 모드로 백그라운드 작업을 항상 테스트

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

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

프로젝트 논의