๐Ÿš€ iOS ๋„คํŠธ์›Œํ‚น ์ •๋ณตํ•˜๊ธฐ: URLSession

a.veryยท2022๋…„ 9์›” 24์ผ
0

URLLoadingSystem

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ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • URL์„ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ์— ์กด์žฌํ•˜๋Š” ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๊ธฐ์ˆ 
  • ์ด์— ํฌํ•จ๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋†’์€ ์ˆ˜์ค€์˜ API๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ๋งŒ์œผ๋กœ ์„œ๋ฒ„์—ฐ๋™, ๋‹ค์šด๋กœ๋“œ, ์—…๋กœ๋“œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์Œ.. ์•Œ๊ฒ ๋Š”๋ฐ, ๋ชจ๋ฅด๊ฒ ๋„ค์š”

์ด URLLoadingSystem์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ URLSession ๋ถ€ํ„ฐ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

URLSession

URLSession์€ HTTP/HTTPS๋ฅผ ํ†ตํ•ด ์ฝ˜ํ…์ธ (๋ฐ์ดํ„ฐ)๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” API๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

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

URLSession API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์„ธ์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์„ธ์…˜์€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ ์ „์†ก์ž‘์—… ๊ทธ๋ฃน์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ ํƒญ ๋‹น ํ•˜๋‚˜์˜ ์„ธ์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์„ธ์…˜ ๋‚ด์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ž‘์—…์„ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ฐ ์ž‘์—…์€ ํŠน์ • URL์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Request

  • ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ๋•Œ ์–ด๋–ค (HTTP) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€, ์บ์‹ฑ ์ •์ฑ…์€ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€ ๋“ฑ์˜ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Response

  • URL ์š”์ฒญ์˜ ์‘๋‹ต์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด

์„ธ์…˜์˜ ์œ ํ˜•

URLSession ๊ฐ์ฒด๊ฐ€ ์†Œ์œ ํ•œ configuration ํ”„๋กœํผํ‹ฐ ๊ฐ์ฒด์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
URLSession ์€ ๋„ค๊ฐ€์ง€ Session ํƒ€์ž…์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

  • Shared : ์‹ฑ๊ธ€ํ†ค, configuration object๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค. ๊ธฐ๋ณธ ์„ค์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹จ์ˆœํ•œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ , ์ปค์Šคํ…€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ˆœํ•˜๊ฒŒ ์‚ฌ์šฉํ• ๋•Œ๋Š” ์ ํ•ฉ

  • ๊ธฐ๋ณธ์„ธ์…˜ (Default) : ์„ธ์…˜์„ ์ง์ ‘ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Degation์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ธ๋ถ€์ ์ธ ์ œ์–ด๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์„ธ์…˜์„ ํ†ตํ•ด ์ „์†ก๋œ ์‘๋‹ต์€ Disk ๋ฐ Memory์— ์บ์‹ฑ๋ฉ๋‹ˆ๋‹ค.

  • ์ž„์‹œ์„ธ์…˜ (Ephemeral) : Default์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์บ์‹ฑ์ฒ˜๋ฆฌ๊ฐ€ Memory์—๋งŒ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ privateํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ คํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋””์Šคํฌ์— ์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ๋„ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค ์„ธ์…˜๊ณผ ์—ฐ๊ฒฐํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„ธ์…˜์„ ๋งŒ๋ฃŒ์‹œํ‚ค๋ฉด ์„ธ์…˜๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ์„ธ์…˜ (Background) : ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ „์†ก์„ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์•ฑ ์‹คํ–‰์ƒํƒœ๊ณผ ๊ด€๋ จ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

Shared Session ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์„ธ์…˜์€ Session Configuration ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•œ๋‹ค.

