Reference
- 내용전반: Apple문서
Remind
- 한번 URLSession에 설정된 configuration은 수정할 수 없다
(필요하다면, configuration을 수정하고 새로운 URLSession을 만들어 설정해야 함)- configuration뿐 아니라 NSURLRequest에도 정책을 설정할 수 있는데, 최종적으로 더 강한 정책이 적용된다
- shared session은 delegate를 쓸 수 없다
URLSessionConfiguration의 용도/목적
URLSessionConfiguration
객체는 URLSession 객체를 사용하여 데이터를 업로드/다운로드할 때 사용할 행동/정책을 정의합니다. 데이터를 업드로/다운로드할 때면, 항상 configuration 객체를 만드는 것이 우선시되어야 합니다. configuration 객체를 사용하여 타임아웃 값, 캐시 정책, 연결 요구사항 등과 같이 URLSession과 함께 사용하려는 정보들을 설정하게 됩니다
**
URLSessionConfiguration은 URLSession을 초기화할 때 필요하므로 미리 만들어놔야 합니다. session 객체들은 configuration의 복사본을 만들어서 자신을 설정하는데 사용합니다. 참고로, session에 한번 설정된 configuration은 바꿀 수 없습니다 (변경을 시도해도 무시됨). 만약 수정이 필요하다면, 수정된 configuration을 설정할 새로운 URLSession을 만들어야 합니다
✅ NOTE
어떤 경우, configuration에 의해 설정된 정책들이NSURLRequest
객체에 의해 override될 수도 있습니다. 결론적으로 둘 중 더 엄격한 정책이 적용됩니다. session보다 request의 정책이 더 엄격하다면 request의 정책이 적용됩니다. 예로, configuration이 셀룰러 네트워킹을 금지시켰다면, NSURLRequest 객체도 셀룰러 네트워킹을 요청할 수 없습니다
URLSession의 행동과 능력은 대부분 configuration에 의해 결정됩니다
shared
: delegate를 지정할 수 없는 간단한 비동기 요청. custom이 제한적입니다
Default
: 기본 설정 session. custom 가능
Ephemeral
: delegate를 지정할 수 없음. private session으로 disk에 파일을 저장하지 않음. 사파리/크롬의 시크릿모드 만들 때 활용되고 쿠키같은 세션 정보가 남지 않음
Background
: App을 사용하지 않더라도 (suspend/not running)일 때도, 운영체제 level에서 (background로) 업로드/다운로드를 수행하기 위한 session. 지하철이나 지도 App에서 업데이트된 데이터를 받고 싶은 경우, background session을 만들어놓으면 App이 살아있지 않을 때도 업로드/다운로드가 가능해진다