URL Loading System - ๊ณต์๋ฌธ์
The URL Loading System provides access to resources identified by URLs, using standard protocols like https or custom protocols you create. Loading is performed asynchronously, so your app can remain responsive and handle incoming data or errors as they arrive.
URL Loading System์ https ๋๋ ์ฌ์ฉ์๊ฐ ๋ง๋ ์ปค์คํ ํ๋กํ ์ฝ๊ณผ ๊ฐ์ ํ์ค ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ URL๋ก ์๋ณ๋ ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. Loading์ ๋น๋๊ธฐ์์ผ๋ก ์ํ๋๋ฏ๋ก ์ฑ์ด responsiveํ๊ฒ ์ ์งํ๊ณ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์.. ์๊ฒ ๋๋ฐ, ๋ชจ๋ฅด๊ฒ ๋ค์
์ด URLLoadingSystem์์ ๊ฐ์ฅ ์ค์ํ URLSession ๋ถํฐ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค
URLSession์ HTTP/HTTPS๋ฅผ ํตํด ์ฝํ ์ธ (๋ฐ์ดํฐ)๋ฅผ ์ฃผ๊ณ ๋ฐ๋ API๋ฅผ ์ ๊ณตํ๋ ํด๋์ค์ ๋๋ค.
์ด API๋ ์ธ์ฆ ์ง์์ ์ํ ๋ง์ ๋ธ๋ฆฌ๊ฒ์ดํธ
๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ ์ค์ด์ง ์๊ฑฐ๋ ์ผ์ ์ค๋จ๋ ๋์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ํตํด ์ฝํ
์ธ ๋ฅผ ๋ค์ด๋ก๋
ํ๋ ๊ฒ์ ์ํํ๊ธฐ๋ ํฉ๋๋ค.
URLSession API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ์ ์ ์์ฑํฉ๋๋ค. ํด๋น ์ธ์ ์ ๊ด๋ จ๋ ๋ฐ์ดํฐ ์ ์ก์์ ๊ทธ๋ฃน์ ์กฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ ํญ ๋น ํ๋์ ์ธ์ ์ ๋ง๋ค ์ ์์ต๋๋ค. ๊ฐ ์ธ์ ๋ด์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ ์ถ๊ฐํ๊ณ , ๊ฐ ์์ ์ ํน์ URL์ ๋ํ ์์ฒญ์ ๋ํ๋ ๋๋ค.
URLSession ๊ฐ์ฒด๊ฐ ์์ ํ configuration ํ๋กํผํฐ ๊ฐ์ฒด์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
URLSession ์ ๋ค๊ฐ์ง Session ํ์
์ ๊ฐ์ง๋๋ค.
Shared
: ์ฑ๊ธํค, configuration object๋ฅผ ๊ฐ์ง์ง ์๋๋ค. ๊ธฐ๋ณธ ์ค์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋จ์ํ ๋คํธ์ํฌ ์์ฒญ์ ์ํํ ์ ์์ต๋๋ค. ๋์ , ์ปค์คํ
ํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋จ์ํ๊ฒ ์ฌ์ฉํ ๋๋ ์ ํฉ
๊ธฐ๋ณธ์ธ์
(Default)
: ์ธ์
์ ์ง์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. Degation์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์ ์ธ ์ ์ด๋ ๊ฐ๋ฅํฉ๋๋ค. ํด๋น ์ธ์
์ ํตํด ์ ์ก๋ ์๋ต์ Disk ๋ฐ Memory์ ์บ์ฑ๋ฉ๋๋ค.
์์์ธ์
(Ephemeral)
: Default์ ์ ์ฌํ์ง๋ง ์บ์ฑ์ฒ๋ฆฌ๊ฐ Memory์๋ง ์ํ๋ฉ๋๋ค. ์ฃผ๋ก privateํ ์ฒ๋ฆฌ๋ฅผ ํ๋ คํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๋์คํฌ์ ์ด๋ ํ ๋ฐ์ดํฐ๋ ์ ์ฅํ์ง ์๊ณ , ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค ์ธ์
๊ณผ ์ฐ๊ฒฐํ๋ค. ๋ฐ๋ผ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ธ์
์ ๋ง๋ฃ์ํค๋ฉด ์ธ์
๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋์ธ์
(Background)
: ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ์ก์ ๊ตฌํํ ๋ ์ฌ์ฉํฉ๋๋ค. ๋ณ๋์ ํ๋ก์ธ์ค๊ฐ ๋ชจ๋ ๋ฐ์ดํฐ ์ ์ก์ ์ฒ๋ฆฌํ์ฌ ์ฑ ์คํ์ํ๊ณผ ๊ด๋ จ์์ด ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์
๋ก๋ํ ์ ์์ต๋๋ค
Shared Session ์ ์ ์ธํ ๋ชจ๋ ์ธ์ ์ Session Configuration ๊ฐ์ฒด๋ฅผ ํตํด ์์ฑํ๋ค.
Session Configuration ์ ์ข ๋ฅ๋ ์์์ ์ธ๊ธํ 4๊ฐ์ง์ ๋๋ค.
Shared
, ๊ธฐ๋ณธ์ธ์
(Default)
,์์์ธ์
(Ephemeral)
,๋ฐฑ๊ทธ๋ผ์ด๋์ธ์
(Background)
https://developer.apple.com/documentation/foundation/urlsessiontask
URL Session ์ ์ ๋ฌํ๋ ๊ฐ๋ณ ์์ฒญ
- URLSessionTask ๋ ์ธ์ ์์ ํ๋๋ฅผ ๋ํ๋ด๋ ์ถ์ํด๋์ค์ด๋ค.
- ํ๋์ ์ธ์ ๋ด์์ URLSession ํด๋์ค๋ ์ธ๊ฐ์ง ์์ ์ ํ์ ์ง์ํ๋ค.
URLSessionTask๋ URL session ์ task ๋ฅผ ์ํ base class ์
๋๋ค!
Task ๋ ์ธ์ ๋ session ์ ํ ๋ถ๋ถ์ธ๋ฐ์
URLSession ์ธ์คํด์ค์ task ์์ฑ ๋ฉ์๋ ์ค ํ๋๋ฅผ ํธ์ถํ์ฌ task ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋ค์์ ์์ฑ๊ฐ๋ฅํ task ์ ์ข ๋ฅ์ ํ์ ์ ๊ฒฐ์ ์ง์ด ํธ์ถํ๋ method์ ์ข ๋ฅ์ ๋๋ค.
dataTask(with:)
uploadTask(with:from:)
downloadTask(with:)
streamTask(withHostName:port:)
or streamTask(with:)
task๋ฅผ ๋ค ์์ฑํ๊ณ ๋๋ฉด resume()
๋ฉ์๋๋ฅผ ํธ์ถํด์ task ๋ฅผ ์์ํ ์ ์์ต๋๋ค.
session ์ ๊ทธ๋ฌ๋ฉด task ๊ฐ ์ด๊ฒ์ request๋ฅผ ๋๋ด๊ฑฐ๋ ์คํจํ ๋ ๊น์ง ๊ฐํ ์ฐธ์กฐ๋ฅผ ์ ์งํ๋ค.
๋ฐ๋ผ์ ๋ง๋ค๊ณ ์๋ ์ฑ์ด ๋ด๋ถ bookkeeping ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๋ฐ๋ก task ์ reference ๋ฅผ ์ ์งํ์ง ์์๋ ๋๋ค
๊ทผ๋ฐ ์ ์ฌ์์์ด๋ผ๋ ์ด๋ฆ์ resume()
๋ฉ์๋๋ฅผ ์คํํด์ผ ์์๋ ๊น์?
์๋ํ๋ฉด suspended ์ํ๋ก ์์ฑ์ด ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
์์ ๋ด์ฉ์ ๋ณด๋ค๊ฐ ๊ฐ์๊ธฐ URLSesisonTask์ State ๊ฐ ๋ญ๊ฐ ์๋์ง ๊ถ๊ธํด์ก์ต๋๋ค
๊ฐ ์์ต๋๋ค.!
์
๋ก๋์ค..
์ ๋ฉ์๋๋ค๋ก state๋ฅผ ๋ฐ๊ฟ ์ ์๋ค์
๊ทธ๋ฆฌ๊ณ priority ๋ผ๋ ํ๋กํผํฐ๋ก ์์ ์ ์ฐ์ ์์๋ฅผ ์ค์ ํด์ค์ ๋ ์์ต๋๋ค.
var priority: Float { get set }
์๋ฒ์์ ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ Completion Handler ๋ Session Delegate ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค
Completion Handler๋ก ์ฒ๋ฆฌํ ๋
Session Delegate๋ก ์ฒ๋ฆฌํ ๋
Session Delegate Protocol ์
URLSessionDelegate ๊ฐ ๊ฐ์ฅ ์ต์์์ ์กด์ฌํ๊ณ
๊ทธ ์๋์ ์ด๋ฅผ ์์๋ฐ๋ URLSessionTaskDelegate
๊ทธ ์๋์ ์ด๋ฅผ ์์๋ฐ๋ URLSessionDataDelegate ์ URLSessionDownloadDelegate๊ฐ ์กด์ฌํฉ๋๋ค.
https://inuplace.tistory.com/1226
https://www.boostcourse.org/mo326/lecture/16863?isDesc=false
https://kka7.tistory.com/95
https://developer.apple.com/documentation/foundation/url_loading_system/fetching_website_data_into_memory