๊นจ์•Œ ๊ฐœ๋… ๐Ÿ“‘/Android

[Android] WorkManager - ๊ฐœ์š”

interfacer_han 2024. 6. 14. 19:07

#1 WorkManager๋Š” '์ง€์—ฐ ๊ฐ€๋Šฅํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…'์˜ ๊ด€๋ฆฌ์ž

WorkManager๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… - Kotlin  |  Android Developers

Android์—๋Š” ๋ณด์žฅ๋œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์œ„ํ•œ ๋‹ค์ˆ˜์˜ ์˜ต์…˜์ด ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ์˜ต์…˜์—๋Š” ๊ฐ๊ฐ ๋‹ค์–‘ํ•œ ์žฅ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Android์šฉ WorkManager API๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. WorkManager๋Š” ์˜ˆ

developer.android.com

WorkManager๋Š” Android Jetpack์— ์†ํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ๋ชจ๋“  ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋Š” ์•„๋‹ˆ๊ณ , '์ง€์—ฐ ๊ฐ€๋Šฅํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…'๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. '์ง€์—ฐ ๊ฐ€๋Šฅํ•œ ์ž‘์—…'์ด๋ž€, ์ฆ‰์‹œ ์‹คํ–‰ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„์™€์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”, ์•ฑ ์‚ฌ์šฉ ๋กœ๊ทธ๋ฅผ ์„œ๋ฒ„์— ์ „์†กํ•˜๊ธฐ, ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฑ์—…ํ•˜๊ธฐ ๋“ฑ์˜ ์ž‘์—…์€ ๋ถ„๋ช… ํ•„์š”๋Š” ํ•˜์ง€๋งŒ ๋‹น์žฅ ์™„๋ฃŒ๋ฅผ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒƒ๋“ค์ด๋‹ค.
 
์ง€์—ฐ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, WorkManager๋Š” ๊ฐ€์šฉํ•œ ์ž์›์ด ์ถฉ๋ถ„ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์Šค๋งˆํŠธํฐ์˜ RAM์ด๋‚˜ CPU์˜ ์ด์šฉ๋ฅ ์ด ์ถฉ๋ถ„ํžˆ ๋‚ฎ์„ ๋•Œ, ๋ฐฐํ„ฐ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋งŽ์„ ๋•Œ, ์ถฉ๋ถ„ํžˆ ๋น ๋ฅธ ์†๋„์˜ ๋„คํŠธ์›Œํฌ์™€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์„ ๋•Œ ๋“ฑ์ด ๊ทธ ์‹œ์ ์ด๋‹ค.
 
๋˜ ์ง€์—ฐ์ด ๊ฐ€๋Šฅํ•ด์•ผ๋งŒ ํ•˜๊ธฐ์—, ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์—์„œ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ์•ฑ์„ ๊ฐ•์ œ ์ข…๋ฃŒ์‹œ์ผœ๋„ ์‹ฌ์ง€์–ด ์Šค๋งˆํŠธํฐ์ด ์žฌ๋ถ€ํŒ…๋˜๋”๋ผ๋„ WorkManager๋Š” ๋ฐ˜๋“œ์‹œ ์‚ด์•„์žˆ์Œ์ด ๋ณด์žฅ๋œ๋‹ค. WorkManager๋Š” Android ์šด์˜์ฒด์ œ์˜ Application Framework ์ˆ˜์ค€์—์„œ ์ž‘๋™๋˜๊ธฐ์— ์ด๋Ÿฌํ•œ ๋ณด์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
 

#2 ์ด์ „ ์‹œ์Šคํ…œ๊ณผ์˜ ๋น„๊ต

