티스토리 뷰

반응형

공식 문서

Apple Developer Document - URLSession

URLSession

네트워크 데이터 전송 작업과 관련된 그룹을 조정하는 객체이다.

Declaration

class URLSession: NSObject

Overview

URLSession 클래스 및 관련 클래스는 URL로 표시된 엔드 포인트에서 데이터를 다운로드하고 데이터를 업로드하기 위한 API를 제공한다. 또한 앱은 이 API를 사용하여 앱이 실행되고 있지 않거나 iOS에서 앱이 정지된 상태에서 백그라운드 다운로드를 수행할 수 있다.

URLSessionDelegate, URLSessionTaskDelegate를 사용하여 인증을 지원하고 리다이렉션, 작업 완료와 같은 이벤트를 수신할 수 있다.

 

앱은 각자 데이터 전송 작업과 관련된 그룹을 조정하는 하나 이상의 URLSession 인스턴스를 생성한다. 예를 들어 웹 브라우저를 만드는 경우 앱은 탭 또는 윈도우당 하나의 세션을 만들거나 대화형 사용을 위한 세션과 백그라운드 다운로드를 위한 세션을 만들 수 있다. 각 세션 내에서 앱은 특정 URL에 대한 요청을 나타내는 작업을 추가한다.

Types of URL Sessions

주어진 URL 세션 내의 작업은 단일 호스트에 대한 최대의 동시 연결 수, 셀룰러 네트워크를 사용할 수 있는지에 대한 여부와 같은 네트워크를 정의하는 공통 세션 구성 객체를 공유한다.

 

URLSession에는 기본 요청에 대한 단일 공유 세션이 있다. 직접 만든 세션만큼 맞춤 설정을 할 수는 없지만 요구 사항이 매우 제한적인 경우 좋은 출발점 역할을 한다. 공유 클래스 메서드를 호출하여 이 세션에 접근한다. 다른 종류의 세션의 경우 다음 세 가지 구성 중 하나를 사용하여 URLSession을 만든다.

  • 기본 세션 (Default Session) : 기본 세션은 공유 세션과 유사하게 작동하지만 직접 만들 수 있다. 또한 데이터를 점진적으로 가져오기 위해 기본 세션에 델리게이트를 할당할 수도 있다.
  • 임시 세션 (Ephemeral Session) : 임시세션은 공유 세션과 비슷하지만 캐시, 쿠키, 사용자 인증 정보를 디스크에 쓰지 않는다.
  • 백그라운드 세션 (Background Session) : 백그라운드 세션을 사용하면 앱이 실행되지 않는 동안 백그라운드에서 콘텐츠 업로드 및 다운로드를 수행할 수 있다.

Types of URL Session Tasks

세션 내에서 선택적으로 데이터를 서버에 업로드 한 뒤 디스크의 파일 또는 메모리의 NSData 객체로 서버에서 데이터를 검색하는 작업을 생성한다. URLSession API는 네 가지 유형의 작업을 제공한다.

 

  • Data tasks : 데이터 작업은 NSData 객체를 사용하여 데이터를 보내고 받는다. 데이터 작업은 서버에 대한 짧은 대화형 요청을 위한 것이다.
  • Upload tasks : 업로드 작업은 데이터를 전송하고 앱이 실행되지 않는 동안 백그라운드 업로드를 지원한다.
  • Download tasks : 다운로드 작업은 파일 형식으로 데이터를 검색하고 앱이 실행되지 않는 동안 백그라운드 다운로드 및 업로드를 지원한다.
  • WebSocket : 웹소켓 작업은 RFC 6455에 정의된 WebSocket 프로토콜을 사용하여 TCP, TLS를 통해 메시지를 교환한다.

Using a Session Delegate

세션의 작업은 델리게이트 객체를 공유한다. 다음과 같은 경우를 포함하여 다양한 이벤트가 발생할 때 정보를 제공하고 얻기 위해 델리게이트를 구현한다.

 

  • 인증에 실패했을 때
  • 데이터가 서버에서 도착했을 때
  • 데이터를 캐싱할 수 있게 되었을 때
    델리게이트가 제공하는 기능이 필요하지 않은 경우 세션을 만들 때 nil을 전달하여 API를 제공하지 않고도 API를 사용할 수 있다.

세션 객체는 앱이 종료되거나 세션을 명시적으로 무효화 할 때까지 델리게이트에 대한 강한 참조를 유지한다. 세션을 무효화하지 않으면 앱이 종료될 때까지 앱에서 메모리가 누출된다.

Asynchronicity and URL Sessions

대부분의 네트워킹 APU와 마찬가지로 URLSession API는 비동기적이다. 호출하는 메서드에 따라 다음 두 가지 방법 중 하나로 앱에 데이터를 반환한다.

  • 전송이 성공적으로 완료되거나 오류가 있는 경우 완료 핸들러 블록을 호출한다.
  • 데이터가 도착하고 전송이 완료되면 세션의 대리자에서 메서드를 호출한다.

이 정보를 델리게이트에 전달하는 것 외에도 URLSession은 작업의 현재 상태를 기반으로 프로그래밍 방식으로 결정을 내려야 하는 경우 쿼리 할 수 있는 상태 및 진행률 프로퍼티를 제공한다.

Protocol Support

URLSession 클래스는 기본적으로 데이터, 파일 ftp, http, https URL 체계를 지원하며 사용자의 시스템 기본 설정에 구성된대로 프록시 서버 및 SOCKS 게이트웨이를 투명하게 지원한다.

 

URLSession은 HTTP/1.1, HTTP/2 프로토콜을 지원한다. HTTP/2지원에는 ALPN(Application-Layer Protocol Negotiation)을 지원하는 서버가 필요하다.

 

또한 URLProtocol을 서브 클래싱하여 자체 맞춤 네트워킹 프로토콜 및 URL 스키마에 대한 지원을 추가할 수 있다.

App Transport Security (ATS)

iOS 9.0, macOS 10.11 이상은 URLSession으로 이루어진 모든 HTTP 연결에 ATS(App Transport Security)를 제공한다. ATS는 HTTP 연결에서 HTTPS를 사용해야 한다.

Foundation Copying Behavior

세션과 작업 객체는 다음과 같이 NSCopying 프로토콜을 준수한다.

  • 앱이 세션 또는 작업 객체를 복사하면 동일한 객체를 다시 가져온다.
  • 앱이 구성 객체를 독립적으로 수정할 수 있는 새로운 사본이 생성된다.

Thread Safety

URL 세션 API는 스레드로부터 안전하다. 모든 스레드 컨텍스트에서 세션과 작업을 자유롭게 만들 수 있다. 델리게이트 메서드가 제공된 완료 처리기를 호출하면 작업이 올바른 델리게이트 큐에 자동으로 스케쥴링된다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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 29 30
글 보관함