[iOS CS Study] URLSession

Oxong·2021년 9월 1일
0

21.08.26

공부한 것을 정리하는 용도의 글이므로 100% 정확하지 않을 수 있습니다.
참고용으로만 봐주시고, 내용이 부족하다고 느끼신다면 다른 글도 보시는 것이 좋습니다.
+ 틀린 부분, 수정해야 할 부분은 언제든지 피드백 주세요. 😊

                                                 by. ryalya





URLSession


URLSession은 기술적으로 HTTP / HTTPS 기반 요청을 처리하기 위한 API를 제공하는 클래스 및 클레스의 세트를 말한다.


앱과 서버는 데이터를 주고받기 위해 HTTP 프로토콜을 이용한다.

iOS에서 서버와 HTTP/HTTPS를 통해 통신(데이터를 주고받기)하기 위해 애플은 URLSession이라는 API를 제공한다.

URLSession은 iOS앱 통신에서 유명한 라이브러리인 Alamofire, SDWebImage 등의 기반이 되는 API이다.

URLSessionHTTP를 포함한 몇 가지 프로토콜을 지원하고, 인증, 쿠키 관리, 캐시 관리 등을 지원한다.

기본적으로 request, response 구조를 가지고 있다.


URLSession LifeCycle(사용 순서)


URLSessionConfiguration 결정
     ↓
Session 생성
     ↓
통신할 URL과 Request객체 설정
     ↓
사용할 Task를 결정하고, 그에 맞는 Completion Handler나 Delegate 메소드 작성
     ↓
Task를 실행
     ↓
Task 완료 후, Completion Handler가 실행됨.


1. URLSessionConfiguration

  • URLSession을 생성하기 위해 필요한 요소

  • Configuration을 생성할 때는 URLSession 정책에 따라서 default, ephemeral, background 3가지 형태로 생성된다.

Default Session

: 기본적인 통신 Session으로 디스크 기반 캐싱 지원

Ephemeral Session

: 쿠키나 캐시를 저장하지 않는 정책을 가져갈 때 사용.
디스크에 어떤 데이터도 저장하지 않고, 메모리에 올려 세션과 연결한다.
따라서 앱 세션이 만료되면 세션 관련 데이터가 사라진다.

Background Session

: 앱이 종료된 이후에도 통신이 이뤄지는 것을 지원하는 세션.
(앱이 백그라운드에 있는 상황에도 컨텐츠 다운로드, 업로드 할 때)


Apple Developer 공식 문서 참고


2. Request

URLRequest를 통해서는 서버로 요청을 보낼 때 어떻게 데이터를 캐싱할 것인지, 어떤 HTTP 메소드를 사용할 것인지(Get, Post 등), 어떤 내용을 전송할 것인지 등을 설정할 수 있다.


3. Task

Task 객체는 일반적으로 Session 객체가 서버로 요청을 보낸 후, 응답을 받을 때 URL 기반의 내용들을 받는(retrieve) 역할을 합니다. 3가지 종류의 Task가 지원됩니다.

Data Task

  • Data 객체를 통해 데이터 주고받는 Task.
  • Data를 받는 작업, Response 데이터를 메모리 상에서 처리한다.
  • 백그라운드 세션에 대한 지원은 되지 않는다.
  • URL 요청을 실시하고 완료 시 핸들러를 호출하는 Task 형식
  • Task가 실행된 후 핸들러가 실행되기 때문에 탈출 Closure 형태로 받아와야 한다.
  • 서버에서 메모리로 데이터를 검색하는 HTTP GET요청에 이 task를 사용한다.

Download Task

  • data를 파일의 형태로 전환 후 다운 받는 Task.
  • 앱의 상태가 대기 중이거나 실행 중이 아니라면 백그라운드 상태에서도 다운로드가 가능하다.

Upload Task

  • data를 파일의 형태로 전환 후 업로드하는 Task.
    ( HTTP POST, PUT 매소드를 통해서 디스크에서 웹서버로 파일을 전송할때 이 테스크를 사용)



(+ 예제 추가)



Reference

[iOS] URLSession, URLSessionDataTask 톺아보기

iOS URLSession 이해하기

0개의 댓글