URLSession πŸ“™

YaR LabΒ·2023λ…„ 7μ›” 25일
0

swiftΒ πŸ“™

λͺ©λ‘ 보기
7/16
post-thumbnail

1️⃣ μ •μ˜

λ„€νŠΈμ›Œν¬ 데이터 전솑 μž‘μ—…λ“€μ„ μ‘°μ •ν•˜λŠ” 객체

class URLSession : NSObject

2️⃣ μ„€λͺ…

  • URLSession ν΄λž˜μŠ€μ™€ κ΄€λ ¨λœ ν΄λž˜μŠ€λ“€μ€ λ„€νŠΈμ›Œν¬ 데이터 전솑 μž‘μ—…μ„ μ‘°μ •ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” APIλ₯Ό 제곡
  • APIλ₯Ό μ‚¬μš©ν•˜μ—¬ 앱은 μ›Ή μ„œλ²„λ‘œλΆ€ν„° 데이터λ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ±°λ‚˜ μ—…λ‘œλ“œν•  수 있음
  • URL둜 ν‘œμ‹œλœ μ—”λ“œν¬μΈνŠΈ(μ›Ή μ„œλ²„ μ£Όμ†Œ)와 ν†΅μ‹ ν•˜μ—¬ 데이터λ₯Ό μ£Όκ³ λ°›μŒ

    μ—”λ“œν¬μΈνŠΈ

    • λ„€νŠΈμ›Œν¬ μ„œλΉ„μŠ€μ— μ ‘κ·Όν•˜κΈ° μœ„ν•œ URL μ£Όμ†Œ
    • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ™€ 톡신할 수 μžˆλŠ” νŠΉμ • μœ„μΉ˜λ‚˜ 경둜λ₯Ό μ§€μ •ν•œ URL
    • https://example.com/api/posts 이 μ£Όμ†Œμ—μ„œ μ—”λ“œν¬μΈνŠΈλŠ” /api/posts
  • APIλ₯Ό μ‚¬μš©ν•˜μ—¬ 앱은 λ°±κ·ΈλΌμš΄λ“œμ—μ„œ 데이터λ₯Ό λ‹€μš΄λ‘œλ“œν•  μˆ˜λ„ 있음
  • 즉, 앱이 μ‹€ν–‰λ˜μ§€ μ•Šκ±°λ‚˜ iOS의 경우 앱이 μΌμ‹œ μ€‘λ‹¨λœ μƒνƒœμ—μ„œλ„ 데이터λ₯Ό λ°±κ·ΈλΌμš΄λ“œμ—μ„œ λ‹€μš΄λ‘œλ“œν•  수 있음
  • URLSession ν΄λž˜μŠ€μ™€ ν•¨κ»˜ μ‚¬μš©λ˜λŠ” URLSessionDelegate와 URLSessionTaskDelegateλŠ” 좔가적인 κΈ°λŠ₯을 제곡
  • URLSessionDelegateλŠ” λ„€νŠΈμ›Œν¬ μž‘μ—…μ˜ 인증을 μ§€μ›ν•˜κ³ , μ„œλ²„λ‘œλΆ€ν„° 받은 응닡에 따라 λ¦¬λ””λ ‰μ…˜μ„ μ²˜λ¦¬ν•˜λŠ” λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰

    λ¦¬λ””λ ‰μ…˜

    • μ›Ή μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈ(일반적으둜 μ›Ή λΈŒλΌμš°μ €λ‚˜ μ•±)의 μš”μ²­μ„ 받아듀이고, ν•΄λ‹Ή μš”μ²­μ„ λ‹€λ₯Έ URL둜 μ „μ†‘ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€
    • 예λ₯Όλ“€μ–΄, μ›Ή νŽ˜μ΄μ§€κ°€ 이전에 μ‚¬μš©ν•˜λ˜ URL이 λ³€κ²½λ˜μ—ˆμ„ λ•Œ, 이전 URL을 μš”μ²­ν•œ μ‚¬μš©μžλ₯Ό μƒˆλ‘œμš΄ URL둜 μ•ˆλ‚΄ν•˜λŠ”λ° μ‚¬μš©λ¨
  • URLSessionTaskDelegateλŠ” 각각의 λ„€νŠΈμ›Œν¬ μž‘μ—…μ— λŒ€ν•œ 이벀트λ₯Ό μˆ˜μ‹ ν•˜μ—¬ μž‘μ—…μ˜ 진행 μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜κ³  μ™„λ£Œ μ—¬λΆ€λ₯Ό ν™•μΈν•˜λŠ” 데 μ‚¬μš©λ¨