Session Configuration : URLSessionConfiguration

  • Session Configuration ์„ ์‚ฌ์šฉํ•˜๋ฉด, ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ๊ณผ ๊ด€๋ จ๋œ ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์…€๋ฃฐ๋Ÿฌ ์—ฐ๊ฒฐ ๊ธˆ์ง€, ์บ์‹œ ์ €์žฅ์œ„์น˜ ์„ค์ •, ์ฟ ๊ธฐ ์„ค์ • ๋ณ€๊ฒฝ, ํƒ€์ž„์•„์›ƒ ๊ฐ’ ์„ค์ • ๋“ฑ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • URLSession ์„ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๊ตฌ์„ฑ์„ ํ•ด๋‘๊ณ  URLSession ์ƒ์„ฑ์ž๋กœ ์ „๋‹ฌํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • URLSession ์ด ์ƒ์„ฑ๋œ ํ›„์—๋Š” Session Configuration ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Session Configuration ์˜ ์ข…๋ฅ˜๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ 4๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  • Shared , ๊ธฐ๋ณธ์„ธ์…˜ (Default) ,์ž„์‹œ์„ธ์…˜ (Ephemeral),๋ฐฑ๊ทธ๋ผ์šด๋“œ์„ธ์…˜ (Background)

Task : URLSessionTask

https://developer.apple.com/documentation/foundation/urlsessiontask
URL Session ์— ์ „๋‹ฌํ•˜๋Š” ๊ฐœ๋ณ„ ์š”์ฒญ

  • URLSessionTask ๋Š” ์„ธ์…˜ ์ž‘์—… ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ถ”์ƒํด๋ž˜์Šค์ด๋‹ค.
  • ํ•˜๋‚˜์˜ ์„ธ์…˜๋‚ด์—์„œ URLSession ํด๋ž˜์Šค๋Š” ์„ธ๊ฐ€์ง€ ์ž‘์—…์œ ํ˜•์„ ์ง€์›ํ•œ๋‹ค.

URLSessionTask๋Š” URL session ์˜ task ๋ฅผ ์œ„ํ•œ base class ์ž…๋‹ˆ๋‹ค!
Task ๋Š” ์–ธ์ œ๋‚˜ session ์˜ ํ•œ ๋ถ€๋ถ„์ธ๋ฐ์š”
URLSession ์ธ์Šคํ„ด์Šค์˜ task ์ƒ์„ฑ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ task ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ƒ์„ฑ๊ฐ€๋Šฅํ•œ task ์˜ ์ข…๋ฅ˜์™€ ํƒ€์ž…์„ ๊ฒฐ์ •์ง€์–ด ํ˜ธ์ถœํ•˜๋Š” method์˜ ์ข…๋ฅ˜์ž…๋‹ˆ๋‹ค.


  1. URLSessionDataTask: dataTask(with:)
  • HTTP์˜ ๊ฐ์ข… ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ Data ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ (๋ฉ”๋ชจ๋ฆฌ์— NSData ๊ฐ์ฒด๋กœ ์‘๋‹ต์„ ๋ฐ›์•„์˜ด)
  • API ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ธฐ ์ ํ•ฉ. ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” Task
  • background session ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  1. URLsessionUploadTask: uploadTask(with:from:)
  • ํŒŒ์ผ ์ „์†ก์— ์ ํ•ฉ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์›น ์„œ๋ฒ„๋กœ Data ๊ฐ์ฒด ๋˜๋Š” ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ๋กœ HTTP์˜ POST ํ˜น์€ PUT ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
  • background session์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  1. URLSessionDownloadTask:downloadTask(with:)
  • ํŒŒ์ผ ์ „์†ก์— ์ ํ•ฉ
  • ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์„œ ํŒŒ์ผ์˜ ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๊ฐ€ ๋Œ€๊ธฐ ์ค‘์ด๊ฑฐ๋‚˜ ์‹คํ–‰ ์ค‘์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ƒํƒœ์—์„œ๋„ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๊ฐ€๋Šฅ
  • background session์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  1. URLSessionStreamTask: streamTask(withHostName:port:) or streamTask(with:)
  • ์ฑ„ํŒ…๊ณผ ๊ฐ™์€ TCP ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Task
  • host name ๊ณผ ํฌํŠธ ํ˜น์€ net service object๋กœ TCP/IP connection ์ง€์›

