URLSession
URLSession?
애플에서는 URLSession을 아래와 같이 설명한다.

관련된 네트워크 데이터 전송 작업 그룹을 조정하는 개체입니다.
URLSession은 iOS에서 제공하는 HTTP를 이용한 네트워킹을 통해 데이터를 주고 받을 수 있게 도와주는 API를 제공하는 클래스이다.
URLSession은 Thread-Safty하기 때문에 어떤 스레드에서든 자유롭게 Session과 Task를 생성할 수 있다.
URLSession은 URLSessionConfiguration을 통해 생성할 수 있다.
이렇게 생성된 URLSession을 통해 한 개 이상의 URLSessionTask를 생성할 수 있으며, 이 URLSessionTask를 통해 실제로 서버와 통신을 할 수 있다.
URLSessionConfiguration
URLSessionConfiguration은 아래 세가지 타입을 가진다.
- Default: 기본적인 네트워킹 정책을 사용
- Ephemeral: 쿠키와 캐시를 저장하지 않을 때 사용
- Background: 앱이 background에 있을 때 컨텐츠를 다운로드 혹은 업로드할 때 사용
URLSessionTask
URLSessionTask 또한 작업에 따라 세가지로 분류할 수 있다.
- URLSessionDataTask: 데이터를 받는 작업 수행 시 사용합니다. background 세션에 대한 지원을 하지 않습니다.
- URLSessionUploadTask: 데이터 업로드 시 사용합니다.
- URLSessionDownloadTask: 데이터 다운로드 시 사용합니다.
URLSession 실습
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
var urlComponents = URLComponents(string: "https://itunes.apple.com/search?media=music&entity=song&term=BTS")!
let requestURL = urlComponents.url!
let dataTask = session.dataTask(with: requestURL) { (data, response, error) in
guard error == nil else {
return
}
guard let statusCode = (response as? HTTPURLResponse)?.statusCode else {
return
}
let successRange = 200..<300
guard successRange.contains(statusCode) else {
return
}
guard let resultData = data else { return }
do {
let decoder = JSONDecoder()
let response = try decoder.decode(Response.self, from: resultData)
let tracks = response.tracks
print("--> tracks: \(tracks)")
} catch let error {
print("---> error: \(error.localizedDescription)")
}
}
dataTask.resume()
URLSession을 이용한 네트워킹을 좀 더 간편하게 하기위해 Alamofire나 Moya와 같은 유명한 라이브러리들이 있는데, 후에 프로젝트에서 통신 기능을 개발하며 사용해봐야겠다.
참고자료