iOS 개발일지
0830 새싹 41회차 정리 본문
iOS 앱 개발자 데뷔 과정 41회차
#1. Checklist
- URLSession
https://developer.apple.com/documentation/foundation/urlsession 참고
데이터를 다운로드 하거나 업로드 하는 등의 API를 제공해주는 클래스로 URL이 가리키는 엔드포인트를 가지고 있다.
URLSessionAPI를 통해 데이터를 어떻게 전송하고 어떻게 동작할지 등의 정책을 설정할 수 있다.
ex. 타임아웃, 캐시 정책, 백그라운드 데이터 전송 등
- SharedSession
간단하고 기본적인 요청의 경우, 동작과 전송에 대한 정책이 기본적으로 설정되어 있는 Shared Session을 사용할 수 있다.
네트워크 응답에 대해서는 Completion Handler를 통해 전달받게 되며, 구현이 간단하지만 백그라운드 전송은 지원하지 않는다.
- URLSessionConfiguration
URLSessionConfiguration에서는 일반적인 프로퍼티 (셀룰러 연결 여부, 타임 아웃 간격, 리소스 요청 최대 시간 등) 설정, 캐시 정책 (캐시 활성화 여부, 캐시 만료 기간 등) , 보안 정책, 캐시 정책, 백그라운드 전송 등을 세부적으로 설정할 수 있다.
URLSessionConfiguration를 통해 아래의 세 가지 유형의 URL을 생성할 수 있다.
- Default Session : Shared Session과 유사하지만 커스터마이징이 가능하다.
네트워크 응답에 대해서는 Delegate를 통해 세부적인 제어가 가능하다.
- Eqhemeral Session : 쿠키나 캐시를 저장하지 않아, private 기능 등을 구현할 때 사용한다. (ex. 시크릿 모드)
- Background Session : 앱이 백그라운드에 있을 때 데이터를 다운로드/업로드 할 수 있다.
- URLSessionTask
세션이 생성된 이후에는 Task를 생성하게 되는데, URLSession을 통해 생성되는 개별 요청이 Task이다.
데이터를 전달하는 방식과 구현 목적에 따라 DataTask, UploadTask, DownloadTask, StreamTask 타입이 있다.
- dataTask
데이터 작업을 할 때 기본적으로 사용한다.
- resume
Task는 suspended 상태로 시작하기 때문에 Task를 생성한 이후에는 resume 메서드를 통해 Task를 시작할 수 있고, 따라서 resume을 호출해야 네트워크 통신을 시작할 수 있다.
- URLRequest
https://developer.apple.com/documentation/foundation/urlrequest 참고
네트워크 요청에 대한 정보를 표현하는 객체로, 어떤 HTTP Method가 사용되는지, 어떤 데이터를 전송하는 것인지 등의 정보를 담고 있으며, 네트워크에 요청을 하기 위해서는 URLSession이 필요하다.
URL 객체를 통해 통신하거나, URLRequest 객체를 통해 세부 옵션 (캐싱, HTTP Method 등) 에 대한 옵션을 설정할 수 있다.
- URLResponse
프로토콜 및 URL 스키마와 상관없이 URL 로드 요청에 대한 응답과 관련된 메타데이터이다.
URLResponse 객체는 실제로 HTTPURLResponse 클래스의 인스턴스이고, HTTPURLResponse 는 URLResponse 클래스의 서브 클래스이다.
서버로부터 응답 받은 데이터를 처리할 수 있는 방법은 두 가지가 있다.
Completion Handler : Task에 대한 completionHandler 형태로 응답받으며, 이는 Task가 종료되고 난 시점에 한 번만 호출된다.
Session Delegate : Task가 실행되는 동안 발생할 수 있는 다양한 상황에 대해 세부적으로 처리하고자 할 때 사용한다.
ex. 서버로부터 최초로 응답받았을 때, 서버로부터 데이터를 받을 때 마다, 데이터 전송을 다 받은 시점 등에 대한 이벤트 처리
- URLComponent
URL을 단위별로 쪼개서 관리할 수 있으며, 최종적으로는 component.url 을 통해 사용할 수 있다.
let scheme = "https"
let host = "api.themoviedb.org"
let path = "/3/search/person"
let language = "ko-KR"
let query = query.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
var component = URLComponents() // 유지보수 측면에서 좋음
component.scheme = scheme
component.host = host
component.path = path
component.queryItems = [
URLQueryItem(name: "api_key", value: APIKey.TMDB),
URLQueryItem(name: "query", value: query),
URLQueryItem(name: "page", value: "1"),
URLQueryItem(name: "region", value: language)
]
'SeSAC iOS 데뷔과정 2기' 카테고리의 다른 글
0901 새싹 43회차 정리 - MVVM 맛보기2 (0) | 2022.09.01 |
---|---|
0831 새싹 42회차 정리 - MVVM 맛보기 (0) | 2022.08.31 |
0829 새싹 40회차 정리 - Codable (0) | 2022.08.29 |
0828 새싹 8주차 마무리 (0) | 2022.08.28 |
0826 새싹 39회차 정리 (0) | 2022.08.26 |