ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 간단하게 URLSession
    iOS 2021. 12. 21. 16:58

    URLSession

    • Session과 Task를 용도에 맞춰서 조합해 사용을 한다.
    URLSession.shared.dataTask()
    URLSession(configuration: .default).downloadTask()
    ...

    Session

    • 단일 host에 가능한 최대연결개수, cellular 사용가능여부, 등과 같은 연결에 대한 정의를 하는 객체이다.
    • 종류
      • Shared → Configuration이 존재하지 않아, 기본적이고 간단한 요청에 적합하다.
      • Defualt → Shared와 비슷하지만, Configuration이 존재한다. Data를 축적해나가며 수신하는 delegate와 같은 동작을 구현할 수 있다.
      • Ephemeral → 역시 Shared와 비슷하지만, cache, cookies, credential등을 디스크에 저장하지 않는다. Safari Private Tab과 비슷하다고 생각하면 편하다.
      • Background → App이 동작하지 않을 때, upload, download를 수행할 수 있도록 해준다.

     

    Task

    • Session안에서, 용도에 따른 여러가지 Task가 사용된다.
    • suspended 상태로 시작하기 때문에, resume() 을 호출해야 통신이 시작된다.
    • 종류
      • DataTask → NSData 객체를 보내고, 받는다. 짧고 빈번한 요구를 할 때 사용된다.
      • DownloadTask → DataTask와 비슷하지만, App이 동작하지 않을 때 Background에서 다운로드 가능하다.
      • UploadTask → DownloadTask와 마찬가지로, Background에서 업로드 가능하다.
      • WebSocketTask → RFC 6455에서 정의된 WebSocket 프로토콜을 사용해 TCP, TLS 통신을 수행한다.

     

    URLRequest

    • 연결 하려는 URL, 연결에 대한 policy(연결 방법, 헤더, cache policy 등..) 두가지의 정보를 포함하고 있다.
    • Request에 대한 정보만 갖고있기 때문에 다른 API들과 함께 사용해야 한다.

     

    URLResponse

    • Request에 대한 응답과 관련된 메타데이터이다.
    • 앞서 나온 Session, Task의 종류에 관계가 없는 독립적인 클래스다.
    • Completion Handler를 통해서 응답 처리
      • Task가 종료된 시점에 한 번만 호출이 된다
    • Delegate로 응답 처리
      • 통신 중에 여러가지 상황에 대응하기 위해서 사용
      • 서버로부터 최초 응답, 데이터를 받을 때 마다, 전송이 완료됬을 때 등 여러상황에 대해 이벤트를 처리할 수 있다.
      • 예) 30개의 Task를 수행해던 중에 끊기면, 다음에 연결됐을 때 다시 끊긴부분부터 실행하는 등.
    • 주의) UI에 대한 처리는 모두 메인 쓰레드에서 동작하게 해야 한다.
    DispatchQueue.main.async {
        tableView.reloadData()
    }

    댓글

Designed by Tistory.