Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

iOS 개발일지

0830 새싹 41회차 정리 본문

SeSAC iOS 데뷔과정 2기

0830 새싹 41회차 정리

Lia's iOS 2022. 8. 30. 21:53
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)
        ]