반응형
URLSession과 관련해서 기록해보겠습니다.
URLSession
- HTTP/HTTPS를 통해 콘텐츠(데이터)를 주고받기 위해 API를 제공하는 클래스입니다.
- 앱이 실행중이지 않거나 일시 중단된 동안 백그라운드 작업을 통해 콘텐츠를 다운로드 하는 것을 수행하기도 합니다.
- 이 API는 URLSessionDelegate와 URLSessionTaskDelegate를 사용하여 인증을 지원하고 리다이렉션과 task completion과 같은 이벤트를 수신할 수 있습니다.
- 앱은 하나 이상의 URLSession 인스턴스를 생성하며 각 인스턴스는 관련 데이터 전송 작업 그룹을 조정합니다. 예를 들어, 웹 브라우저를 만드는 경우 앱은 탭 또는 창(window)당 하나의 세션을 만들 수 있습니다. 각 세션 내에서 앱은 특정 URL에 대한 요청을 나타내는 일련의 작업을 추가합니다.
- Request와 Response를 기본 구조로 가지고 있습니다. Request는 서버로 요청을 보낼 때 어떤 메서드를 사용할 것인지 캐싱 정책은 어떻게 할 것인지 등의 설정을 할 수 있습니다. Response는 URL요청의 응답을 나타내는 객체입니다.
URLSession의 유형
이 타입은 URLSession의 configuration 프로퍼티 객체에 의해 결정됩니다.
- 기본 세션 (Default Session): 기본 세션은 shared 세션과 매우 유사하게 작동합니다. 디스크에 저장하는 방식입니다.
- 임시 세션 (Ephemeral Session): 기본 세션과 유사하지만 캐시, 쿠키 또는 자격 증명을 디스크에 저장하지 않습니다. 메모리를 통해 세션과 연결합니다. 따라서 앱이 세션을 만료시키면 세션과 관련한 데이터가 사라집니다.
- 백그라운드 세션 (Background Session): 앱이 실행되지 않는 동안 (별도의 프로세스로) 백그라운드에서 콘테츠 업로드 및 다운로드를 수행할 수 있습니다.
URLSession 생성
- init(configuration:): 지정된 세션 구성으로 세션을 생성합니다.
- init(configuration: delegate: delegateQueue): 지정된 세션 구성, 델리게이트, operation queue로 세션을 생성합니다.
- shared: 싱글턴 세션 객체
URLSession 구성
- configuration: 세션에 대한 구성 객체입니다.
- delegate: 세션에 대한 델리게이트입니다.
URLSessionTask
세션 작업을 하나로 나타내는 추상 클래스입니다. 하나의 세션 내에서 URLSession 클래스는 세 가지 작업 유형(Data Tasks, Upload Tasks, Download Tasks)을 수행합니다.
- Data Tasks : NSData 객체를 사용해서 데이터를 송수신합니다.
- Upload Task : data 객체 또는 파일 형태의 데이터를 업로드하는 작업을 수행합니다. 앱이 실행중이지 않을 때 백그라운드 업로드를 지원합니다.
- Download Tasks : 데이터를 다운로드 받아서 파일의 형태로 저장하는 작업을 수행합니다. 앱이 실행중이지 않을 때 백그라운드 다운로드를 지원합니다.
JSON, XML, HTML 데이터 등 단순한 데이터의 전송에는 주로 데이터 작업을 사용하며, 용량이 큰 파일의 경우 앱이 백그라운드 상태인 경우에도 전달할 수 있도록 업로드(다운로드) 작업을 주로 사용합니다.
세션에 Data task 추가하기
- dataTask(with:) - URL에 데이터를 요청하는 작업을 객체를 생성합니다.
- dataTask(with:completionHandler:) - URL에 데이터를 요청하고 요청에 대한 응답을 처리할 완료 핸들러를 호출하는 작업을 생성합니다.
- dataTask(with:) - URLRequest 객체를 기반으로 URL에 데이터를 요청하는 작업 객체를 생성합니다.
- dataTask(with:completionHandler:) - URLRequest 객체를 기반으로 URL에 데이터를 요청하고 요청에 대한 응답을 처리할 완료 핸들러를 호출하는 작업을 생성합니다.
세션에 Download Task 추가하기
- downloadTask(with:) - URL에 요청한 데이터를 다운로드 받아서 파일에 저장하는 작업을 생성합니다.
- downloadTask(with:completionHandler:) - URL에 요청한 데이터를 다운로드 받아서 파일에 저장하는 다운로드 작업을 생성하고 저장 완료 후 완료 핸들러를 호출하는 작업을 생성합니다.
- downloadTask(with:) - URLRequest 객체를 기반으로 URL에 요청한 데이터를 다운로드 받아서 파일로 저장하는 작업 객체를 생성합니다.
- downloadTask(with:completionHandler:) - URLRequest 객체를 기반으로 URL에 요청한 데이터를 다운로드 받아서 파일에 저장하는 다운로드 작업을 생성하고 저장 완료 후 완료 핸들러를 호출하는 작업을 생성합니다.
세션에 Upload Task 추가하기
- uploadTask(with:from:) - URLRequest 객체를 기반으로 URL에 데이터를 업로드하는 작업을 생성합니다.
- uploadTask(with:from:completionHandler:) - URLRequest 객체를 기반으로 URL에 데이터를 업로드하고 업로드 완료 후 완료 핸들러를 호출하는 작업을 생성합니다.
- uploadTask(with:fromFile:) : URLRequest 객체를 기반으로 URL에 파일을 업로드하는 업로드 작업을 생성합니다.
- uploadTask(with:fromFile:completionHandler:) : URLRequest 객체를 기반으로 URL에 파일을 업로드하고 업로드 완료 후 완료 핸들러를 호출하는 작업을 만듭니다.
Task 상태 제어
- cancel() - 작업을 취소합니다.
- resume() - 일시 중단된 경우 작업을 다시 시작합니다.
- suspended() - 일시적으로 작업을 중단합니다.
- state : 현재 작업의 상태를 나타냅니다.
- property - 작업 처리 우선순위를 나타냅니다. 0.0(제일 낮음)부터 1.0(제일 높음)입니다.
Using a Session Delegate
- 인증 실패했을 때
- 데이터가 서버로부터 도착했을 때
- 데이터를 캐싱할 때
세션 객체는 앱이 세션을 종료하거나 명시적으로 세션을 무효화 할 때까지 델리게이트에 대한 강한 참조를 유지한다. 세션을 무효화하지 않으면 앱이 종료될때까지 메모리 릭이 발생된다.
Asynchronicity and URL Sessions
URLSession도 다른 네트워킹 API처럼 비동기성이 강하다. 다음 두 가지 방법으로 앱에 데이터를 반환한다.
- 데이터 전송이 성공적으로 완료되거나 에러가 발생한 경우 완료 핸들러를 호출한다.
- 데이터 전송이 완료된 경우 세션의 델리게이트 메서드를 호출한다.
참고:
developer.apple.com/documentation/foundation/urlsession
developer.apple.com/documentation/foundation/urlsessiontask
www.boostcourse.org/mo326/lecture/16863/
반응형
'iOS' 카테고리의 다른 글
[iOS] Apple 로그인 구현 (2) | 2021.02.01 |
---|---|
[iOS] NSOperationQueue와 GCD Queue의 차이점 (0) | 2021.01.29 |
[iOS] AppDelegate & SceneDelegate (0) | 2021.01.19 |
[iOS] App의 Life Cycle (0) | 2021.01.16 |
[iOS] 시뮬레이터에서 할 수 없는 것들 (0) | 2021.01.12 |
댓글