URL(Uniform Resource Locator)
→ 인터넷상의 파일 위치를 식별하는 방법
→ iOS앱에서 서버와 통신하기 위해 애플은 URLSession 이라는 API를 제공. 서버와의 데이터 교류를 위해서는 필수적으로 알아야 하는 API 입니다. HTTP를 포함한 몇 가지 프로토콜을 지원하고, 인증, 쿠키 관리, 캐시 관리 등을 지원
→ 다른 HTTP 통신과 마찬가지로 Request 와 Response 를 기본 구조로 가지고 있음.
Request
URL객체를 통해 직접 통신하는 형태와URLRequest객체를 만들어서 옵션을 설정하여 통신하는 형태가 있음.
Response
설정된Task의Completion Handler형태로response를 받거나,URLSessionDelegate를 호출하는 형태로reponse를 받는 형태가 있음
일반적으로 간단한 reponse를 작성할 때는 Completion Handler를 사용하지만, 앱이 background 상태로 들어갈 때에도 파일 다운로드를 지원하도록 설정하거나, 인증과 캐싱을 default 옵션으로 사용하지 않는 상황과 같은 경우 Delegate 패턴을 사용해야 함
Session 생성Task 설정하고 Completion Handler 나 Delegate 메소드들을 작성Task 실행Task 완료 후 `Completion Handler 실행URLSession 3가지 종류의 Session 지원
Default Session - 기본적인 Session으로 디스크 기반 캐싱을 지원Ephemeral Session - 어떠한 데이터도 저장하지 않는 형태의 세션Background Session - 앱이 종료된 이후에도 통신이 이뤄지는 것을 지원하는 세션URLRequest를 통해서는 서버로 요청할 때 어떻게 데이터를 캐싱할 것인지, 어떤 HTTP 메소드(GET, POST, PUSH, DEL 등) 사용할 것인지 설정
Task 객체는 일반적으로 Session 객체가 서버로 요청을 보낸 후, 응답을 받았을 때 URL 기반의 내용들을 받는(recevice) 역활을 함. 3가지 종류의 Task가 지원 됩니다.
Data Task - Data 객체를 통해 데이터를 주고받는 TaskDownload Task - data를 파일의 형태로 전환 후 다운 받는 Task, 백그라운드 다운로드 지원Upload Task - data를 파일의 형태로 전환 후 업로드하는 TaskURLSession과 같은 네트워킹용 API는 일반적으로 앱 전역에서 사용 됩니다. 그렇기 때문에 ViewController에 메소드를 작성하기보다는 하나의 모듈(class) 만들고 그 안에 static 함수들을 만들어 사용하는 것이 좋습니다.