URLLoadingSystem: URL을 통해 서버(네트워크에 있는)와 통신하는 기술. 여기에 포함된 프레임워크는 하이레벨 API를 제공. 이 API들은 서버 연동, 다운로드, 업로드 기능을 구현. 애플은 URL Loading System 사용을 권장.
URLSession: URLLoadingSystem에서 가장 중요한 것은 URLSession임. 네트워크 연결을 설정하고, 요청과 응답을 처리함.
-
iOS앱에서 서버와 통신하기 위해 애플은 URLSession이라는 API를 제공.
-
URLsession은 다른 HTTP통신과 마찬가지로 Request와 Response를 기본 구조로 가지고 있음.
-
Request는 URL객체를 통해 직접 통신하는 형태와 URLRequest 객체를 만들어서 옵션을 설정하여 통신.
-
Response는 설정된 task의 completion handler형태로 response를 받거나,
URLSessionDelgate를 통해 지정된 메소드를 호출하는 형태로 response를 받는 형태가 있습니다.일반적으로 간단한 response를 작성할 때에는 Completion Handler를 사용하지만 앱이 background 상태로 들어갈 때에도 파일 다운로드를 지원하도록 설정하거나 인증과 캐싱을 default 옵션으로 사용하지 않는 상황과 같은 경우에는 Delegate 패턴을 사용해야 합니다.
URLSession은 4가지 session타입을 가지고 있음.
-
shared session : 단순한 네트워크 요청을 구현시 사용. default configuration + completion handler를 통해 최종 결과를 전달받음. 커스터마이징 없이 기본 설정을 사용하고 완료핸들러를 통해 최종결과를 전달받음. 구현이 단순하지만, 백그라운드 전송은 지원하지 않음.
-
default session: 세션을 직접구성시 사용. delegate구현을 통해 세부적인 제어가 가능. 서버로 부터 전달된 응답은 기본적으로 disk캐시와 메모리 캐시에 저장됨. (Default Configuration / Custom Configuration + Completion Handler / Delegation + Response Caching (Disk & Memory)
-
ephemeral session: private browsing기능 구현시 사용. (Default Configuration / Custom Configuration + Completion Handler / Delegation + Response Caching (Memory Only!)
-
background session: 백그라운드 전송을 구현할때 사용.
shared세션을 제외한 나머지 세션은 session configuration 객체를 통해 생성.
세션을 생성한 이후에는 task를 생성.
task는 URLSession을 통해 전달하는 개별 요청. URLSession은 데이터전달방식과 구현목적에 따라,
4가지 task 를 제공.
-
Data Task는 api서버와 통신할때 적합. URLSession에서는 대부분 data task를 사용.
-
download task: 파일 전송 구현시. 백그라운드 전송 지원.
-
upload task: 파일 전송 구현시. 백그라운드 전송 지원.
-
stream task: 채팅과 같은 TCP Program구현에 적합
urlsession은 원하는 테스크를 생성하는 메소드를 제공. 하지만 task는 suspended상태로 생성됨. resume()메소드를 호출해야 네트워크 요청이 시작됨. task를 생성한 다음 직접 resume()를 호출해야 함.
서버에서 전달된 데이타를 처리하는 두가지 방법
-
완료핸들러 사용: 텍스크가 종료된 시점에 한 번만 호출. 서버에서 전달된 데이터는 완료 핸들러에 한번에 전달
-
세션델리게이트를 구현: 텍스크가 실행된느 동안 다앙햔 이벤트를 세부적으로 처리해야 할때 적합.
완료핸들러를 구현했다면 인증과 관련된 것 제외하고 델리게이트메소드는 호출되지 않음.
*동기(sync): 하나의 작업이 진행 중인동안에는 다른 작업을 실행하지 못하고 대기함.
*비동기(async): 하나의 작업이 진행중이더라도, 다른 작업을 시작시킬 수 있고, 동시에 실행되는 경우도 있지만, 대부분은 번갈아 가면서 실행됨.
'iOS' 카테고리의 다른 글
iOS - Cocoa Pods (0) | 2020.04.09 |
---|---|
iOS - Custom Fonts (0) | 2020.04.01 |
iOS - ImagePicker (이미지 피커) (0) | 2020.03.27 |
iOS - Application 배포 (0) | 2020.03.26 |
iOS - CoreData (0) | 2020.03.25 |