꾸준한 기록

[iOS] URL Loading System 본문

iOS

[iOS] URL Loading System

Doo혀니 2022. 8. 11. 22:36

이 포스팅은 iOS URL Loading System 요약입니다.

 

- URL Loading System을 이용해서 remote URL 리소스에 접근할 수 있습니다.

- http 프로토콜 뿐만 아니라, custom 프로토콜을 이용하는 통신에서도 사용할 수 있습니다.

- URL Loading System에서 데이터 로딩 작업은 일반적으로 비동기적으로 일어납니다.

 

구성 요소

1. URLSession

2. URLTask

3. URLSessionConfiguration

 

구성 요소 설명 

URLSession을 이용하여 URLSessionTask를 생성할 수 있습니다.

URLSessionTask를 이용하여 데이터를 업로드, 다운로드 할 수 있습니다.

URLSessionConfiguration을 이용하여 캐싱, 쿠키, cellular 데이터 허용 여부 등을 설정할 수 있습니다.

URLSession 하나를 반복적으로 이용하여, 여러 URLSessionTask를 생성해서 사용할 수 있습니다.

 

그렇다면, 언제 여러개의 URLSession을 사용할까요?

예를 들어서, 브러우저에서 처럼 '개인정보보호'모드와 '일반'모드로 분리해서 창을 띄울 때, '개인정보보호'모드에서는 캐싱작업이 일어나지 않아야 합니다. 따라서 '개인정보보호'모드용 URLSession과 '일반'모드 URLSession으로 2개의 URLSession을 생성해야 합니다. 

이를 도식화한 그림은 다음과 같습니다.

출처: URL Loading System 공식 문서

URLSession은 URLSessionDelegate를 가질 수 있습니다. 네트워크 통신 과정에서 주기적으로 발생하는 에러나 결과값을 URLSessionDelegate에서 처리합니다.

defualt URLSessionDelegate는 data task를 생성할 때 파라미터로 넘기는 completion handler입니다.

 

⚠️ 만일 custom URLSessionDelegate와 completion handler를 둘다 설정했다면, custom URLSessionDelegate만 호출되고, completion handler는 호출되지 않습니다.

 

URLSession이 백그라운드에서도 동작하도록 할 수 있습니다.

만일 백그라운드에서도 실행되도록 URLSession을 설정한다면, 앱이 일시정지되었을 때 시스템이 대신해서 해당 URLSession의 작업을 해줍니다. 그리고 작업이 완료되었을 때, 시스템이 앱에게 작업 결과를 전달해줍니다.

 

💡 URLSession과 URLSessionTask간의 관계 정리

1. URLSession

- URLSession은 URLSessionTask를 생성하고 관리하는 역할

- URLSession을 통해, 네트워크 통신 환경설정을 할 수 있다.

 

2. URLSessionTask

- 하나의 네트워크 Request/Response를 나타낸다.

- URLSession이 갖는 네트워크 통신 환경설정대로 네트워킹을 수행한다.

- 동일한 URLSession으로 부터 생성된 URLSessionTask는 같은 네트워크 통신 환경설정을 갖는다.

 

🤔 여기서 말하는 네트워크 통신 환경설정이란?

쿠키, 캐싱 방식, cellular 데이터 사용 가능 여부, 1개의 호스트에 대해 설정할 수 있는 네트워크 connection의 최대 개수 등 네트워크 통신 수행 방식을 결정합니다.

iOS에서는 URLSessionConfiguration을 이용하여 네트워크 통신 환경설정을 수정할 수 있습니다.

 

 

URLSessionDelegate, URLSessionTaskDelegate 언제 사용?

1. 리다이렉션 이벤트 수신했을 때

2. 인증(authentication) 관련 이슈가 발생했을 때

3. 작업이 완료되었을 때 

이를 처리하기 위해서 사용합니다.

 


출처

- URL Loading System 공식 문서 

https://developer.apple.com/documentation/foundation/url_loading_system

 

'iOS' 카테고리의 다른 글

iOS 시스템의 메모리 구조  (0) 2024.08.31
[WWDC24] Bring you app's core features to with App Intents 요약  (0) 2024.06.20
Application State  (1) 2024.05.01
[SwiftUI] 기초 (App, Scene)  (2) 2023.11.27
FileSystem, FileManager  (1) 2023.10.25