[iOS] URLSession

김상우·2021년 11월 4일
0
post-custom-banner

reference : 패스트 캠퍼스

iOS URL Session

  • iOS 앱에서 서버와 통신하기 위해 애플이 제공하는 API.
  • iOS 앱 통신에서 유명한 라이브러리인 Alamofire, SDWebImage 등의 기반이 되는 API.
  • HTTP를 포함한 몇 가지 프로토콜을 지원함.
  • request / response 의 구조를 가짐.

HTTP란

Hyper Text Transfer Protocol 하이퍼 텍스트를 전송하기 위한 프로토콜. 프로토콜이란 통신에서의 엄격한 규약. html 문서를 주고 받는데 쓰이는 프로토콜.


Packet

http 통신은 요청을 보내고 응답을 받을 때 그 정보를 패킷에 넣어 보낸다.
패킷은 헤더와 바디로 이루어져 있다.
헤더에는 보내는 사람의 주소, 받는 사람의 주소 등이 담겨있다.
바디에는 전하고자 하는 실제 내용이 들어있다.


HTTP Method


HTTP status


URLSession 종류

  • URLSession : 특정한 URL 을 이용하여 데이터를 다운로드, 업로드 하기 위한 API. 앱에서 서버와 통신하기 위한 API

  • URLSession 종류

  1. 공유 세션 (Shared Session)
    URLSession.shared()
    Singleton으로 사용할 수 있고, 기본 요청을 하기 위한 세션.
    직접 만든 세션만큼 맞춤 설정을 할 수는 없지만, 쉽게 만들어 사용할 수 있다.
  1. 기본 세션 (Default Session)
    URLSession(configuration: .default)
    공유 세션과 유사하게 작동하지만 직접 원하는 설정을 할 수 있고, 캐쉬와 쿠키 인증등을 디스크에 저장한다.
    순차적으로 데이터를 처리하기 위해 delegate를 지정할 수 있다.
  1. 임시 세션 (Ephemeral Session)
    URLSession(configuration: .ephemeral)
    공유 세션과 유사하게 작동하지만 캐쉬, 쿠키, 사용자 인증정보를 디스크에 저장하지 않는다. 메모리에 올려서 세션에서 연결하고, 세션 만료시 데이터가 사라진다.
  1. 백그라운드 세션 (Background Session)
    URLSession(configuration: .background)
    백그라운드 세션을 사용하면 앱이 실행되지 않는 동안 백그라운드에서 컨텐츠 업로드 및 다운로드를 수행할 수 있다.

URLSession Task

URL Session이 구성되었으면, URLSession Task를 이용해서 각 세션 내의 작업을 추가할 수 있다.

  • URLTask 종류
  1. URLSessionDataTask
    데이터 객체를 사용하여 데이터를 요청하고 응답받는다.
    주로 짧고 빈번하게 요청하는 경우에 사용한다.
  1. URLSessionUploadTask
    데이터 객체 또는 파일 형태의 데이터를 업로드 하는 작업을 수행.
    앱이 실행되지 않을 때 백그라운드 업로드를 지원한다.
  1. URLSessionDownloadTask
    데이터를 다운로드 받아서 파일형태로 저장하는 작업을 수행.
    앱이 실행되지 않을 때 백그라운드 다운로드를 지원한다.
  1. URLSessionStreamTask
    TCP / IP 와의 연결을 생성할때 사용되는 태스크.
  1. URLSessionWebSocketTask
    웹 소켓 프로토콜을 통해 통신하는 태스크.

URLSession LifeCycle


Completion Handler

  • Completion Handler = URLSessionTask 완료시 호출되는 클로저
  • data, response, error 를 매개변수로 갖는다.
  • 예시 swift 코드
// url 주소 변수 선언
guard let url = URL(string: "https://abcdef") else {
  print("url error")
  return }

// URLSession 생성
let session = URLSession(configuration: .default)

// URLSessionTask , Completion Handler 
session.dataTask(with: url) { [weak self]
  data, response, error in
  guard let data = data, error == nil else {
  print("session error")
  return }

  • data : 서버에서 응답받은 json 데이터
  • response : http 헤더 및 상태 코드 메타 데이터. http status가 200번대 라면 응답 성공, 아니라면 데이터를 제대로 가져오지 못한 에러.
  • error : 요청 실패 에러 객체. 성공하면 nil.
profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.
post-custom-banner

0개의 댓글