URLSession과 URLSessionDataTask
HTTP/HTTPS를 통해 콘텐츠(데이터)를 주고받기 위해 API를 제공하는 클래스인 URLSession과 세션 작업을 하나로 나타내는 클래스인 URLSessionTask에 대해 알아봅시다.
학습 목표
1. URLSession과 URLSessionDataTask에 대해 알봅니다.
2. 세션에 대해 알아봅니다.
3. 작업(태스크) 상태 제어에 대해 알아봅니다.
URLSession과 URLSessionDataTask
HTTP/HTTPS를 통해 콘텐츠(데이터)를 주고받기 위해 API를 제공하는 클래스인 URLSession과 세션 작업을 하나로 나타내는 클래스인 URLSessionTask에 대해 알아봅시다.
학습 목표
1. URLSession과 URLSessionDataTask에 대해 알봅니다.
2. 세션에 대해 알아봅니다.
3. 작업(태스크) 상태 제어에 대해 알아봅니다.
학습하기
URLSession
URLSession
은 HTTP/HTTPS를 통해 콘텐츠(데이터)를 주고받는 API를 제공하는 클래스입니다. 이 API는 인증 지원을 위한 많은 델리게이트 메서드를 제공하며, 애플리케이션이 실행 중이지 않거나 일시 중단된 동안 백그라운드 작업을 통해 콘텐츠를 다운로드하는 것을 수행하기도 합니다. URLSession
API를 사용하기 위해 애플리케이션은 세션을 생성합니다. 해당 세션은 관련된 데이터 전송작업 그룹을 조정합니다. 예를 들면 웹 브라우저를 사용 중인 경우 탭 당 하나의 세션을 만들 수 있습니다. 각 세션 내에서 애플리케이션은 작업을 추가하고, 각 작업은 특정 URL에 대한 요청을 나타냅니다.
Request
서버로 요청을 보낼 때 어떤 (HTTP)메서드를 사용할 것인지, 캐싱 정책은 어떻게 할 것인지 등의 설정을 할 수 있습니다.
Response
URL 요청의 응답을 나타내는 객체입니다.
세션의 유형
URLSession
API는 세가지 유형의 세션을 제공합니다. 이 타입은 URLSession
객체가 소유한 configuration
프로퍼티 객체에 의해 결정됩니다.
세션 만들기
init(configuration: URLSessionConfiguration)
class var shared: URLSession { get }
세션 구성
@NSCopying var configuration: URLSessionConfiguration { get }
var delegate: URLSessionDelegate? { get }
Task
URLSessionTask
는 세션 작업 하나를 나타내는 추상 클래스입니다. 하나의 세션 내에서 URLSession
클래스는 세 가지 작업 유형, 즉 데이터 작업(Data Task), 업로드 작업(Upload Task), 다운로드 작업(Download Task)을 지원합니다.
URLSessionDataTask
Data
객체를 가져오는 작업을 수행합니다.URLsessionUploadTask
Data
객체 또는 파일 데이터를 업로드하는 작업을 수행합니다. 주로 HTTP의 POST
혹은 PUT
메서드를 이용합니다.URLSessionDownloadTask
데이터 작업은 서버로부터 어떤 응답이라도 Data
객체의 형태로 전달받을 때 사용하며, 업로드 작업 및 다운로드 작업은 단순한 바이너리 파일의 전달에 목적을 둔다고 볼 수 있습니다.
JSON, XML, HTML 데이터 등 단순한 데이터의 전송에는 주로 데이터 작업을 사용하며, 용량이 큰 파일의 경우 애플리케이션이 백그라운드 상태인 경우에도 전달할 수 있도록 업로드(다운로드) 작업을 주로 사용합니다.
세션에 Data Task 추가하기
func dataTask(with url: URL) -> URLSessionDataTask
func dataTask(with request: URLRequest) -> URLSessionDataTask
func dataTask(with url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask
func dataTask(with request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask
세션에 Download Task 추가하기
func downloadTask(with url: URL) -> URLSessionDownloadTask
func downloadTask(with url: URL, completionHandler: @escaping (URL?, URLResponse?, Error?) -> Void) -> URLSessionDownloadTask
func downloadTask(with request: URLRequest) -> URLSessionDownloadTask
func downloadTask(with request: URLRequest, completionHandler: @escaping (URL?, URLResponse?, Error?) -> Void) -> URLSessionDownloadTask
세션에 Upload Task 추가하기
func uploadTask(with request: URLRequest, from bodyData: Data) -> URLSessionUploadTask
func uploadTask(with request: URLRequest, from bodyData: Data?,
completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionUploadTask
func uploadTask(with request: URLRequest, fromFile fileURL: URL) -> URLSessionUploadTask
func uploadTask(with request: URLRequest, fromFile fileURL: URL,
completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionUploadTask
작업(태스크) 상태 제어
func cancel()
func resume()
func suspend()
var state: URLSessionTask.State { get }
var priority: Float { get set }
참고 문서 / 링크
https://developer.apple.com
https://developer.apple.com
https://developer.apple.com
https://developer.apple.com
https://developer.apple.com
https://developer.apple.com
https://developer.apple.com
comment