개발을 잘하고 싶은 주니어?

URLSession 공부하기 - 1 (이론) 본문

개발/iOS

URLSession 공부하기 - 1 (이론)

데쿠! 2021. 11. 19. 03:18
반응형

취업 준비와 면접 준비 때문에 점점 게시글을 올리는게 힘들어지네요..

그래도 힘내서 iOS공부 하겠습니다..! 혼자서 각종 이슈를 해결하고 스스로 앱 개발을 할 수 있을 때까지...!!!! 화이팅!!!!

 

 

URLSession

애플 개발 문서에서 URLSession을 다음과 같이 말합니다.

대충 해석해보면 관련 있는 네트워크 데이터의 이동을 관리하는? 객체라고 합니다.

실제로 서버에 데이터를 보내거나 받을 때 이 URLSession 클래스의 도움을 받습니다.

URLSession클래스는 데이터를 다운로드, 업로드하거나 서버로부터 데이터를 받는 기능을 가진 api를 제공합니다.

이 api를 이용해서 앱이 실행되고 있지 않을 때 백그라운드에서 다운로드를 수행할 수 있습니다.

URLSessionDelegate를 이용해서 네트워킹 중간 과정도 확인할 수 있습니다.

애플 문서에서는 실제로 이 api를 사용하기 전에 다음의 링크에서 URL Loading System에 대한 설명을 읽어보라고 하니 링크를 첨부하겠습니다. 저도 이 부분을 따로 읽고 정리해야겠습니다. (공부 단계라 아직 읽어보진 못했습니다. ㅜㅜ)

https://developer.apple.com/documentation/foundation/url_loading_system

 

Apple Developer Documentation

 

developer.apple.com

실제로 앱은 네트워킹 과정을 빼면 많은 것을 하지 못합니다. 예를 들어서 웹사이트의 경우에도 각 윈도우 당 하나의 세션을 만들어야 하고 사용자가 어떤 인터랙션을 할 때에도 하나의 세션을 생성해야 합니다. 물론 백그라운드 다운로드를 할 때에도 세션을 생성해야 합니다.

각 세션에서는 task를 추가하는데 이 task를 이용해서 네트워크와 통신을 합니다. task에는 특정 URL에 대한 요청을 추가합니다.

 

URL Session 종류

특정 url의 task들은 공통의 session configuration을 공유합니다. 좀 어려운 말인데 그냥 configuration을 가지고 session을 생성하는데 이때 configuration의 정보를 session을 통해서 생성된 task들이 공유한다는 말입니다. (URLSession은 URLConfiguration을 통해서 생성합니다.)

위의 그림처럼 config의 호스트당 최대 연결 수, 셀룰러 접근 허용과 같은 네트워크 관련 설정을 하고 나서 이 config를 이용해서 session을 생성합니다.

URLSession은 shared라는 싱글톤 객체를 가지는데 이 객체는 따로 configuration 객체를 가지지 않습니다. (위에서 처럼 configuration 만들고 session을 만들지 않는다는 말)

그래서 따로 원하는 방향으로 세션을 만들 수 없고 디폴트로만 만들 수 있습니다.

Configuration으로 세션을 만들면 다음의 타입을 지정할 수 있습니다.

1. default

-> shared세션과 비슷합니다. 하지만 설정을 추가할 수 있기 때문에 그 점이 다릅니다. 

2. Ephemeral

-> 이것도 shared세션과 비슷한데 캐시, 쿠키를 따로 저장하지 않습니다. 웹브라우저에서 프라이빗 기능 같은 거라고 생각하면 될 것 같습니다.

3. Background

-> 앱이 실행되지 않는 동안에 백그라운드에서 데이터를 업로드하거나 다운로드할 때 사용합니다.

URLSessionConfiguration 또한 링크를 남겨두겠습니다. 이것도 따로 게시글을 적을 예정입니다.

https://developer.apple.com/documentation/foundation/urlsessionconfiguration

 

Apple Developer Documentation

 

developer.apple.com

 

 

URL Session Task 종류

세션으로 데이터를 서버에 업로드하거나 서버로부터 데이터를 다운로드하는 테스크를 생성할 수 있습니다.

  • Data tasks는 NSData 객체를 사용한 데이터를 보내고 받습니다. response 데이터는 메모리 상에서 그냥 처리를 해버립니다. 그래서 간단한 데이터를 받을 때 사용합니다.
  • Upload task는 data task와 비슷한데 백그라운드 업로드를 할 수 있다는 것이 다릅니다.
  • Download task는 파일 형태로 데이터를 받습니다. 그리고 이것 또한 백그라운드 다운로드를 지원합니다.
  • WebSocket task는 WebSocket 프로토콜을 이용해서 TCP, TLS상에서 메세지를 주고받을 수 있습니다. (어렵)

 

반응형
Comments