reference : 패스트 캠퍼스
- iOS 앱에서 서버와 통신하기 위해 애플이 제공하는 API.
- iOS 앱 통신에서 유명한 라이브러리인 Alamofire, SDWebImage 등의 기반이 되는 API.
- HTTP를 포함한 몇 가지 프로토콜을 지원함.
- request / response 의 구조를 가짐.
Hyper Text Transfer Protocol 하이퍼 텍스트를 전송하기 위한 프로토콜. 프로토콜이란 통신에서의 엄격한 규약. html 문서를 주고 받는데 쓰이는 프로토콜.
http 통신은 요청을 보내고 응답을 받을 때 그 정보를 패킷에 넣어 보낸다.
패킷은 헤더와 바디로 이루어져 있다.
헤더에는 보내는 사람의 주소, 받는 사람의 주소 등이 담겨있다.
바디에는 전하고자 하는 실제 내용이 들어있다.
URLSession : 특정한 URL 을 이용하여 데이터를 다운로드, 업로드 하기 위한 API. 앱에서 서버와 통신하기 위한 API
URLSession 종류
- 공유 세션 (Shared Session)
URLSession.shared()
Singleton으로 사용할 수 있고, 기본 요청을 하기 위한 세션.
직접 만든 세션만큼 맞춤 설정을 할 수는 없지만, 쉽게 만들어 사용할 수 있다.
- 기본 세션 (Default Session)
URLSession(configuration: .default)
공유 세션과 유사하게 작동하지만 직접 원하는 설정을 할 수 있고, 캐쉬와 쿠키 인증등을 디스크에 저장한다.
순차적으로 데이터를 처리하기 위해 delegate를 지정할 수 있다.
- 임시 세션 (Ephemeral Session)
URLSession(configuration: .ephemeral)
공유 세션과 유사하게 작동하지만 캐쉬, 쿠키, 사용자 인증정보를 디스크에 저장하지 않는다. 메모리에 올려서 세션에서 연결하고, 세션 만료시 데이터가 사라진다.
- 백그라운드 세션 (Background Session)
URLSession(configuration: .background)
백그라운드 세션을 사용하면 앱이 실행되지 않는 동안 백그라운드에서 컨텐츠 업로드 및 다운로드를 수행할 수 있다.
URL Session이 구성되었으면, URLSession Task를 이용해서 각 세션 내의 작업을 추가할 수 있다.
- URLTask 종류
- URLSessionDataTask
데이터 객체를 사용하여 데이터를 요청하고 응답받는다.
주로 짧고 빈번하게 요청하는 경우에 사용한다.
- URLSessionUploadTask
데이터 객체 또는 파일 형태의 데이터를 업로드 하는 작업을 수행.
앱이 실행되지 않을 때 백그라운드 업로드를 지원한다.
- URLSessionDownloadTask
데이터를 다운로드 받아서 파일형태로 저장하는 작업을 수행.
앱이 실행되지 않을 때 백그라운드 다운로드를 지원한다.
- URLSessionStreamTask
TCP / IP 와의 연결을 생성할때 사용되는 태스크.
- URLSessionWebSocketTask
웹 소켓 프로토콜을 통해 통신하는 태스크.
- Completion Handler = URLSessionTask 완료시 호출되는 클로저
- data, response, error 를 매개변수로 갖는다.
- 예시 swift 코드
// url 주소 변수 선언 guard let url = URL(string: "https://abcdef") else { print("url error") return } // URLSession 생성 let session = URLSession(configuration: .default) // URLSessionTask , Completion Handler session.dataTask(with: url) { [weak self] data, response, error in guard let data = data, error == nil else { print("session error") return }
- data : 서버에서 응답받은 json 데이터
- response : http 헤더 및 상태 코드 메타 데이터. http status가 200번대 라면 응답 성공, 아니라면 데이터를 제대로 가져오지 못한 에러.
- error : 요청 실패 에러 객체. 성공하면 nil.