티스토리 뷰

🍏/iOS

[URLSession] URLSession과 URLSessionDataTask

사용자 eungding 2020. 2. 3. 11:36
728x90
반응형

iOS에서 서버와 통신할때 주로 Alamofire를 많이 씁니다. 얼마전 저의 블로그 첫글을 찾아봤는데, Alamofire와 관련된 내용이더라구요..! 😱

이렇게 Alamofire는 iOS 시작할때 많은 사람들이 기본적으로 쓰는 네트웤 라이브러리라고 할 수 있는 것 같아요

 

하지만 Alamofire 를 안쓰면 보통 URLSession.shared.dataTask을 통해 이런식으로 코드를 작성합니다. 

 

출처: Alamofire를 안쓰고 진행해본 저의 갠프

 

 

Alamofire의 내부를 살펴보기전에, URLSession과 URLSessionDataTask에 대해서 살펴보려고 합니다 :-) 

 

 

URLSession

 

URLSession  은 특정한 URL를 이용하여 데이터를 다운로드하고 업로드하기 위한 API를 제공합니다

관련 DelgegateURLSessionDelegate 와 URLSessionTaskDelegate 가 있습니다.

이 Delegate들을 활용하여 인증을 지원하거나 redirection, task끝남 같은 이벤트를 받을 수 있다고 합니다. 

 

session을 configure하기 위해서 URLSessionConfiguration 를 사용합니다. configuration을 통해 cache와 cookie를 어떻게 사용할지, 통신망에 connection을 허용할지 등을 설정할 수 있다고 합니다. 

 

URLSession의 이니셜라이저에도 configuration이 꼭 들어가있는 것을 볼 수 있습니다. 

 



하지만 우리는 보통 URLSession을 만들어쓰기보다는, shared를 주로 사용합니다. 

 

 

URLSession은 shared라는 변수를 통해 싱글톤 객체를 제공합니다. 그래서 우리는 편하게 URLSession의 함수들을 사용할 수 있었죠!

shared를 쓰면 편하지만 제한이 있습니다. 

shared session은 delegate도 없고, 커스터마이징된 configuration도 없기때문에 당연히 제한이 있습니다. 

 

 

 

그래서 Alamofire는 shared를 쓰지 않습니다.

Alamofire source code를 살펴보면 이렇게  configuration, delegate, delegateQueue까지 다 만들어서 쓰는 것을 확인할 수 있습니다. 

 

Alamofire 소스코드중, Session 클래스 이니셜라이저 안에 있던 코드

 

 

URLSessionTask 

 

URLSessionTask는 '특정 리소스 다운로드' 같이 URL session에서 수행되는 task를 의미합니다.  

URLSessionTask의 자식 클래스로는

 

[1] URLSessionDataTask

 

 

URLSessionDataTask는 다운로드한 데이터를 NSData 타입의 object로 넘겨주는 task를 의미합니다. 

 

 

[2] URLSessionDownloadTask 

 

URLSessionDownloadTask 는 서버에서 응답으로 준 데이터를 파일에 저장해주는 task를 의미합니다. 

 

 

[3] URLSessionUploadTask 

 

URLSessionUploadTask는 URLSessionDataTask를 상속하고 있습니다.

URLSessionUploadTask는 데이터를 request body에 넣어서 서버에 업로드하는 task를 의미합니다. 

 

 

 

 

 

Task들은 session의 구성요소라고 할 수 있습니다. 

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

 

 

 

URLSession instance를 통해 한개 또는 그 이상의 URLSessionTask instance를 만들수 있습니다.

URLSession의 creation method 중 하나를 이용하여 task를 만들면 됩니다..!! 

 

 

[1] URLSessionDataTask

 

 

[2] URLSessionDownloadTask

 

 

[3] URLSessionUploadTask

 

728x90
반응형
댓글
댓글쓰기 폼