41일차 수업을 정리한 글입니다.
Learned
URLSession
1. 개요
- 네트워크 통신을 위한 API를 제공해주는 클래스로, 설정한 URL로
데이터를 주고 받을 수 있고 타임 아웃, 캐시 정책 등의 설정 기능을 포함함. - 기본적으로 제공되는 Shared 객체를 사용하거나 URLSessionConfiguration 객체를 가지고
새로운 URLSession 객체를 생성할 수 있음. - URLSessionConfiguration은 URLSession의 세부적인 동작과 정책들을 결정하는 객체로서,
타임아웃, 캐싱 정책, 백그라운드 전송 등을 설정할 때 사용함.
URLSessionConfiguration으로 설정할 수 있는 것들
셀룰러 연결 여부, 타임 아웃 간격, 리소스 요청 최대 시간, 캐시 활성화 여부, 캐시 만료 기간 등
2. 종류
- Shared Session
- 싱글턴 객체이며 기초적인(Basic) 네트워크 통신을 할 때 주로 사용됨.
- 간단하게 사용할 수 있다는 장점이 있지만 Delegate를 사용할 수 없고
설정(URLSessionConfiguration)을 커스텀할 수 없다는 한계가 있음.
- Default Session
- URLSessionConfiguration.default 프로퍼티로 초기화되는 URLSession 객체
- Shared Session의 설정과 유사하지만 설정을 커스텀할 수 있음.
- Delegate를 통해 네트워크 응답에 대한 세부적인 제어가 가능함.
- Ephemeral Session
- URLSessionConfiguration.ephemeral 프로퍼티로 초기화되는 URLSession 객체
- Shared Session의 설정과 비슷하지만 디스크에 캐시, 쿠키, 인증 정보를 저장하지 않음.
(대신 RAM에 저장됨) - 그렇기 때문에 웹 브라우저에서 프라이빗(시크릿) 모드에 주로 사용됨.
- Background Session
- URLSessionConfiguration.background 프로퍼티로 초기화되는 URLSession 객체
- 앱의 백그라운드에서 데이터를 업로드 및 다운로드 할 때 사용함.
URLSessionTask
1. 개요
- 다운로드, 업로드같은 URLSession 내부에서 수행되는 하나의 작업을 나타냄.
- 작업의 목적에 따라 4가지의 타입이 존재하며 URLSession의 인스턴스 메서드로 작업을 생성할 수 있음.
- 작업 생성 후 resume() 메서드를 호출해서 네트워크 통신을 시작할 수 있음.
2. 종류
- DataTask : 리소스를 요청하고 서버의 응답을 반환. 백그라운드 세션에서 수행되지 못함.
- UploadTask: 서버 응답을 받기 전에 데이터를 업로드. 백그라운드 세션에서도 수행됨.
- downloadTask: 리소스를 디스크에 다운로드. 모든 세션에서 수행됨.
- streamTask: 서버 호스트와 포트 번호로 TCP/IP 연결을 생성
URLRequest과 URLResponse
1. URLRequest
- 프로토콜, URL 스키마와 독립적으로 네트워크 요청에 대한 정보를 나타내며,
URL, 캐시 정책, HTTP 메서드 및 헤더 등의 정보를 담고 있음. - URLRequest는 오직 네트워크 요청 정보만 담고 있기 때문에
서버에 요청을 보내기 위해서는 URLSession 객체가 필요함.
2. URLResponse
- 프로토콜, URL 스키마와 독립적으로 네트워크 요청에 대한 응답 정보를 나타내며
mimetype, url 등의 정보를 담고 있음. - 우리가 흔히 HTTP 요청으로 받는 응답 객체는 HTTPURLResponse 타입의 인스턴스이고
이 클래스는 URLResponse의 서브 클래스임.
서버의 응답을 처리하는 방법
1. Completion Handler
- URLSessionTask 인스턴스 생성 시 completion handler를 인자로 넘겨줄 수 있고
이는 Task가 종료됐을 때 한 번만 호출됨. - completion Handler는 파라미터로 Data, URLResponse, Error 객체를 가짐.
(각각 순서대로 서버로부터 전달받은 데이터, 응답에 대한 메타 데이터, 에러 정보)
2. URLSessionDelegate
- URLSession의 다양한 작업 이벤트를 다루기 위한 메서드를 정의해놓은 프로토콜
- URLSessionTaskDelegate, URLSessionDataDelegate 등 하위 프로토콜이 존재함.
- 작업의 시작과 종료, 다운로드 작업 시 진행 상황 업데이트같은 다양한 상황의
이벤트를 세부적으로 처리하고자 할 때 사용함.
이상입니다.
'TIL' 카테고리의 다른 글
[Sesac IOS] 43~44일차 TIL (0) | 2022.09.05 |
---|---|
[Sesac IOS] 42일차 TIL (0) | 2022.08.31 |
[Sesac IOS] 40일차 TIL (0) | 2022.08.31 |
[Sesac IOS] 39일차 TIL (0) | 2022.08.29 |
[Sesac IOS] 38일차 TIL (0) | 2022.08.25 |