๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ ์ธ์
์์ ์์๋ณผ ๊ฒ์ ์ SwiftUI API ์
๋๋ค.
๋ชจ๋ Apple ํ๋ซํผ์์ Swift Concurrency๋ฅผ ์ด์ฉํด ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ผ๊ด์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
API์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ฒ๋ฆฌ๊ฐ Swift Concurrency๋ก ์ผ๋ง๋ ์ฌ์์ก๋์ง ์ดํด๋ด
์๋ค!
โข
์๋ก์ด API๋ watchOS, iOS, tvOS, Mac Catalyst, ์์ ฏ ๋ฐ Mac์์ ์คํํ๋ iOS ์ฑ๊น์ง ๋ชจ๋ ๊ณต์ ํฉ๋๋ค. ์ฆ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ฒ๋ฆฌํ ๋ ํ ํ๋ซํผ์์ ๋ฐฐ์ด ๊ฐ๋
๊ณผ ํจํด์ ๋ค๋ฅธ ๊ณณ์๋ ์ ์ฉํ ์ ์๋ค๋ ๋ป์ด์ฃ .
โข
Swift Concurrency๋ฅผ ํ์ฉํ๋ ์ API๋ ๊น์ด ์ค์ฒฉ๋ completion Handler์ ์ฝ๋ฐฑ ๋ฐ ์ข
์ข
๋ถ์์ฉ์ ์ผ์ผ์ผฐ๋ ๊ฐ๋ณ ์ํ์ ํ์์ฑ์ ์ค์ผ ์ ์์ต๋๋ค.
โข
Swift Concurrency์ ๋ค์ดํฐ๋ธ ์์
์ทจ์๋ ์ฑ์ด ์๊ฐ์ ๋ง์ถฐ ์์
์ ์๋ฃํ๋๋ก ๋์์ผ๋ก์จ ์์คํ
์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฑ์ ์ข
๋ฃํ๋ ๊ฒ์ ํผํฉ๋๋ค.
โStormyโ
ํญํ์ฐ ์น๋ ๋ ํ๋ ์ฌ์ง์ ์ฐ๋ ์ฑ์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ด์ฉํฉ๋๋ค.
ํญํ์ฐ๊ฐ ์น๋ฉด ํ๋ ์ฌ์ง์ ์ฐ์ผ๋ผ๊ณ ์๋ ค ์ฃผ๋ ์ฑ
๋ํ๋ฅผ ๋ณด๋ฉด์ ํญํ์ฐ ์น๋ ๋ ์๋ง ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ฌ์ฉํ์ฌ ์๋ฆผ์ ์ ์กํ๋ ๋ฒ์ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
์ผ์ชฝ์ ๋ณด์ด๋ ๋ง๋: foreground ์ฑ์ ์คํ ์๊ฐ
์ค๊ฐ์ ์๋ ๋ง๋: background ์ฑ์ ์คํ ์๊ฐ
์ค๋ฅธ์ชฝ์ ์๋ ๋ง๋: ์์คํ
์ฑ ์คํ ์๊ฐ
โข
์ฑ์์ ๋๊ฐ์ ์ฑ์ด ์ผ์ ์ ์ง๋๋ฉด ์์คํ
์ ์์ฝํ ์๊ฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฑ์ ๊นจ์์ผ ํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํฉ๋๋ค.
โข
์ ์ค์ ์ฑ์ ์์ฝํ์ผ๋ฏ๋ก ์์คํ
์ ์ ์ค์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฑ์ ๊นจ์ฐ๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฑ ์๋ก๊ณ ์นจ ์์
์ ๋ณด๋
๋๋ค
โข
๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ ์๊ฐ์ ์ฐ๋ฆฌ๋ ํญํ์ฐ๊ฐ ์น๋์ง ์์๋ด์ผ ํฉ๋๋ค. ๋ ์ด ํ๋ฆฌ๋ค๋ฉด ์ฌ์ฉ์์๊ฒ ์๋ฆผ์ ๋ณด๋
๋๋ค. ์ฐ์ ๋ ์จ ์๋น์ค์ ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ด์ ํ์ฌ ๋ ์จ๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค.
โข
๋ฐฑ๊ทธ๋ผ์ด๋์ ์์ฝ๋ URLSession์ผ๋ก ์ฑ์ ์ผ์ ์ ์ง ์ํ๋ก๋ ๋คํธ์ํฌ ์์ฒญ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค.
โข
๋ฐฑ๊ทธ๋ผ์ด๋ ๋คํธ์ํฌ ์์ฒญ์ผ๋ก ๋ ์จ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ผ๋ฉด ์๋ก์ด URLSession ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ผ๋ก ์ฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ ์๊ฐ์ด ๋ค์ ์ฃผ์ด์ง๋๋ค.
์์ฒญํ ๋ ์จ ๋ฐ์ดํฐ๋ฅผ ์
์ํ๋ฉด ์ฑ์ ๋ฐ์ ํญํ์ฐ๊ฐ ์น๋์ง ํ๋จํ๊ณ ์ฌ์ง์ ์ฐ์ผ๋ผ๋ ์๋ฆผ์ ๋ณด๋ผ ๊ฒ์ธ์ง ๊ฒฐ์ ํฉ๋๋ค.
Background on Background Task
๋จ์ผ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์๋ ๋ฐฉ์์ ๋ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
๋จ์ผ ์ฑ์ ์๋ก๊ณ ์นจํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์๋ช
์ฃผ๊ธฐ
โข
๋จผ์ ์์คํ
์ด ์ฑ์ ๊นจ์ฐ๊ณ ์ฑ ์๋ก๊ณ ์นจ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ๋ณด๋
๋๋ค.
โข
๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ์์ ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ด ํญํ์ฐ๊ฐ ์น๋์ง ํ์ธํฉ๋๋ค.
โข
์ด์์ ์ธ ์ํฉ์ ์ฐ๋ฆฌ ๋คํธ์ํฌ ์์ฒญ์ด ์๋ก๊ณ ์นจ์ ์ํด ์ฑ์ ํ ๋น๋ ์คํ ์๊ฐ ์์ ๋ชจ๋ ์๋ฃ๋๋ ๊ฒ์
๋๋ค.
์๋ฆผ์ด ๊ฒ์๋๋ฉด ์ฑ ์๋ก๊ณ ์นจ ์ค์ ํ์ํ ๊ฑด ๋ชจ๋ ๋ง์ณค์ผ๋ฏ๋ก ์์คํ
์ด ๋ค์ ์ฑ์ ์ผ์ ์ ์ง์ํต๋๋ค.
๋ ์จ ๋ฐ์ดํฐ์ ๋ํ ๋คํธ์ํฌ ์์ฒญ์ด ์ ๋ ์ ๋๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
โข
์ฑ์ด ์์
์ ์ํํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ ์๊ฐ์ ๋ชจ๋ ์๋นํ๋ค๋ฉด ์์คํ
์ด ์ฑ์ ์๊ฐ์ด ๋ถ์กฑํ๋ค๊ณ ์๋ ค์ ์ํฉ์ ๋๋นํ ๊ธฐํ๋ฅผ ์ค๋๋ค.
โข
์คํ ์๊ฐ์ด ๋ง๋ฃ๋ ๋๊น์ง ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์๋ฃํ์ง ๋ชปํ๋ฉด ์ฑ์ ์์คํ
์ ์ํด ์ค๋จ๋๊ณ ๋ค์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ํด ์ค๋กํ๋ง์ ์ผ์ผํต๋๋ค.
โฆ
์ด ๊ฒฝ์ฐ์๋ ๋คํธ์ํฌ ์์ฒญ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ๋คํธ์ํฌ ์์ฒญ์ธ์ง ํ์ธํด์ผ ํฉ๋๋ค.
โฆ
๊ทธ๋ ๋ค๋ฉด ์ฑ ์๋ก๊ณ ์นจ ์์
์ ์ฆ์ ์๋ฃํ๊ณ ๋คํธ์ํฌ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ถ๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ ์๊ฐ์ ์ํด์ ์ฑ์ ๊นจ์ธ ์ ์์ต๋๋ค.
โข
๋ฐฑ๊ทธ๋ผ์ด๋ URLSession์ด ์์ฝ๋๋ฉด ๋ค์ ์์คํ
์ ์ฑ์ ์ผ์ ์ ์งํ ์ ์์ต๋๋ค
๊ธฐ๋ณธ ์ฑ
๋ค์ ๋ ์ ์ค์ ์ฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋ก ๊ณ ์นจ์ ์์ฝํ๋ ํจ์๋ฅผ ์์ฑ
1.
๋จผ์ ๋ด์ผ ์ ์ค๋ฅผ ๋ํ๋ด๋ ๋ ์ง๋ฅผ ๋ง๋ฆ
2.
๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฑ์ ์๋ก๊ณ ์นจํ๋ ์์ฒญ์ ๋ง๋ฆ
3.
๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ๋ค์ ๋ ์ ์ค๋ก ์ค์ ํ๊ณ ์ค์ผ์ค๋ฌ์ ์ ์ถ
์์ฝํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ํด๋น ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ๋ ค๋ฉด ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
Scene ์์ ์๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค.
โข
์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ๋ฐ์ผ๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
๊ณผ ์ผ์นํ๋ ์์ ์์ ๋ฑ๋ก๋ ๋ชจ๋ ๋ธ๋ก์ด ์คํ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ์๋ appRefresh๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
โข
์ํ๋ ๋ ์ง์ ๋ฐฑ๊ทธ๋ผ์ด๋์ ์คํ ์๊ฐ์ ๋ฏธ๋ฆฌ ์์ฝํด์ ์ฑ์ ์ ๊ณตํ ์ ์์ฃ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์์ ์์์ ์์ฒญ ๋ฐ ํธ๋ค๋ฌ์ ๊ฐ์ ์๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ์ด ํด๋น ์์
์ ๋ฐ์ ๋ ์์คํ
์ด ํธ์ถํ ํธ๋ค๋ฌ๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
โข
๋ด์ผ๋ก ๋ค์ ์์ฝ์ด ๋๋์ง ํ์คํ ํ์ธํ๊ธฐ ์ํด ๋ฐฉ๊ธ ์์ฑํ scheduleAppRefresh ํจ์๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ ์๊ฐ์ ๋ด์ผ ์ ์ค๋ก ๋ค์ ์์ฝํด์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์์ํ๋ ค ํฉ๋๋ค. ์ ์ค์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ ์๊ฐ์ด ์ํํ๋ฏ๋ก ๋ฐ๊นฅ ๋ ์จ๋ฅผ ํ์ธํ๋ ๋คํธ์ํฌ ์์ฒญ์ ๋ง๋ค๊ณ Swift์ await ํค์๋๋ก ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค.
โข
ํด๋ก์ ์ ๋ณธ๋ฌธ์ด ๋ฐํ๋๋ฉด ์์คํ
์ด ์ฑ์ ํ ๋นํ ๊ธฐ๋ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ด ๋ฌต์์ ์ผ๋ก ์๋ฃ๋ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค.
โข
์ฌ๊ธฐ์์ Swift Concurrency๋ฅผ ์ฌ์ฉํ๋ฉด ์์
์ด ์๋ฃ๋์ ๋ ๋ช
์์ ์ธ ์ฝ๋ฐฑ ์์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฅ๊ธฐ ์คํ ์์
์ ์ํํ ์ ์์ต๋๋ค.
โข
Apple ํ๋ซํผ ์ ๋ฐ์์ ์๋ฆผ ์ถ๊ฐ๋ฅผ ๋น๋กฏํ ๋๋ค์ API๋ ์ด๋ฏธ ๋น๋๊ธฐ ์์
์์ Swift Concurrency๋ฅผ ์ง์ํฉ๋๋ค.
โข
notifyForPhoto() async ํจ์๋ฅผ ํ์ฉํ๋ฉด UserNotificationCenter์์ ์ฐพ์ ์ ์๋ ๋น๋๊ธฐ ์๋ฆผ ์ถ๊ฐ ๋ฉ์๋๋ก ๊ฐ๋จํ๊ฒ ์ํํ ์ ์์ต๋๋ค.
Swift concurrency
Swift Concurrency์ async์ await๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ฒ๋ฆฌ์์ ์ฐ๋ฆฌ์๊ฒ ์ผ๋ง๋ ํธ๋ฆฌํ์ง ์์๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋์ ์ฐธ์กฐํ ๋น๋๊ธฐ isStormy ํจ์๋ฅผ ์์ฑํด ๋ณด์ฃ !
โข
async ํจ์๋ ๋ฐ๊นฅ ๋ ์จ๋ฅผ ํ์ธํ๋ ๋คํธ์ํฌ ์์ฒญ์ ํด์ผ ํฉ๋๋ค.
โข
๊ฐ์ฅ ๋จผ์ ๊ณต์ URLSession์ ์ฐ๊ณ ๋ ์จ ๋ฐ์ดํฐ ์์ฒญ์ ์ธ์คํด์คํํฉ๋๋ค.
Swift Concurrency๋ฅผ ์ฑํํ URLSession์ ๋น๋๊ธฐ ์ปจํ
์คํธ๋ก ๋๊ธฐํ ์ ์๋ ๋คํธ์ํฌ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ํ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ท์ต๋๋ค.
๋คํธ์ํฌ ์๋ต์ด ๋ค์ด์ค๋ฉด ๋ ์จ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
๊ทธ๋ฌ๋ ์คํ ์๊ฐ์ด ๋ง๋ฃ๋๊ธฐ ์ ์ ์ฑ์ด ๋คํธ์ํฌ ์์ฒญ์ ์๋ฃํ์ง ๋ชปํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์ด ๊ฒฝ์ฐ์๋ URLSession์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ธ์
์ผ๋ก ์ค์ ํ๋์ง ํ์ธํ๊ณ URLSession ์ธ์
๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ด์ฉํ์ฌ ์ฑ์ ์์ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ด๋์ง ์ดํด๋ด์ผ ํฉ๋๋ค.
โข
Shared URLSession์ ์ฌ์ฉํ์ต๋๋ค.
โข
URLSession์ ๋ง๋ค ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค์ ์์ sessionSendsLaunchEvents ์์ฑ์ true๋ก ๋์์ผ ํฉ๋๋ค.
โข
์ด ์ฝ๋๋ ์ฑ์ด ์ผ์ ์ค์ง๋ ๊ฒฝ์ฐ์๋ ๋คํธ์ํฌ ์์ฒญ์ ์คํํ๊ณ ์์ฒญ์ด ์๋ฃ๋๋ฉด ์ฑ์ ๊นจ์์ URLSession ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ํํ๋ผ๊ณ ์์คํ
์ ์๋ฆฝ๋๋ค.
์ด๊ฒ์ watchOS์์ ํนํ ์ค์ํฉ๋๋ค.
โข
watchOS ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ ์ฑ์ ๋คํธ์ํฌ ์์ฒญ์ ๋ฐฑ๊ทธ๋ผ์ด๋ URLSessions์ผ๋ก ์์ฒญ๋ผ์ผ ํฉ๋๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์คํ ์๊ฐ์ด ๋ง๋ฃ๋๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์์ ์์ ์ ๊ณต๋ ํด๋ก์ ๋ฅผ ์คํํ๋ ๋น๋๊ธฐ ์์
์ ์์คํ
์์ ์ทจ์ํฉ๋๋ค.
์ด ์ทจ์์ ์๋ตํ๊ณ ์ฒ๋ฆฌํ๋ ค๋ฉด Swift Concurrency์ ๋ด์ฅ๋ ํจ์์ธ withTaskCancellationHandler๋ฅผ ์ฌ์ฉํ์ธ์!
โข
๊ฒฐ๊ณผ๋ฅผ ์ง์ ๋๊ธฐํ๊ธฐ๋ณด๋ค๋ withTaskCancellationHandler ํธ์ถ์ ๋ค์ด๋ก๋๋ฅผ ๋ฃ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ ํจ๊ป ๋๊ธฐํ์ธ์.
โข
withTaskCancellationHandler์ ์ ๋ฌ๋ ์ฒซ ๋ฒ์งธ ๋ธ๋ก - ์ฐ๋ฆฌ๊ฐ ์คํํ๋ ค๊ณ ๋๊ธฐํ๋ ๋น๋๊ธฐ ํ๋ก์์
โข
๋ ๋ฒ์งธ ํํ ํด๋ก์ - ์์
์ด ์ทจ์๋ ๋ ์คํ๋๋ ์ฝ๋
โฆ
์ฌ๊ธฐ์์ ์ฆ๊ฐ์ ์ธ ๋คํธ์ํฌ ์์ฒญ์ด ์คํ ์๊ฐ ๋ง๋ฃ๋ก ์ทจ์๋๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ค์ด๋ก๋ ์์
์ผ๋ก ๋คํธ์ํฌ ์์ฒญ์ ์น๊ฒฉํ์ฌ ์ฌ๊ฐ๋ฅผ ํธ์ถํฉ๋๋ค.
โฆ
์ฑ์ด ์ผ์ ์ ์ง๋ ์ํ์์๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ค์ด๋ก๋๋ฅผ ๊ณ์ ์งํ
์ฐ๋ฆฌ๊ฐ ์กฐ๊ธ ์ ์ ๋ง๋ ๋ฐฑ๊ทธ๋ผ์ด๋ URLSession๊ณผ ๋์ผํ ์๋ณ์๋ฅผ ์ฌ์ฉํด์ ํน์ URLSession์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์์ฑํ ๋๋ง ์ด ๋ธ๋ก์ด ํธ์ถ๋๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.































