관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] URLSessionConfiguration의 종류 (URLSession.shared의 정체, default, ephemeral, background) 본문

iOS 응용 (swift)

[iOS - swift] URLSessionConfiguration의 종류 (URLSession.shared의 정체, default, ephemeral, background)

jake-kim 2023. 7. 2. 02:01

URLSessionConfiguration 이란?

  • URLSession 인스턴스를 생성할 때 URLSessionConfiguration를 사용하여 캐시 정책, 타임아웃 지정이 가능
  • URLSessionConfiguration에서 설정하는 값들 
    • timeout 값
    • caching 정책
    • connection requirement

ex) URLSessionConfiguration 사용법

// config를 default로 설정한 경우
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)

// config를 내장된 값으로 사용한 경우
let session = URLSession.shared
    • Session Config에는 3가지가 존재
      • default: shared 세션과 유사하지만 delegate를 통해서 데이터를 점진적으로 획득이 가능
      • ephemeral: shared 세션과 유사하지만 디스크에 기록하지 않음
      • background: 앱이 실행중이지 않을때도 콘텐츠 업로드와 다운로드가 가능 (Not Running, Suspended 상태에서도 가능)

session config의 종류 3가지

URLSession.shared의 정체

  • shared (싱글톤)
    • 커스터마이징이 불가능하며 이미 정의된 값을 사용
    • 아래와 같이 shared는 URLSessionConfiguration을 따로 넣어주지 않는데 내부적으로는 URLSessionConfiguration.default를 사용
// config를 default로 설정한 경우
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)

// config를 내장된 값으로 사용한 경우
let session = URLSession.shared

URLSessionConfiguration.default 값

  • identifier (String 타입)
    • 디폴트값 - nil
    • 식별자이고, background session이면 꼭 이 값을 설정해야함 
  • requestCachePolicy (URLRequest.CachePolicy 타입)
    • 디폴트값 - .useProtocolCachePolicy
    • useProtocolCachePolicy는 요청 캐시 정책이며 프로토콜에서 정의한 캐시 동작을 따름 (서버와의 요청 및 응답에 대한 캐싱 동작을 제어) 
    • HTTP 프로토콜을 사용하면 서버의 response header에 따라 캐시 동작이 결정
    • ex) 서버가 캐시 허용 시간을 명시하는 'Cache-Control' 헤더를 포함하고 있느 경우, 해당 시간 동안 캐시된 응답 사용이 가능

https://developer.apple.com/documentation/foundation/nsurlrequest/cachepolicy/useprotocolcachepolicy#2994181

  • timeoutIntervalForRequest (TimeInterval 타입)
    • 디폴트값 - 60초
    • 요청하고 나서부터 response가 올때까지 대기시간
  • timeoutIntervalForResponse (TimeInterval 타입)
    • 디폴트값 - 7일
    • 리소스 전송 시간 및 다운로드 하는데 최대 시간
  • httpCokieStorage (HTTPCookieStorage? 타입)
    • 디폴트값 - nil
    • request 및 response에서 쿠키를 관리
  • httpCookieAcceptPolicy (HTTPCookie.AcceptPolicy 타입)
    • 디폴트값 - .onlyFromMainDocumentDomain
    • 서버로부터 수신한 쿠키를 수락할지 여부
  • httpAdditionalHeaders: ([String: [String]? 타입)
    • 디폴트값 - nil
    • 모든 요청에 추가되는 기본 HTTP 헤더 지정
  • allowsCelluarAccess (Bool 타입)
    • 디폴트값 - true
    • 셀룰러 네트워크를 통한 데이터 전송을 허용할지 여부

cf) backgroundSession에 관한 구체적인 내용은 이 포스팅 글 참고

 

* 참고

https://developer.apple.com/documentation/foundation/nsurlrequest/cachepolicy/useprotocolcachepolicy#2994181

https://developer.apple.com/documentation/foundation/nsurlrequest/cachepolicy/useprotocolcachepolicy

https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1411560-default

https://developer.apple.com/documentation/foundation/urlsessionconfiguration

Comments