URLSession ?
Foundation Framework에서 지원하는 iOS앱과 서버 간 데이터를 통신하기 위해 사용되는 API이다.
iOS ↔️ 서버의 HTTP 프로토콜뿐만 아니라 인증/쿠키 관리/ 캐시 관리 등을 지원하며
통신 시에는 Request와 Response를 기본 구조로 가진다.
✅ 간단하게 URLSession은 iOS에서 네트워크 통신을 하기 위해서 필요한 API이다.
1️⃣ Request
✔️ URL 객체를 통해 직접 통신하는 형태
✔️ URLRequest객체를 생성해 통신하는 형태
2️⃣ Response
✔️ Completion Handler로 Response을 받는 형태
✔️ URLSessionDelegate를 통해 지정 메소드를 호출하는 형태
✔️ Background상태에서의 동작이나, 인증 및 캐싱을 Default 옵션으로 사용하지 않는 경우 Delegate 패턴을 사용한다.
URLSessionConfiguration
➡️ URLSession에 대한 동작 및 정책을 정의하는 구성 개체이다.
✅ URLSession 인스턴스 생성
✅ URLSession 개체를 사용하여 데이터를 업로드, 다운로드할 때 사용할 동작 및 정책을 정의
✅ 타임아웃 시간 값, 캐싱 정책들을 정의
1️⃣ 공유 세션 - URLSession.share()
- 기본 요청을 위한 세션
- 싱글톤으로 사용
- 원하는 설정은 불가능하나 구현이 간단하다.
let sharedSession = URLSession.shared()
2️⃣ 기본 세션 - URLSession(Configuration: .default)
- 공유 세션과 유사하나 원하는 설정이 가능하다.
- 순차적 데이터 처리를 위한 Delegate를 지정할 수 있다.
- 캐시와 쿠키, 사용자 인증 정보 등을 디스크에 저장하는 디스크 기반 캐싱을 지원한다.
let defaultSession = URLSession(configuration: .default)
3️⃣ 임시 세션 - URLSession(configuration: .ephemeral)
- 공유 세션과 유시하나 캐시, 쿠키, 사용자 인증 정보 등을 디스크에 저장하지 않는다.
- 세션이 만료되면 데이터가 소멸된다.
let ephemeralSession = URLSession(configuration: .ephemeral)
4️⃣ 백그라운드 세션 - URLSession(configuration: .background)
- 백그라운드 상태에서의 컨텐츠 업로드 및 다운로드
let backgroundSession = URLSession(configuration: .background(withIdentifier:))
URLSessionTask
➡️ URLSession 작업 하나를 나타내는 추상 클래스
✅ 실제 서버와 통신을 담당한다.
✅ 서버로 보낸 요청에 대한 응답을 받는다.
1️⃣ URLSessionDataTask
- 데이터 객체를 사용하여 데이터를 요청하고 응답을 받는다.
- 요청이 빈번하고 짧을 때 사용한다.
- 백그라운드에서 지원되지 않는다.
2️⃣ URLSessionUploadTask
- URLSessionDataTask와 유사하나 Upload에 특화되어 있다.
- 데이터 객체 또는 파일 형태의 데이터를 Upload하는 작업을 수행한다.
- 백그라운드에서 Upload를 지원한다.
3️⃣ URLSessionDownloadTask
- 데이터를 Download 받아 파일 형태로 저장한다.
- 백그라운드에서 Download를 지원한다.
4️⃣ URLSessionStreamTask
- TCP/IP 연결을 생성할 때 사용한다.
5️⃣ URLSessionWebSocketTask
- Web Socket Protocol 표준을 통해 통신한다.
- TCP 및 TLS를 통해 메세지를 교환한다.
Reference
https://developer.apple.com/documentation/foundation/urlsession
https://developer.apple.com/documentation/foundation/urlsessiontask
'iOS > iOS' 카테고리의 다른 글
[iOS] 네트워크 통신 - URL, URLComponents (0) | 2023.08.12 |
---|---|
[iOS] 네트워크 통신 - URLSession 간단한 예제 (0) | 2023.08.10 |
[iOS] 네트워크 통신 - URLSession (LifeCycle, GET/POST) (0) | 2023.08.10 |
[iOS] 2. 메모리 관리 1 - ARC (Automatic Reference Counting) (0) | 2023.08.03 |
[iOS] 1. 메모리 구조 (0) | 2023.08.03 |