Android/platform

[Android] 백그라운드 작업 처리 : Coroutines 와 WorkManager 비교

mins9273 2025. 4. 16. 11:46
반응형

CoroutinesWorkManager는 모두 백그라운드 작업 처리와 관련이 있지만, 그 사용 목적과 동작 방식이 다릅니다.

두 기술의 차이를 비교하면서 각 기술이 어떤 상황에서 적합한지 설명하겠습니다.

 

 

Coroutines 란?

코루틴은 비동기 작업 처리를 위한 Kotlin 언어의 기능으로 경량화된 스레드를 이용하여 병렬 작업을 수행할 수 있도록 해줍니다.

특히 UI 스레드와 분리하여 백그라운드에서 비동기 작업을 효율적으로 처리할 수 있습니다.

 

  • UI 스레드와 분리
    : 코루틴은 기본적으로 UI 스레드와 분리된 작업을 할 수 있어 UI 스레드를 차단하지 않음
  • 경량 스레드
    : 기존의 스레드에 비해 훨씬 더 경량화된 작업 처리 방식으로 많은 양의 비동기 작업을 효율적으로 처리 가능
  • 지속성 없음
    : 코루틴은 앱이 종료되거나 액티비티가 파괴되면 종료되며, 백그라운드 작업을 지속적으로 실행하지 못함
  • 직접 제어
    : 코루틴을 사용하면 작업의 흐름을 코드에서 직접 제어할 수 있어 세밀한 작업 수행이 가능

 

 

사용 예시

// 간단한 코루틴 예시 (네트워크 요청을 비동기적으로 처리)
GlobalScope.launch {
    val result = fetchDataFromNetwork()  // 네트워크 작업
    withContext(Dispatchers.Main) {
        // UI 업데이트
        updateUI(result)
    }
}

 

 

백그라운드 작업 처리 시 UI와 분리된 비동기 작업을 처리하는데에 유용하며, 앱 종료 후에도 계속 실행되지는 않습니다.

직접 제어가 가능하지만, 작업을 중단하거나 재개하는 등의 복잡한 관리가 필요할 수 있습니다.

 

 

WorkManager 란?

WorkManager 는 지속적인 백그라운드 작업을 처리하는 라이브러리로, 앱이 종료되거나 기기 재부팅 후에도 작업을 계속 실행할 수 있도록 보장해줍니다.

 

작업의 상태와 조건을 설정할 수 있으며, 작업이 완료되거나 실패했을 때 후속 처리르 할 수 있습니다.

 

  • 지속성
    : 앱이 종료되거나 기기가 재부팅되더라도 작업이 계속 실행됨
  • 백그라운드 작업
    : 네트워크 연결 상태나 배터리 상태 등을 조건으로 설정하여 조건에 맞는 백그라운드 작업을 실행
  • 간단한 작업 제어
    : 작업 상태를 자동으로 관리하며, 중지되었을 경우 onStopped() 메서드를 호출하여 리소스를 정리하거나 재시작할 수 있도록 처리함
  • 직접 제어 제한
    : 작업을 제어하는 데 있어 코루틴보다 덜 직관적일 수 있으며,
    WorkManager 자체가 상태를 관리하므로 작업 흐름을 직접 제어하기보다는 관리하는 방식에 가까움

 

 

사용 예시

val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.UNMETERED)  // Wi-Fi에서만 실행
    .build()

val workRequest = OneTimeWorkRequestBuilder<DownloadWorker>()
    .setConstraints(constraints)
    .build()

WorkManager.getInstance(context).enqueue(workRequest)

 

 

지속적인 백그라운드 작업을 실행할 수 있으며, 제약 조건 설정을 통해 환경에 맞는 작업 실행이 가능합니다.

작업 상태 관리와 재시작을 자동으로 처리하며, 직접 제어는 제한적일 수 있습니다.

 

 

Coroutines 와 WorkManager 비교

둘 다 백그라운드 작업 처리에 사용되지만, 코루틴은 UI 관련 비동기 작업이나 단기 작업에 적합합니다.
예를 들어, UI 업데이트나 네트워크 요청 처리, 짧은 시간 동안의 백그라운드 작업에 더 유용합니다.

반면, WorkManager 는 지속적인 백그라운드 작업이 필요한 경우, 기기 재부팅 후에도 작업을 유지해야 하는 경우에 적합합니다.
예를 들어, 앱 종료 후에도 계속 파일을 다운로드 하거나, 네트워크 연결 상태에 따라 작업을 재시도해야 할 때는 더 유용합니다.

반응형