아요 개발 일기

[iOS] URLSessoion를 이용한 네트워킹 본문

iOS

[iOS] URLSessoion를 이용한 네트워킹

소진이 2023. 1. 3. 15:45

안녕하세요!

오늘은 iOS 앱에서 네트워킹을 구성하는 가장 기본적인 방법인 URLSession을 공부해보도록하겠습니다!


URLSession?🧐

iOS 앱에서 서버와 통신하기 위해 애플은 URLSession이라는 API를 제공하고 있습니다.

URLSession은 앱과 서버간에 데이터를 주고받기 위해서 HTTP를 사용합니다.

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

 

 

위와 같은 그림으로 URLSession을 나타낼 수 있는데요 :-)

각각의 부분은 아래와 같은 역할을 합니다.

 

 URLSessionConfiguration

: URLSession 생성

 

URLSessionTask

: 실제로 서버와 통신하는 것

 

Delegate

: 네트워킹 중간 과정 확인 과정 (필요에 따라서 사용 / 필수 X)

 


URLSession을 알아야하는 이유는 무엇일까요?

- swift에서 HTTP를 이용한 네트워크 사용 방법을 이해할 수 있습니다.

- Alamofire, Moya 모두 URLSession을 기반으로 하며 wrapping한 것입니다.

- testable 코드를 만들 경우 URLSession을 알면 더욱 작성하기 용이합니다.

- Alamofire, Moya를 사용할 때 오류나 특정 log에 대한 것을 이해하려면 URLSession을 알고 있어야 용이합니다.


 

URLSession의 기본 컨셉

URLSession은 기본적으로 다음과 같은 순서(Life Cycle)로 진행됩니다.

 

 

Session configuration을 결정하고, Session을 생성 

 

-> 통신할 URL과 Request 객체를 설정 

 

-> 사용할 Task를 결정하고, 그에 맞는 Completion Handler Delegate 메소드들을 작성한다.

 

-> 해당 Task를 실행한다.

 

-> Task 완료 후 Completion Handler가 실행된다.

 

 

이제 그럼 Session과 Request, Task에 대해서 알아볼까요?


Session

 

URLSession은 크게 3가지 종류의 Session을 지원합니다.

 

Default Session

: 기본적인 Session으로 디스크 기반 캐싱을 지원합니다. 즉, 기본 통신할 때 사용합니다.

 

Ephemeral Session

: 쿠키나 캐시를 저장하지 않는 정책일 때 이용하는 세션으로, 어떠한 데이터도 저장하지 않는 형태의 세션입니다. 

 

Background Session

: 앱이 종료된 이후(백그라운드에 있을 때)에도 통신이 이뤄지는 것을 지원하는 세션입니다.

 


 

URLSession은 Request와 Response를 기본 구조로 가지고 있습니다.

 

Request

URL 객체를 통해 직접 통신하는 형태

URLRequest 객체를 만들어서 옵션을 설정하여 통신하는 형태

 

Response

 설정된 Task의 Completion Handler 형태

URLSessionDelgate를 통해 지정된 메소드를 호출하는 형태로 response를 받는 형태

 

 

 

 

🤔 🤔 🤔
일반적으로 간단한 response를 작성할 때에는 Completion Handler를 사용하지만,
앱이 background 상태로 돌아갈 때에도 파일 다운로드를 지원하도록 설정하거나 인증과 캐싱을 default 옵션으로 사용하지 않는 상황과 같은 경우에는 Delegate 패턴을 사용해야합니다.

 


 

Request

URLRequest를 통해서는

서버로 요청을 보낼 때 어떻게 데이터를 캐싱할 것인지,

어떤 HTTP 메소드를 사용할 것인지(Get, Post등),

어떤 내용을 전송할 것인지 등을 설정할 수 있습니다.

 


 

Task 

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

3가지 종류의 Task가 지원됩니다.

 

 

 

Data Task

: Data 객체를 통해 데이터를 주고받는 Task입니다. response 데이터를 메모리 상에서 처리합니다.

 

Download Task 

: data를 파일의 형태로 전환 후 다운 받는 Task입니다. 백그라운드 다운로드 지원합니다.

 

Upload Task 

: data를 파일의 형태로 전환 후 업로드하는 Task입니다. 사용하기 편한 request body를 제공합니다.

 

 

 

참고 사이트

Apple Developer Documentaion.   

김종권의 iOS 앱 개발 알아가기  

hcn1519님의 GitBlog 

( 좋은 정보 주셔서 감사합니당🙇🏻‍♀️ )