URLSession
- Network통신에 사용되는 데이터 전송 작업 그룹을 조정하는 객체
- Apple에서 제공하는 네트워크 통신 API
- NSObject를 상속
URLSession 클래스 및 관련 클래스는 URL로 표시된 엔드포인트에서 데이터를 다운로드하고 엔드포인트로 데이터를 업로드하기 위한 API를 제공합니다. 또한 앱은 이 API를 사용하여 앱이 실행되고 있지 않거나 iOS에서 앱이 일시 중단된 동안 백그라운드 다운로드를 수행할 수 있습니다. 관련 URLSessionDelegate 및 URLSessionTaskDelegate를 사용하여 인증을 지원하고 리디렉션 및 작업 완료와 같은 이벤트를 수신할 수 있습니다.
URLSession Task
- URL session에서 수행되는 특정 리소스 다운로드와 같은 작업
- resume()메소드를 통해 Task실행 가능
Task는 3가지로 구성되어 있다.
1. DataTask(URLSessionDataTask 인스턴스 생성)
2. DownLoadTask(URLSessionDownloadTask 인스턴스 생성)
3. UploadTask(URLSessionUploadTask 인스턴스 생성)
1. DataTask
- URL 요청을 실시하고 완료 시 handler를 호출하는 Task형식
- 비동기적으로 Task가 다 실행된 후 Closure가 실행되기 때문에 @escaping Closure형태로 받아와야 한다.
- 요청한 data의 response를 memory에서 받는다.
- 서버에서 응답을 Data로 전달받을 때 사용(JSON, XML, HTML등 단순한 데이터 전송에 주로 사용)
func startLoad() {
let url = URL(string: "https://www.example.com/")!
let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
self.handleClientError(error)
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
self.handleServerError(response)
return
}
if let mimeType = httpResponse.mimeType, mimeType == "text/html",
let data = data,
let string = String(data: data, encoding: .utf8) {
DispatchQueue.main.async {
self.webView.loadHTMLString(string, baseURL: url)
}
}
}
task.resume()
}
2. DownloadTask
- 파일을 다운로드 받아서 디스크에 쓸 때 사용
- 요청한 data를 바로 FileSystem에 저장한다.
- 용량이 큰 파일의 경우는 백그라운드에서 다운받기 위해 DownloadTask사용
3. UploadTask
- 파일을 업로드할 때 사용
URLSessionConfiguration
- URL session에 대한 행동과 정책을 정의하는 구성 객체
- 캐시 및 쿠키를 사용하는 방법 설정
- 셀룰러 네트워크에서 연결을 허용할지 등의 동작을 제어
- shared를 사용하여 세션에 접근 가능
Session Configuration 객체 생성
- default: Default 세션은 (커스터마이징을 하지 않는다면) shared과 비슷하지만 Delegate를 통해 데이터를 얻어올 수 있다.
- ephemeral: shared session과 비슷하지만 쿠키, 자격증명을 디스크에 기록하지 않는다.
- background: 앱이 실행중이지 않을 때도 백그라운드에서 컨텐츠를 업로드하거나 다운로드할 수 있게 한다.
URLSessionDelegate
- 네트워크 요청중 sessionDelegate를 통해 네트워크를 감시할 수 있다.
- URLSessionDownloadDelegate를 통해 다운로드가 끝났을때 delegate 구현가능
extension SearchViewController: URLSessionDownloadDelegate {
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask,
didFinishDownloadingTo location: URL) {
print("Finished downloading to \(location).")
}
}
참고 : https://developer.apple.com/documentation/foundation/url_loading_system
https://developer.apple.com/documentation/foundation/urlsession
'swift' 카테고리의 다른 글
ImageCache (0) | 2022.01.18 |
---|---|
struct, class, enum (0) | 2021.12.14 |
Method Swizzling (0) | 2021.12.10 |
Layout Update Method (0) | 2021.12.09 |
KVC, KVO (0) | 2021.12.08 |