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 함수들을 만들어 사용하는 것이 좋습니다.