티스토리 뷰
iOS에서 서버와 통신할때 주로 Alamofire를 많이 씁니다. 얼마전 저의 블로그 첫글을 찾아봤는데, Alamofire와 관련된 내용이더라구요..! 😱
이렇게 Alamofire는 iOS 시작할때 많은 사람들이 기본적으로 쓰는 네트웤 라이브러리라고 할 수 있는 것 같아요
하지만 Alamofire 를 안쓰면 보통 URLSession.shared.dataTask을 통해 이런식으로 코드를 작성합니다.
Alamofire의 내부를 살펴보기전에, URLSession과 URLSessionDataTask에 대해서 살펴보려고 합니다 :-)
URLSession
URLSession 은 특정한 URL를 이용하여 데이터를 다운로드하고 업로드하기 위한 API를 제공합니다.
관련 Delgegate는 URLSessionDelegate 와 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까지 다 만들어서 쓰는 것을 확인할 수 있습니다.
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의 구성요소라고 할 수 있습니다.
URLSession instance를 통해 한개 또는 그 이상의 URLSessionTask instance를 만들수 있습니다.
URLSession의 creation method 중 하나를 이용하여 task를 만들면 됩니다..!!
[1] URLSessionDataTask
[2] URLSessionDownloadTask
[3] URLSessionUploadTask
'🍏 > iOS' 카테고리의 다른 글
[UILabel-HTML] UILabel에 HTML load 하기 또는 HTML 코드를 뺀 텍스트를 넣어주기 (0) | 2020.02.20 |
---|---|
[Local DB] CoreData 도움되는 링크 모음 (0) | 2020.02.05 |
[Cocoapod] Unit Test를 돌렸는데, "One of the two will be used. Which one is undefined" 에러가 난다면 (1) | 2020.01.18 |
[Cocoapod] Cocoapod 명령어 모음 (0) | 2020.01.07 |
[SPM] 처음부터 Swift Package Manager를 만들어보자 (2) | 2019.12.23 |
- Total
- Today
- Yesterday
- github actions
- 장고 URL querystring
- Flutter getter setter
- flutter dynamic link
- flutter deep link
- cocoapod
- flutter build mode
- Watch App for iOS App vs Watch App
- Flutter Clipboard
- 구글 Geocoding API
- Django Heroku Scheduler
- Flutter Text Gradient
- drf custom error
- 장고 Custom Management Command
- 플러터 얼럿
- ribs
- Dart Factory
- flutter 앱 출시
- 플러터 싱글톤
- Flutter 로딩
- METAL
- DRF APIException
- Sketch 누끼
- Flutter Spacer
- Django Firebase Cloud Messaging
- ipad multitasking
- PencilKit
- Django FCM
- Python Type Hint
- SerializerMethodField
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |