본문 바로가기
WWDC

WWDC 17 - Advances in Networking, Part 2

by vapor3965 2021. 6. 24.

목차


    • 세션보면서 정리한 내용입니다. 해석이 잘못된 경우가 있을수있으니 발견하시면 댓글로 남겨주시면 감사하겠습니다🙏🏻

     



    https://developer.apple.com/videos/play/wwdc2017/709/

     

    Advances in Networking, Part 2 - WWDC 2017 - Videos - Apple Developer

    Learn about important improvements to URLSession. Find out how to use new URLSession APIs to better handle connectivity fluctuations, to...

    developer.apple.com

     


     

    관련내용

    • URLSession의 향상을배워보자.
    • 새로운 URLSessionAPI를 더 낫게 연결을 하는방법을 배워보자.
    • 백그라운드 스케쥴정하는방법도.
    • progress report도 받는방법도.

     

    👍요약

    • 연결이좋지않을떄, 이제는 URLSessionConfiguration - waitsForConectivity 를통해 연결이좋아질때까지 기다리도록 하게됐다.
      • 물론, 연결이좋지않을때 , waiting상태일떄 알수있는 delegate메서드도있다.
      • 예외상황을제외하고는 항ㅅ아 true로하라.
    • URLSessionBackground일때, 여러문제가있는데, SessionTask - earliestBeginDate , delegate , count를 통하여 해결해준다.
    • timeutIntervalForResource - 는 default로 7일이다.
    • URLSessionTask는 progressReporting프로토콜을채택하여, progress객체가있다.

     

     


    Default URLSession은 fetch하거나 fail만 존재한다.

    • 연결이부종한경우 즉시 실패하게된다.

    Background URLSesion은 연결성을 계속 모니터링하게한다.

     

    연결성이 안좋은경우는

    • 이더넷케이블이 없고, 와이파이없고, 셀룰러가아닐때.
    • 또는 에어플래인모드일때,
    • VPN연결이안됐을때,

    지금까지는 연결성이부족하거나, 할떄 완전하지않은 솔루션이있었다.

     

    하지만 이제는 URLSession Adapatable Connectivity API 를 소개한다.


    URLSessionConfiguration - waitsForConectivity 를 true로한다.

    • 연결성이 일시적으로안좋을때, 원래는 바로 fail이되지만, 이를 키게되면, 연결이될때가지 기다리도록해준다! 그리고연결이되면 그때부터 다운받도록 해준다!
    • 더이상 연결과 다시 리쿼스트를 할필요가없다!
    • 그리고 background session에서는 이는 필요없다. 자동적으로해준다.
    • 또한 DNS 실패에도 기다리게해준다.

    또한 waiting하고있는지, 를 알 수 있는 방법이있따.


    urlsession(_: taskIsWaitngForConnectivity: )

    • delegate메서드로, 받을수있다.
    • 그리고이는 waitsForConnetivity 가 true일때만, 호출된다.

    예외상황빼고는 항상 이 프로퍼티를 true로 하라.

    • 연결이되기시작한다면 즉시바로 실행되기때문에 downside가없다.
    • 예외상항은 그즉시리쿼스트가 실패하거나성고앻야하라때, - 주식사고파는것처럼

     


    👍Example Code


    요약 -Recap

     

     



    URLSession background

    • 앱이 running하고있지않아도, 통신하게해준다.
    • background app refresh을 가능하게해준다.
      • 항상최신상태로유지하게해준다.
      • watch os complication처럼
        • 더자세한건 What’s new with Multitasking - WWDC2013
        • Keeping Your Watch App Up to Date - WWDC2016

    실제로 Background App refresh 가하는건뭘까?
    우선, 앱의상태가필요하다

    아래와같이, 러닝일때, background request를한다.

    • 미래에 내가 앱을사용할건데, 최신상태로유지해주삼!

    그리고 suspend 되고, background갔을때, 시스템은 해당request를생성하고, 완료하고, 데이터를받는다

     

    하지만 몇가지문제가있다.

    • 이렇게 background task가있으면, 사용자의폰 배터리에도 영향이있고, cpu를 사용한다 .이는 사용자에게 좋지못하다.
    • 또한, 리쿼스트를 생성한것과 네트워킹을시작할때에 변화가있을수있다. 즉 네트워킹을마쳤지만, 더이상필요없는데이터일수도있다.
    • 시스템은 언제스케쥴할지 에대한 정보가부족하다.

     

    그럼 우리가 이러한것들을 해결했는데, 그것은 URLSession scheduling API이다.

    • URLSessionTask 객체에서 새로운 프로퍼티를제공한다.
      • 👍earliestBeginDate : Date?
      • 이는 언제 이 task를 실행할지 정하도록한다.
      • 이를통해, 이날짜이전까지는 네트워킹하지않도록보장하고, backgroundSession에서만가능하다


    그러므로 earliestBeginDate 를사용하면 아래로아같이 3단게로바뀐다


    이렇게 첫번째문제는 해결됐고,
    두번째 context가 바뀐경우에는

    👍urlSession(_:task:willBeginDelayedReuqest:completionHandler: ) delegate를 통해 해결할수있다.

    • beginNetwroking이 될때, 우리에게 실행할지말지 기회를준다.
    • 물론 earliestBeginDate가 켜져있고, backgroundSession에서만가능하다.
    • 즉, 이때면 더이상필요없다고판단할수있고, 변경해야할수도있고, 등등 결정ㅎ알수있따.
    • 잘 신중해서하길바란다

    👍3번째문제 - 언제스케쥴릴할지,

    • 는 시스템은 알지못하기때문에, 시스템에게 더 많은정보를 주기위해 우리는 2가지프로퍼티를 사용ㅎ라수잇다.
      • 직접개발자는 어느정도데이터가필요한지, 서버에얼마나데이터가올지를 더 명확히알것이기때문이다.
      • 그러므로 시스템은 정보를가지고 더 언제 스케쥴링ㅎ라지 최적화할수있게된다.

      • 또는 잘모르겠다면, 아래와같이 알릴수있다.



    👍예제코드

    • 오호, timeIntervalSliceNow 를사용할수있군! 120분!

    delgate메서드

    • 오호! 기존 request를 변경하여 보내는구나,

     

     

     

     

     

     


    👍ProgressReporting

    • 이제 iOS11부터 , URLsesionTask는 ProgressReporting프로토콜을 채택했다.
    • 그래서, URLSessionTask는 progress 프로퍼티가생겼다.

    • 이 progress객체는, fractionCompleted 프로퍼티로, 0.0~1.0의 값사이를 준다 ( 완료하고있는 )
    • 또한, 나중에 보기위해, 더 자세한 정보를 담을수있도록 String을 줄수도있다. - localizedDescription, localizedAdditionalDescription

    • 그리고, 해당 progress 객체를 UIPorgressView 또는 NSProgressIndicator에 부착할수도있따!!! 대박.
    • 또한 여러개의 task들을 합쳐서 나타낼수도있다. 다운로딩파일, decompressing 파일등등

    각각 1-1이매칭된다

    URLSession은 이제 Brotli compression 알고리즘을 적용했다.

    • URL로드가 15%나 더 빨라졌다.
    • 사파리도빨라짐

     

     


    Networkig TIP


    👍TimeOut

    • ForResource
      • 그시간안에 리소스가 다 받지않는다면 끝난다.
      • default로 7일이다.

     

    TLS 1.3 을 애플이같이 진행중이다. (이제는 완료됐고, )



    QUIC 
    애플이같이진행중이다

    ( 이번 WWDC 21 에서 발표했었죠! ) 


    Bonjure

    • 스티브잡스가소개하고나서 15년이지났다.
    • 음, 뭐 다양한 기기들이 Bonjure와 웹서버를 장착해, 맥으로 조종및 모든결과를쉽게볼수있게됐다.
    • ( 찾아보니, 로컬네트워크에서 연결된 디바이스들을 쉽게 찾아주도록 해준다. 음, 따로 포트번호 및 네트워크주소를 정의하지않아도 감지할수있는 ? )


    댓글