WorkManager ์ถœ๋ฒ” ์ „์—” Firebase JobDispatcher, JobScheduler, AlarmManager, BroadcastReceiver๋ฅผ ์‚ฌ์šฉํ•ด WorkManager์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ–ˆ์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด์ „ ์‹œ์Šคํ…œ๋“ค์€ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์˜ ์˜ˆ์•ฝ ๊ณผ์ •์ด ๋ณต์žกํ–ˆ๊ณ  ๋งŽ์€ ์š”๊ตฌ ์‚ฌํ•ญ๋“ค์„ ๋ช…์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๋ฐ˜๋ฉด, WorkManager๋Š” Jetpack์— ์†ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค์šด ๊ฐ„ํŽธํ•˜๊ณ  ์ง๊ด€์ ์ธ ์‚ฌ์šฉ์„ฑ์— ๋‹ค์–‘ํ•œ Android ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ๋„ ๊ฐ–์ท„๋‹ค. ์ž‘์—…์„ WorkManager์— ์˜ˆ์•ฝํ•ด๋†“์œผ๋ฉด ์•Œ์•„์„œ ์ตœ์ ์˜ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์ œ์•ฝ๋“ค๋„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ๋ช…์‹œ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์—ฌ์ง€๊ฐ€ ์ ๋‹ค.
 
๊ทธ๋ ‡๋‹ค๊ณ  WorkManager๊ฐ€ ์ด์ „ ์‹œ์Šคํ…œ๋“ค๊ณผ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์˜คํžˆ๋ ค ๊นŠ์€ ์—ฐ๊ด€์ด ์žˆ๋‹ค. WorkManager์˜ ๋‚ด๋ถ€ ๋™์ž‘์„ ์‚ดํŽด๋ณด๋ฉด, API ๋ ˆ๋ฒจ 23 ๋ฏธ๋งŒ์€ BroadcastReceiver์™€ AlarmManager์˜ ์กฐํ•ฉ, API 23 ์ด์ƒ์€ JobScheduler, Firebase๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์€ Firebase JobDispatcher๋ฅผ ์•Œ์•„์„œ ์„ ํƒํ•ด ๋™์ž‘ํ•œ๋‹ค. WorkManager๋Š” ์ด ์ด์ „ ์‹œ์Šคํ…œ๋“ค์˜ ์ถ”์ƒํ™” ๊ณ„์ธต(= ๋ณต์žก์„ฑ์„ ๊ฐ์ถ”๊ณ , ์ผ๊ด€๋œ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ)์ธ ๊ฒƒ์ด๋‹ค.
 

#3 ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ์˜ ๋น„๊ต

#3-1 Corutines (์ฝ”๋ฃจํ‹ด)

์ฝ”๋ฃจํ‹ด์€ ์ž‘์—…์˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ํ•˜์ง€๋งŒ ์•ฑ์ด ์ข…๋ฃŒ๋˜์–ด๋„ ์—ฌ์ „ํžˆ ์‹คํ–‰๋˜๋Š” WorkManager์™€ ๋‹ฌ๋ฆฌ, ์ฝ”๋ฃจํ‹ด์€ ์•ฑ์ด ์ข…๋ฃŒ๋  ๋•Œ ๊ฐ™์ด ์ข…๋ฃŒ๋œ๋‹ค. 1ํšŒ์„ฑ ์ž‘์—…์ธ ๊ฒฝ์šฐ์—๋„, ๊ผญ ์™„๋ฃŒ์‹œ์ผœ์•ผํ•˜๋Š” ์ค‘์š”ํ•œ ์ž‘์—…์ด๋ผ๋ฉด WorkManager๋กœ ์˜ˆ์•ฝํ•ด๋‘๋Š” ๊ฒƒ์ด Corutines๋ณด๋‹ค ๋” ์•ˆ์ •์ ์ด๋‹ค. ํŠนํžˆ ์ฃผ๊ธฐ์  ์ž‘์—…์ด๋ผ๋ฉด ๋ฐ˜๋“œ์‹œ WorkManager์— ์ž‘์—…์„ ๋งก๊ฒจ์•ผ ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์˜์›ํžˆ ์ผœ๋‘˜ ๊ฒƒ์ด๋ผ๋Š” ๋ณด์žฅ์ด ๋‹น์—ฐํžˆ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
 

