본문 바로가기
WWDC

WWDC 15 - Networking with NSURLSession

by vapor3965 2021. 6. 24.

목차


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

     

    https://developer.apple.com/videos/play/wwdc2015/711/

     

    Networking with NSURLSession - WWDC 2015 - Videos - Apple Developer

    Learn about App Transport Security, HTTP/2 protocol support, new NSURLSession API, and best practices for networking in apps, extensions,...

    developer.apple.com



    관련내용

    • App transport Sercurity, HTTP/2 protocol 지원, 새로운 URLSesionAPI배워보자.

    👍요약

    • 애플은 신뢰성과 안전성을 중요시한다.
      • APT 정책이그러하다. 고객의 데이터가 안전하고 믿을수있기를바란다.
    • Info.plist에서 ATS을 통해 URLSesssion의 규약들을 정의해놓았다.
      • 기본적으로 HTTP통신을 막았고, exception을설정할수있고, 또는 모든 HTTP,HTTPS통신을허용하도록할수도있다.
    • HTTP/2 의기능들을 추가적인코드없이 바로 사용할수있다! 오직 서버만 HTTP/2를지원하면된다.!
    • application group안에서, Cookie를 공유할수있따!
    • HTTP,HTTPS를제외한 TCP통신을위해, 그동안은 NSStream을사용했지만 ,그보다 훨씬 편리한 NSURLSessionStreamTask가 새롭게등장했따.
      • 더쉬운비동기 read,write 작성.
      • TLS도 지원한다.

     


     

     

     

     

     

    HTTP기본적으로 평문(cleartext이므로, 안전하지않다

    • 아시다시피 HTTPS를통해 이를극복했다
      • transport layer security위에 http가있는것
    • 그러므로, 안전하고, 믿을수잇다.

     

     

    App Transport Security - ATS

    • apple의 새로운feature ( iOS 9 부터 )
    • 이는 민감한고객데이터의 유출을막아준다.
    • URLSession의 정책을더강화해준다
      • 즉, default로 HTTP 평문로드를 허락하지않는다
    • APS는 간단하게 Info.plist에서 configure된다.

    아래와같이, 예외적으로 허락할수있다.
    또한, TLS버전을 최소정할수있다.


    예외적으로 HTTP로드를허락할수있다.

    유저의 입력에따른 다양한 URL이나 등등같은 상황에서는
    아래와같이 모든 상황을 허락해준다고 정의할수있다.


    물론,모두 허락하면서도, 그안에서 특정 도메인은 무조건secure하게도 할수있다.


    그리고 CF Network Diagnostics 라는 좋은 디버깅툴이있다.
    아래와같이 level1로 바꾸면, URL로드 실패에따른, 원인과 TLS엥러를 보여준다.

    • 거의 일반적으로 TLS Layer에서의 클라이언트와 서버가 맞지않아 발생하는경우가많다 .

     

     


    New Protocol - support in NSURL Session

     

    HTTP1.1의문제점

    • 하나의 TCP연결당 하나의요청만할수있다. ( 서버가응답을해야만그다음요청할수가있다. )
      • 이것은 HTTP 파이프라이닝이 해결이되었다 하지만 모든 서버가가능하지도않고, 특히 데스크탑웹브라우저에서도 불간으했다.
    • 호스트에게 여러개의TCP연결이가능했다.

    HTTP2는 ..

    • 하나의TCP연결만하도록했다. 그러므로 호스트와 서버둘다 자원을절약할수이싿.
    • 서버가응답하기전에 다중요청이가능해졌다.
    • 그리고 요청에도 우선순위가생겨서, 더급한 요청은 더 빠르게받ㅇ르수있게됐다.
    • binary 는 데이터처리, 파싱을 더빠르게해준다.
    • HPACK을사용하여 헤더압축했다.

     

     

    HTTP 1.1에서 요청과 응답과정 - HOL blocking

    • 먼저요청보낸image가 나머지요청들을 block하고있다.




    HTTP 2 에서 요청과 응답과정

    • 우선순위에따라 더 빨리받을수도있게됐다.
    • 즉, Image요청응답이 나머지요청을 block하지않는다!

    HPACK 헤더압축

    • 두개의테이블을사용한다.
    • 하나는 가장많이사용되면서, 변하지않는 테이블,
    • 그리고 static테이블에없는헤더는 Dyanmictable에추가될수있따
    • 뭐여튼, http1.1은 여러개의요청에 결국 똑같은헤더가많이포함되는문제가있다.

     

     


     

    앱에 HTTP2 프로토콜을 채택하기위해 무엇을해야할까?

    • 없다!! - 단지 서버만 HTTP2를지원하면된다!

    HTTP/2 프로토콜은 URLSession APIㅔㅇ 아주잘 interagted되었다.
    👍또한, 이미 URLSession을사용하고있따면 추가적인코드를작성하릴요없이 자동적으로 이러한기능들을 사용할수있다. ( 박수박수 )

    • 서버는 ALPN or NPN을 지원하면된다.

     

     

     

    NSURLSession on watchOS

    • HTTPS를 지원한다.
    • ATS, HTTP/2 모두지원한다.

    차이점은

    • 만약 워치는 대부분 아이폰이랑근처에있다면, 우리는 블루투스연결을 leverage한다. 즉, 아이폰에서 http통신을수행하고, watch에블루투스전달하는 형식
    • 만약 아이폰이랑떨어져있다면, WI-FI네트워크로직접연결한다.
    • 즉! 가장 적절한 방법을 알아서 사용한다?
    • watchOS에서는 최소한 데이터만받도록해라,

     

     

    API 변화

    • iOS9부터 NSURL Connection은 depracted되었고,
    • NSURLSession을사용할것을 강력히추천한다.
    • 그리고 watchOS는 NSURLSession을이용해야한다

    Sharing Cookies

    • 각 App Extension들은 Cookies 저장소가다르다.
    • 하지만 새로운 API를 통하여 group container를 통하여, cookies들을 공유할수있다.

    사용방법

    • group container identifier를이용하여, HTTPCookies storage를 만들수있따!!!
      • appliecation group은 Xcode-Capabilities에서 추가할수있다.


    다른프로토콜은 ?

    • http,https말고도 TCP/IP네트워킹기반의 다른프로토콜을 사용해야할때가있을것이다.
    • NSURL Session Stream Task는 TCP연결에 직접적으로통신한다.
      • 이전에는 NSInputStream, NSOutputstream을사용했었다.
      • 그리고 NSURLSessionSTreamTask가 NSStreamAPI보다 더많은장점을 가지고있다고 애플은생각한당

    👍NSURLSessionSreamTask

    • 장점
      • 쉽게 비동기적인 read, write인터페이스를제공한다.
        • NSStream은 read,write에대한이벤트를 응답할 delegate를 setup해야하는반면!!!
      • HTTP proxies를 자동적으로얻을수있따???
        • NSSTream은하지못하는!
      • 많은유용한게있다.
        • NSStream은 이미 만연해있고, 많은 프레임워크들이있다.
        • 그러므로, NSStream과도 호환될수있도록했다.
    • TCP/IP연결을지원한다.
      • Host name, port
      • Bonjour 서비스를 하기위해 NSNetService 를 사용하는경우 자동적으로 이를 받아들이고 해결한다?
    • URLSession 과 delegate를 같이사용한다.
    • TLS 연결을지원한다.

     

    사용방법

    read

    • eof - 파일끝

    write

    TLS 적용하는방법은


    URLSessionStream Task
    Delegate 메소드

    👍better Route

    • 만약 이미 Stream Task 연결되어있고, 유저가 와이파이네트워크에 연결했다면 , 앱은 연결하는 더 나은 방법이 있을수있따는것을 전달하기위해, 이 와이파이연결했다는것을 전달한다.
    • 즉, 이 delegate가 호출되면 기존연결을해제하고, 새롭게연결하도록 하는 걸다시할ㄹ수도있다.
      • 하지만 이건전적으로 개발자에게 달려있다. 왜냐, 99프로가전송된상태에서 다시 해재하는것은정말 터무니없기때문이다.

    • 이미 연결이닫힌 stream에읽거나, write하려는경우에 관한 delegate가 있다.

    또한, DataTask를 conversino하는방법도있다

    댓글