티스토리 뷰

Swift

URLSession

강경 2021. 5. 20. 06:02
728x90
반응형

오늘은..!
앱에서 네트워크처리를 하기위해 필수적으로 필요한
URLSession에 대해 정리해보려고 합니다📝

✔️이전에 허접하게 정리해뒀던😅 네트워크관련 참고용 게시글

Network
URLSession API


URLSession은 뭘 할때 쓰는 건가요..?🤔

음.. 위에 적어둔거같은데...

URLSession은 swift를 이용한 ios개발을 진행할 때,
HTTP/HTTPS기반 요청을 처리하기 위한 도구 같은거에요!
더 구체적으로 말하면, HTTP/HTTPS를 통해 데이터를 주고받는 API를 제공하는 클래스라고 볼 수 있죠😲
쉬운 이해를 위해, 그림을 봅시다👀

URLSession

✅URLSessionConfiguration

URLSession자체는 HTTP요청을 보내고 받는 핵심 객체라고 볼 수 있어요.
작업을 할 때에는, URLSessionConfiguration을 통해 특정 URL에 대한 요청을 보내게 되는데요,
URLSession API를 사용하기 위해 애플리케이션은 Session을 생성하게 돼요!
해당 Session은 관련된 데이터 전송작업 그룹을 조정하는 역할을 하며,
URLSessionConfiguration이 만들어내는 Session에는 3가지 유형이 있지요..!

  1. 기본 세션 (Default Session): 디스크내에 영속된(disk-persisted) 전역캐시를 이용하며,
    자격인증서(credential)와 쿠기저장소 객체를 사용하는 기본구성객체(default configuration object)를 생성하는 세션이에요!
    말 그대로 기본값 친구죠👍🏻
  2. 임시 세션 (Ephemeral Session): 세션과 관련된 모든정보가 메모리안에 저장되는 것을 제외하고는, default와 비슷해요!
    메모리에 저장되니까, 비공개(private) 세션으로 생각하면 편해요😃
  3. 백그라운드 세션 (Background Session): 세션이 백그라운드에서 작업을 수행하기 때문에,
    앱이 중지되거나 시스템으로부터 종료되어도 계속 일⛏할 수 있게돼요!
    보통은 오래걸리는 작업인, 다운로드나 업로드가 수행될 때 사용되는 세션인거죠~

또한, URLSessionConfiguration은 시간초과(timeout)값, 캐싱정책, HTTP헤더와 같은 세션속성을 구성할수 있어요!
(✔️URLSessionConfiguration의 옵션에 대해서는, documentation을 참조해주세요!)

✅URLSessionTask

URLSessionTask는 작업객체(task object)를 나타내는 추상클래스에요.

세션
1.데이터를 가져오거나
2.파일을 업로드, 다운로드를 하는 등의 실제 작업을 수행하는 하나 또는 그 이상의 task를 생성하게돼요!
이친구 역시, 세가지 유형의 구체적인 session task타입이 있지요~~

  1. URLSessionDataTask: HTTP의 각종 메서드를 이용해 서버로부터 응답데이터를 받아, Data객체를 가져오는 작업을 수행해요.
    대표적으로는, 서버에서 메모리로 데이터를 검색하는 HTTP GET요청을할 때 이 테스크를 사용해요!
  2. URLSessionUploadTask: 애플리케이션에서 웹 서버로 Data객체 또는 파일데이터를 업로드하는 작업을 수행해요.
    전형적으로, HTTP의 POST나 PUT 매소드를 통해서 디스크에서 웹서버로 파일을 전송할때 이 테스크를 사용해요!
  3. URLSessionDownloadTask: 원격서버로부터 임시의 파일(저장)위치로 파일을 다운로드하는 작업을 수행애요.
    애플리케이션의상태가 대기 중이거나 실행 중이아니면, 백그라운드상태에서도 다운로드가 가능해요!

URLSessionDataTask는 서버로부터 어떠한 응답이라도 Data객체의 형태로 전달받을 때 사용하며,
JSON, XML, HTML등의 단순한 데이터의 전송에 주로 사용돼요!
반대로, URLSessionUploadTaskURLSessionDownloadTask
단순한 바이너리파일을 전달하는 것에 목적을 두며,
용량이 큰 파일이 애플리케이션이 백그라운드 상태인 경우에서도 전달시켜야 하는 경우에 사용해요!

SessionTaskTypes

또한, 작업(task)을 일시정지(suspend), 취소(cancel), 재개(resume)할 수도 있어요🤩
URLSessionDownloadTask는 멈췄다가,
이후에 재개(resumeption)할 수 있도록, 일시정지(pause)를 할수 있는 추가기능도 있지요~~

그리고 URLSession에서 데이터를 반환할 때는, 일반적으로 사용하는 두 가지 방법이 있어요!

  • 작업이 성공하거나 실패(error)했을 때, 보통은 completion handler를 통해서 데이터를 전달해요.
  • 핸들러를 사용하지 않는 경우에는, 세션을 만들때 설정했던 delegate메소드를 호출하여 데이터를 전달해요.

여기까지, URLSession에 대한 이론적인 부분을 다루어 보았어요!
(실제 적용사례는... 제가 좀 덜 바빠진다면...😅)
이론은 몇번 쭉 훑어보면서 여러번 가볍게 보고,
실제로 만들어보는게 이해하는데 가장 좋은 방법이 될거에요🤗


이해가 안되는 부분이나, 틀린 부분이 있으면 코멘트를 남겨주세요!
피드백은 정말정말 환영입니다🎉🎉

Reference

Mjun님의 블로그
국산 앨런님의 블로그
붱이🦉님의 블로그

728x90
반응형

'Swift' 카테고리의 다른 글

LLDB(Low-Level Debugger)  (0) 2021.04.15
고차함수 (Higher Order Functions, 고계함수)  (0) 2021.04.12
값 캡쳐 (Capturing Values)  (0) 2021.03.25
후위 클로저 (Trailing Closures)  (0) 2021.03.25
클로저 표현 (Closure Expressions)  (0) 2021.03.23