iOS) URLSession 에 대해 알아보자
1. URLSession
- 특정한 url 을 이용하여 데이터를 다운로드 하고 업로드 하기 위한 API
- 한마디로 앱에서 서버와 통신하기 위해 제공하는 api 라고 생각하면 된다.
- URLSession 은 URLSessionConfiguration 을 통해 생성할 수 있다. 이렇게 생성된 URLSession 을 통해 한개 이상의 URLSessionTask 를 생성할 수 있다.
2. URLSession 의 종류
1) 공유 세션 (Shared Session)
- URLSession.shared() : 싱글톤으로 사용할 수 있고 기본 요청을 하기 위한 세션
2) 기본 세션 (Default Session)
- URLSession(configuration : .default) : 공유 세션과 유사하게 작동하지만, 직접 원하는 설정을 할 수 있고, 캐시와 쿠기 인증등을 disk 에 저장한다. 또 순차적으로 데이터를 처리하기 위해 delegate 를 지정할 수 있다.
3) 임시 세션 (Ephemeral Session)
- URLSession(configuration : .ephemeral) : 공유 세션과 비슷하지만 캐시, 쿠기, 사용자 인증 정보를 disk 에 저장하지 않는다. 메모리에 올려서 세션에서 연결하고 세션 만료시 데이터가 사라진다.
4) 백그라운드 세션 (Background Session)
- URLSession(configuration : .background) : 앱이 실행되지 않는 동안 백그라운드에서 컨텐츠 업로드 및 다운로드를 실행할 수 있다.
3. Task 의 종류
1) URLSessionDataTask : 데이터 객체를 사용하여 데이터를 요청하고 응답하는데 주로 짧고 빈번하게 요청하는데 사용된다.
2) URLSessionUploadTask : 데이터 객체 또는 파일 형태의 데이터를 업로드 하는 작업을 수행한다. 앱이 실행되지 않았을때 백그라운드 업로드를 지원한다.
3) URLSessionDownloadTask : 데이터를 다운로드 받아서 파일의 형태로 저장하는 작업을 수행한다. 앱이 실행중이지 않을때는 백그라운드 다운로드를 지원한다.
4) URLSessionStreamTask : TCP IP 연결을 생성할때 사용되는 task
5) URLSessionWebSocketTask : 웹 소켓 프로토콜 표준을 통해 통신하는 task
4. URLSession Life Cycle
1) Session Configuration 을 결정하고, Session 을 생성
2) 통신할 URL 과 Request 객체를 설정
3) 사용할 Task 를 결정하고 그에 맞는 Completion Handler 나 Delegate 메소드들을 작성
4) 해당 Task 를 실행
5) Task 완료 후 Completion Handler 클로저가 호출이 됨