본문 바로가기

학습 노트/iOS (2021)

210. SessionConfiguration

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

 

Apple Developer Documentation

 

developer.apple.com

더 많은 설정 값들은 위의 링크의 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