swift

URLSession

motosw3600 2021. 12. 10. 08:52

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