[Sesac IOS] 41일차 TIL
TIL

[Sesac IOS] 41일차 TIL

41일차 수업을 정리한 글입니다.


Learned

URLSession

1. 개요

  • 네트워크 통신을 위한 API를 제공해주는 클래스로, 설정한 URL로
    데이터를 주고 받을 수 있고 타임 아웃, 캐시 정책 등의 설정 기능을 포함함.
  • 기본적으로 제공되는 Shared 객체를 사용하거나 URLSessionConfiguration 객체를 가지고
    새로운 URLSession 객체를 생성할 수 있음.
  • URLSessionConfiguration은 URLSession의 세부적인 동작과 정책들을 결정하는 객체로서,
    타임아웃, 캐싱 정책, 백그라운드 전송 등을 설정할 때 사용함.
URLSessionConfiguration으로 설정할 수 있는 것들
셀룰러 연결 여부, 타임 아웃 간격, 리소스 요청 최대 시간, 캐시 활성화 여부, 캐시 만료 기간 등

2. 종류

  • Shared Session
    • 싱글턴 객체이며 기초적인(Basic) 네트워크 통신을 할 때 주로 사용됨.
    • 간단하게 사용할 수 있다는 장점이 있지만 Delegate를 사용할 수 없고
      설정(URLSessionConfiguration)을 커스텀할 수 없다는 한계가 있음.
  • Default Session
    • URLSessionConfiguration.default 프로퍼티로 초기화되는 URLSession 객체
    • Shared Session의 설정과 유사하지만 설정을 커스텀할 수 있음.
    • Delegate를 통해 네트워크 응답에 대한 세부적인 제어가 가능함.
  • Ephemeral Session
    • URLSessionConfiguration.ephemeral 프로퍼티로 초기화되는 URLSession 객체
    • Shared Session의 설정과 비슷하지만 디스크에 캐시, 쿠키, 인증 정보를 저장하지 않음.
      (대신 RAM에 저장됨)
    • 그렇기 때문에 웹 브라우저에서 프라이빗(시크릿) 모드에 주로 사용됨.
  • Background Session
    • URLSessionConfiguration.background 프로퍼티로 초기화되는 URLSession 객체
    • 앱의 백그라운드에서 데이터를 업로드 및 다운로드 할 때 사용함.

URLSession과 URLSessionConfiguration

URLSessionTask

1. 개요

  • 다운로드, 업로드같은 URLSession 내부에서 수행되는 하나의 작업을 나타냄.
  • 작업의 목적에 따라 4가지의 타입이 존재하며 URLSession의 인스턴스 메서드로 작업을 생성할 수 있음.
  • 작업 생성 후 resume() 메서드를 호출해서 네트워크 통신을 시작할 수 있음.

2. 종류

  • DataTask : 리소스를 요청하고 서버의 응답을 반환. 백그라운드 세션에서 수행되지 못함.
  • UploadTask: 서버 응답을 받기 전에 데이터를 업로드. 백그라운드 세션에서도 수행됨.
  • downloadTask: 리소스를 디스크에 다운로드. 모든 세션에서 수행됨.
  • streamTask: 서버 호스트와 포트 번호로 TCP/IP 연결을 생성

URLRequest과 URLResponse

1. URLRequest

  • 프로토콜, URL 스키마와 독립적으로 네트워크 요청에 대한 정보를 나타내며,
    URL, 캐시 정책, HTTP 메서드 및 헤더 등의 정보를 담고 있음.
  • URLRequest는 오직 네트워크 요청 정보만 담고 있기 때문에
    서버에 요청을 보내기 위해서는 URLSession 객체가 필요함.

2. URLResponse

  • 프로토콜, URL 스키마와 독립적으로 네트워크 요청에 대한 응답 정보를 나타내며
    mimetype, url 등의 정보를 담고 있음.
  • 우리가 흔히 HTTP 요청으로 받는 응답 객체는 HTTPURLResponse 타입의 인스턴스이고
    이 클래스는 URLResponse의 서브 클래스임.

서버의 응답을 처리하는 방법

1. Completion Handler

  • URLSessionTask 인스턴스 생성 시 completion handler를 인자로 넘겨줄 수 있고
    이는 Task가 종료됐을 때 한 번만 호출됨.
  • completion Handler는 파라미터로 Data, URLResponse, Error 객체를 가짐.
    (각각 순서대로 서버로부터 전달받은 데이터, 응답에 대한 메타 데이터, 에러 정보)

2. URLSessionDelegate

  • URLSession의 다양한 작업 이벤트를 다루기 위한 메서드를 정의해놓은 프로토콜
  • URLSessionTaskDelegate, URLSessionDataDelegate 등 하위 프로토콜이 존재함.
  • 작업의 시작과 종료, 다운로드 작업 시 진행 상황 업데이트같은 다양한 상황의
    이벤트를 세부적으로 처리하고자 할 때 사용함.

이상입니다.

'TIL' 카테고리의 다른 글

[Sesac IOS] 43~44일차 TIL  (0) 2022.09.05
[Sesac IOS] 42일차 TIL  (0) 2022.08.31
[Sesac IOS] 40일차 TIL  (0) 2022.08.31
[Sesac IOS] 39일차 TIL  (0) 2022.08.29
[Sesac IOS] 38일차 TIL  (0) 2022.08.25