SessionConfiguration
URLSession을 직접 생성하는 경우 SessionConfiguration을 파라미터로 전달해 줘야 할 필요가 있다.
SessionConfiguration은 네트워크 연결에 관련된 속성을 설정하며,
때문에 URLSession을 생성하기 전에 구성을 완료해 전달해야 한다.
이후에는 수정할 수 없다.
- SharedSessionConfiguration
SharedSession을 구성할 때 사용한다.
모든 설정값이 기본값을 가진다.
직접 사용하는 경우는 없다. - DefaultSessionConfiguration
모든 설정값이 기본값을 가진다.
SessionDelegate를 사용한 Event 처리가 가능하다.
DiskCache를 사용한다. (인증정보 = KeyChain, Cookie = Cookie 저장소) - EphemeralSessionConfiguration
DefaultSessionConfiguration과 유사하지만 DiskCache를 사용하지 않아 휘발성을 띤다. - BackgroundSessionConfiguration
Download/Upload Task에 사용한다.
앱 실행 상태에 관계없이 데이터를 전송 가능하다.
SessionConfiguration 설정하기
SharedSessionConfiguration
@IBAction func useSharedConfiguration(_ sender: Any) {
sendReqeust(using: URLSession.shared)
}
SharedSessionConfiguration를 직접 설정하는 경우는 없다.
Shared Session 생성 시 자동으로 생성되고, 이를 그대로 사용한다.
DefaultSessionConfiguration
@IBAction func useDefaultConfiguration(_ sender: Any) {
let conf = URLSessionConfiguration.default
let session = URLSession(configuration: conf)
sendReqeust(using: session)
}
기본 설정값을 가지는 Session을 생성하기 원한다면 DefaultSessionConfiguration을 사용한다.
Session의 생성자에 전달하면 해당 Session은 DefaultSession으로서 기능한다.
EphemralSessionConfiguration
@IBAction func useEphemeralConfiguration(_ sender: Any) {
let conf = URLSessionConfiguration.ephemeral
let session = URLSession(configuration: conf)
sendReqeust(using: session)
}
EphemralSession을 생성하기 원한다면 EphemeralSessionConfiguration을 사용한다.
마찬가지로 Session 생성자에 전달해 EphemeralSession을 만들 수 있다.
BackgroundSessionConfiguration
@IBAction func useBackgroundConfiguration(_ sender: Any) {
let conf = URLSessionConfiguration.background(withIdentifier: "DownloadTask")
let session = URLSession(configuration: conf)
sendReqeust(using: session)
}
앱의 구동 여부에 관계없이 Task를 지속하고 싶다면 BackgroundSession을 사용해야 한다.
BackgroundSessionConfiguration은 Identifier를 추가로 전달해 줘야 하며,
해당 Identifier는 작업 전환 시에 사용된다.
또한 BackgroundTask는 CompletionHandler 방식으로는 데이터를 처리할 수 없고,
Delegate 방식을 반드시 이용해야 한다는 주의점도 존재한다.
CustomSessionConfiguration
@IBAction func useCustomConfiguration(_ sender: Any) {
let conf = URLSessionConfiguration.default
conf.timeoutIntervalForRequest = 30
conf.httpAdditionalHeaders = ["ZUMO-API-VERSION": "2.0.0"]
conf.networkServiceType = .responsiveData
let session = URLSession(configuration: conf)
sendReqeust(using: session)
}
각 SessionConfiguration의 기본 값이 아닌 별도의 설정을 원한다면,
별도의 SessionConfiguration를 사용하는 것이 가능하다.
단 이 경우 새롭게 전부 정의하는 것이 아닌 기본으로 제공하는 Configuration을 수정하는 방식으로 이용한다.
- timeoutIntervalForRequest
해당 속성은 request의 시간제한을 추가한다.
기본 값은 60이다. - httpAdditionalHeaders
해당 속성은 request에 고통 header를 추가하는 경우에 사용한다.
Key-Value 쌍으로 지정하며, 해당 Configuration을 사용하는 URLSession으로 생성하는 모든 Task에 자동으로 적용된다.
Task가 이미 같은 header를 가지고 있다면 Configuration의 값은 무시된다. - networkServiceType
URLSession이 처리하는 작업의 종류를 지정한다.
해당 값을 기준으로 iOS가 처리 방식을 최적화한다.
NSURLSessionConfiguration
더 많은 설정 값들은 위의 링크의 properties 부분에서 확인할 수 있다.
'학습 노트 > iOS (2021)' 카테고리의 다른 글
212. Upload Task (0) | 2022.08.26 |
---|---|
211. Post Request (0) | 2022.08.25 |
209. URL Session Delegate (0) | 2022.08.23 |
208. Data Task (0) | 2022.08.22 |
207. URL Loading System (0) | 2022.08.20 |