#3-2 AlarmManager

WorkManager๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ AlarmManager ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๊ฒฝ์šฐ(#2 ์ฐธ์กฐ)๋„ ์žˆ์ง€๋งŒ, ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ž…์žฅ์—์„œ AlarmManager๋ฅผ WorkManager์˜ ๋Œ€์ฒด์ œ๋กœ ์‚ฌ์šฉํ•  ์ƒ๊ฐ์€ ๋ง์•„์•ผ ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด, AlarmManager๋Š” ์•ฑ์ด ์ข…๋ฃŒ๋˜์–ด๋„ ์ž‘๋™ํ•˜์ง€๋งŒ, ์Šค๋งˆํŠธํฐ์ด Doze ๋ชจ๋“œ(๊ธฐ๊ธฐ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•„ ์ ˆ์ „ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋œ ์ƒํƒœ)์ผ ๋•Œ WorkManager์™€๋Š” ๋‹ฌ๋ฆฌ ๊ธฐ๊ธฐ๋ฅผ ๊นจ์›Œ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐํ„ฐ๋ฆฌ ํšจ์œจ ๋ฐ ์ปดํ“จํŒ… ์ž์› ์ ˆ์•ฝ ๋ฉด์—์„œ ๋น„ํšจ์œจ์ ์ด๋‹ค. ํ•œ ๋งˆ๋””๋กœ AlarmManager๋Š” ์˜ค์ง Alarm์„ ์œ„ํ•ด์„œ๋งŒ ์‚ฌ์šฉํ•˜์ž.
 

#4 ์ž‘์—…์˜ ์œ ํ˜•

#4-1 ์ž‘์—…์˜ 3๊ฐ€์ง€ ์ข…๋ฅ˜

https://developer.android.com/topic/libraries/architecture/workmanager/#types

WorkManager์— ์ž‘์—…์„ ๋งก๊ธธ ๋•Œ๋Š” ํฌ๊ฒŒ Immediate(์ฆ‰์‹œ), Long Running(์žฅ๊ธฐ ์‹คํ–‰), Deferrable(์ง€์—ฐ ๊ฐ€๋Šฅ)์˜ 3๊ฐ€์ง€ ์ž‘์—… ์Šคํƒ€์ผ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋จผ์ €, Immediate(์ฆ‰์‹œ)๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ฆ‰์‹œ ์ˆ˜ํ–‰๋  ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜๋Š” ์ž‘์—…์ด๋‹ค. ์ง€๋„ ์•ฑ์„ ์˜ˆ๋กœ ๋“ค๋ฉด, '๋‚ด ์œ„์น˜๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ‘œ์‹œ' ๊ธฐ๋Šฅ์ด๋‚˜ '๋ชฉ์ ์ง€ ๊ทผ์ฒ˜์— ๋„์ฐฉํ•˜๋ฉด ์•Œ๋ ค์ฃผ๊ธฐ' ๊ธฐ๋Šฅ ๋”ฐ์œ„๋ฅผ Immediate๋กœ ์„ค์ •ํ•  ๋งŒํ•˜๋‹ค.
 
Long Running(์žฅ๊ธฐ ์‹คํ–‰) ๋˜ํ•œ ๋ง ๊ทธ๋Œ€๋กœ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž์˜ ๋Œ€๊ธฐ(Stand by)๋ฅผ ์š”ํ•˜๋Š” ์ž‘์—…์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ์ž‘์—… ํ˜น์€ ๋‹ฌ๋ฆฌ๊ธฐ ์ธก์ • ์•ฑ์—์„œ 30๋ถ„ ํƒ€์ด๋จธ์˜ ์ข…๋ฃŒ ์•Œ๋ฆผ์ด ์šธ๋ฆฌ๋„๋กํ•˜๋Š” ์ž‘์—… ๋“ฑ์„ Long Running์œผ๋กœ ์„ค์ •ํ•  ๋งŒํ•˜๋‹ค.
 
Deferrable(์ง€์—ฐ ๊ฐ€๋Šฅ)์€ ํŠน์ • ์กฐ๊ฑด์„ ์ถฉ์กฑํ•  ๋•Œ๊นŒ์ง€ '์ง€์—ฐ ๊ฐ€๋Šฅ'ํ•œ ์ž‘์—…์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ธํ„ฐ๋„ท์ด ์—ฐ๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ์ž‘์—… ๋“ฑ์ด๋‹ค. ์กฐ๊ฑด์ด ์ถฉ์กฑ๋  ๋•Œ๊นŒ์ง€ WorkManager๊ฐ€ ๊ณ„์† ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐ๋„ท์„ ์˜์›ํžˆ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์–ธ์  ๊ฐ„ ์ˆ˜ํ–‰๋˜๊ณ  ๋ง ๊ฒƒ์ด๋‹ค.
 

#4-2 ์ž‘์—…์˜ ์ฃผ๊ธฐ์„ฑ

WorkManager์— ์ž‘์—…์„ ๋งก๊ธธ ๋•, ํ•ด๋‹น ์ž‘์—…์ด ํ•œ ๋ฒˆ๋งŒ(One Time) ์ˆ˜ํ–‰๋˜๋ฉด ๊ทธ๋งŒ์ธ์ง€ ์•„๋‹ˆ๋ฉด ์ฃผ๊ธฐ์ ์œผ๋กœ(Periodic) ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ง€๋ฅผ ์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ „์ž์˜ ๊ฒฝ์šฐ ์„ค๋ฌธ ์กฐ์‚ฌ ์•ฑ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค๋ฌธ ์กฐ์‚ฌ๋ฅผ ์™„๋ฃŒํ•˜๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ์—…๋กœ๋“œ ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ๊ณ , ํ›„์ž์˜ ๊ฒฝ์šฐ ํšŒ์‚ฌ ์žฌ๊ณ  ๊ด€๋ฆฌ ์•ฑ์—์„œ 30๋ถ„๋งˆ๋‹ค ์žฌ๊ณ  ์ •๋ณด๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ๋‹ค.
 

#4-3 ์ž‘์—… ์œ ํ˜• ์ •๋ฆฌ

Immediate1ํšŒ์„ฑ ์ˆ˜ํ–‰ (One Time)
Long Running1ํšŒ์„ฑ ์ˆ˜ํ–‰ (One Time)
Long Running์ฃผ๊ธฐ์  ์ˆ˜ํ–‰ (Periodic)
Deferrable1ํšŒ์„ฑ ์ˆ˜ํ–‰ (One Time)
Deferrable์ฃผ๊ธฐ์  ์ˆ˜ํ–‰ (Periodic)

#4-1์˜ ์ž‘์—… ์Šคํƒ€์ผ์— ๋”ํ•ด #4-2์˜ ์ฃผ๊ธฐ์„ฑ๊นŒ์ง€ ๊ณ ๋ คํ•˜๋ฉด ์œ„์˜ ํ‘œ์™€ ๊ฐ™์ด ์ž‘์—…์„ ์œ ํ˜•ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. Immediate ์Šคํƒ€์ผ์˜ ๊ฒฝ์šฐ๋Š” ์˜ต์…˜์ด 1ํšŒ์„ฑ ์ˆ˜ํ–‰๋ฐ–์—๋Š” ์—†๋‹ค. Immediate๋Š” ์ฆ‰์‹œ ์ˆ˜ํ–‰๋  ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜๋Š” ์ž‘์—…์ด๊ธฐ์—, ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ž‘์—…๊ณผ๋Š” ๊ทธ ๋ชฉ์ ์ด ๋™๋–จ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
 

#5 ์š”์•ฝ

WorkManager๋Š” ์ž‘์—… Traffic์„ ๊ตํ†ต ์ •๋ฆฌํ•œ๋‹ค.