์š”์•ฝ

  • DataTask
    - ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์–ด๋–ค ์‘๋‹ต์ด๋ผ๋„ Data ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ
    - ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ์˜ ์ „์†ก (JSON, XML, HTML ๋ฐ์ดํ„ฐ)
  • Upload/Download Task
    - ๋‹จ์ˆœํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์˜ ์ „๋‹ฌ
    - ์šฉ๋Ÿ‰์ด ํฐ ํŒŒ์ผ: (๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋„ ์ „๋‹ฌ๋˜๋„๋ก)

task๋ฅผ ๋‹ค ์ƒ์„ฑํ•˜๊ณ  ๋‚˜๋ฉด resume() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ task ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

session ์€ ๊ทธ๋Ÿฌ๋ฉด task ๊ฐ€ ์ด๊ฒƒ์˜ request๋ฅผ ๋๋‚ด๊ฑฐ๋‚˜ ์‹คํŒจํ• ๋•Œ ๊นŒ์ง€ ๊ฐ•ํ•œ ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
๋”ฐ๋ผ์„œ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ์•ฑ์ด ๋‚ด๋ถ€ bookkeeping ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋”ฐ๋กœ task ์— reference ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค

๊ทผ๋ฐ ์™œ ์žฌ์‹œ์ž‘์ด๋ผ๋Š” ์ด๋ฆ„์˜ resume() ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ์‹œ์ž‘๋ ๊นŒ์š”?
์™œ๋ƒํ•˜๋ฉด suspended ์ƒํƒœ๋กœ ์ƒ์„ฑ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

URLSession ์˜ State

์œ„์˜ ๋‚ด์šฉ์„ ๋ณด๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ URLSesisonTask์˜ State ๊ฐ€ ๋ญ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ด์กŒ์Šต๋‹ˆ๋‹ค

  • running : (ํ™œ์„ฑํ™”๋œ ์ƒํƒœ)
  • suspended (์—ฐ๊ธฐ๋œ)
  • cenceling (์‚ญ์ œ์ค‘) -> cancel ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์•˜์„๋–„
  • completed (์™„๋ฃŒ) -> ์ทจ์†Œ์—†์ด ์ž˜ completed๋œ ์ƒํƒœ, task ์˜ delegate ๊ฐ€ ๋”์ด์ƒ์˜ ์ฝœ๋ฐฑ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.!
์—…๋กœ๋“œ์ค‘..

์š” ๋ฉ”์†Œ๋“œ๋“ค๋กœ state๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋„ค์š”

๊ทธ๋ฆฌ๊ณ  priority ๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋กœ ์ž‘์—…์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•ด์ค„์ˆ˜ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 0.0๋ถ€ํ„ฐ 1.0 ์‚ฌ์ด๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
var priority: Float { get set }
  • ํ˜น์€ ๋ช‡๊ฐ€์ง€ constants๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์–ด์š”

URL Session Task Priority

URL Session Delegate

์„œ๋ฒ„์—์„œ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๋Š” Completion Handler ๋‚˜ Session Delegate ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค

  • โœ… ์ผ๋ฐ˜์ ์œผ๋กœ Completion Handler๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ Session Task ์ฒ˜๋ฆฌ ์ค‘ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์„ธ๋ถ€์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Session Delegate ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • โœ… Session Delegate๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Completion Handler๋ฅผ ํ†ตํ•œ ์ฒ˜๋ฆฌ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค

Completion Handler๋กœ ์ฒ˜๋ฆฌํ• ๋•Œ

Session Delegate๋กœ ์ฒ˜๋ฆฌํ• ๋•Œ

Session Delegate Protocol ์€
URLSessionDelegate ๊ฐ€ ๊ฐ€์žฅ ์ตœ์ƒ์œ„์— ์กด์žฌํ•˜๊ณ 
๊ทธ ์•„๋ž˜์— ์ด๋ฅผ ์ƒ์†๋ฐ›๋Š” URLSessionTaskDelegate
๊ทธ ์•„๋ž˜์— ์ด๋ฅผ ์ƒ์†๋ฐ›๋Š” URLSessionDataDelegate ์™€ URLSessionDownloadDelegate๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

Ref

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

profile
๐Ÿššchanhee-jeong.tistory.com ๐Ÿš€ github.com/chaneeii/iOS-Study-Log

0๊ฐœ์˜ ๋Œ“๊ธ€