3️⃣ λ™μž‘ 원리

  • 앱은 ν•˜λ‚˜ μ΄μƒμ˜ URLSession μΈμŠ€ν„΄μŠ€λ₯Ό 생성함
  • 각 μΈμŠ€ν„΄μŠ€λŠ” κ΄€λ ¨λœ 데이터 전솑 μž‘μ—…λ“€μ„ μ‘°μ •
  • 예λ₯Ό λ“€μ–΄, μ›Ή λΈŒλΌμš°μ €λ₯Ό λ§Œλ“œλŠ” 경우, 앱은 각 νƒ­μ΄λ‚˜ μ°½λ§ˆλ‹€ ν•˜λ‚˜μ˜ μ„Έμ…˜μ„ μƒμ„±ν•˜κ±°λ‚˜ μƒν˜Έμž‘μš© μš©λ„λ‘œ ν•˜λ‚˜μ˜ μ„Έμ…˜κ³Ό λ°±κ·ΈλΌμš΄λ“œ λ‹€μš΄λ‘œλ“œμš©μœΌλ‘œ 또 λ‹€λ₯Έ μ„Έμ…˜μ„ 생성할 수 있음
  • 각 μ„Έμ…˜ λ‚΄μ—μ„œ, 앱은 νŠΉμ • URL에 λŒ€ν•œ μš”μ²­μ„ λ‚˜νƒ€λ‚΄λŠ” μ—¬λŸ¬ μž‘μ—…λ“€μ„ 좔가함
  • 이 μž‘μ—…λ“€μ€ ν•„μš”ν•œ 경우 HTTP λ¦¬λ””λ ‰μ…˜μ„ λ”°λ₯΄λ©° ν•΄λ‹Ή URLκ³Ό κ΄€λ ¨λœ 데이터λ₯Ό 전솑함

πŸ“Œ Types of URL Sessions

  • νŠΉμ • URL μ„Έμ…˜ λ‚΄μ˜ μž‘μ—…λ“€μ€ κ³΅ν†΅μ˜ session configuration 객체λ₯Ό κ³΅μœ ν•¨
  • 이 session configuration κ°μ²΄λŠ” μ—°κ²° λ™μž‘μ„ μ •μ˜ν•˜λŠ”λ° μ‚¬μš©λ˜λ©°, 예λ₯Ό λ“€μ–΄ ν•œ ν˜ΈμŠ€νŠΈμ— λŒ€ν•΄ λ™μ‹œμ— μˆ˜ν–‰ν•  수 μžˆλŠ” μ΅œλŒ€ μ—°κ²° 수, 연결에 이동톡신망을 μ‚¬μš©ν•  수 μžˆλŠ”μ§€ μ—¬λΆ€ 등을 μ •μ˜
  • URLSessionμ—λŠ” 기본적인 μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ ꡬ성 객체가 μ—†λŠ” 싱글톀(shared session) μ„Έμ…˜μ΄ 있음
  • 이 μ„Έμ…˜μ€ 직접 μƒμ„±ν•œ μ„Έμ…˜λ“€λ§ŒνΌ μ‚¬μš©μž μ •μ˜κ°€ κ°€λŠ₯ν•˜μ§€λŠ” μ•Šμ§€λ§Œ, 맀우 μ œν•œμ μΈ μš”κ΅¬ 사항이 μžˆλŠ” κ²½μš°μ—λŠ” μΆ©λΆ„νžˆ μœ μš©ν•¨
  • 이 μ„Έμ…˜μ€ shared 클래슀 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ μ ‘κ·Όν•  수 있음
  • λ‹€λ₯Έ μ’…λ₯˜μ˜ μ„Έμ…˜μ— λŒ€ν•΄μ„œλŠ” μ„Έ 가지 μ’…λ₯˜μ˜ ꡬ성 쀑 ν•˜λ‚˜λ‘œ URLSession을 생성함
  • κΈ°λ³Έ μ„Έμ…˜(default session)은 곡유 μ„Έμ…˜κ³Ό μœ μ‚¬ν•œ λ™μž‘μ„ ν•˜μ§€λ§Œ, ꡬ성을 λ³€κ²½ν•  수 있음, λ˜ν•œ κΈ°λ³Έ μ„Έμ…˜μ— λŒ€λ¦¬μž(delegate)λ₯Ό μ§€μ •ν•˜μ—¬ 데이터λ₯Ό μ¦λΆ„μ μœΌλ‘œ 얻을 수 있음
  • μž„μ‹œ μ„Έμ…˜(ephemeral session)은 곡유 μ„Έμ…˜κ³Ό μœ μ‚¬ν•˜μ§€λ§Œ, μΊμ‹œ, μΏ ν‚€ λ˜λŠ” 자격 증λͺ…을 λ””μŠ€ν¬μ— κΈ°λ‘ν•˜μ§€ μ•ŠμŒ, μ΄λŠ” 개인 정보 보호 및 λ³΄μ•ˆμ„ μœ„ν•΄ 더 적합
  • λ°±κ·ΈλΌμš΄λ“œ μ„Έμ…˜(background session)은 앱이 μ‹€ν–‰λ˜μ§€ μ•Šμ„ λ•Œλ„ μ½˜ν…μΈ μ˜ μ—…λ‘œλ“œμ™€ λ‹€μš΄λ‘œλ“œλ₯Ό λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 앱이 μΌμ‹œ μ€‘λ‹¨λœ μƒνƒœμ—μ„œλ„ λ„€νŠΈμ›Œν¬ μž‘μ—…μ„ 계속할 수 μžˆμŠ΅λ‹ˆλ‹€.

각 ꡬ성 μœ ν˜•μ„ μƒμ„±ν•˜λŠ” 방법에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ URLSessionConfiguration 클래슀의 "Creating a Session Configuration Object" μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”. 이 μ„Ήμ…˜μ—μ„œλŠ” 각 μœ ν˜•μ˜ ꡬ성을 μƒμ„±ν•˜λŠ” 방법에 λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…이 μ œκ³΅λ©λ‹ˆλ‹€.


μΆœμ²˜πŸ“š

🍎Apple Docs: URLSession

0개의 λŒ“κΈ€