URLSession(날씨앱)
날씨앱 만들기
활용 기술
- Current Weather API
- URLSession → HTTp 통신
웹 통신과 Protocol
웹 통신에서 주로 HTTP 프로토콜을 사용한다. (요청과 응답으로 이루어진다)
계속 연결되지 않고 응답후에 연결을 종료한다.
header와 body로 패킷이 구성된다.
HTTP 메서드에 따라 다르게 동작한다.
- GET :서버에 리소스를 요청할때
- POST : 서버의 리소스를 생성할때
- PUT : 서버의 리소스 전체 수정할때
- PATCH: 서버의 리소스 일부를 수정할때
- DELETE : 서버의 리소스를 삭제할때
- HEAD : 서버의 정상 작동 여부를 확인할때
- OPTIONS : 클라이언트가 서버에서 해당 URL 이 어떤 메소드를 지워하는지 확인 할 때
- CONNECT: 클라이언트가 프록시를 통하여 서버와 SSL 통신을 하고자 할때 사용
- TRACE : 클라이언트와 서버간 통신 관리 및 디버깅을 할 때 사용
URLSession
특정한 Url을 이용하여 데이터를 다운로드하고 업로드하기 위한 API
- URLSeesionConfiguration - 인터턴스 생성
- URLSessionTask - 인스턴스
- Shared Session URLSession.shared() 공유 세션 싱글톤으로 사용 가능.
- 맞춤 설정 x
- 기본세션 DafultSession, URLSession(configuration: .default),
- 직접 캐시와 쿠기 인증등을 저장하고 설정할 수 있다.
- 순차적으로 데이터를 처리하기 위해 delegate를 지정할 수 있다.
- 임시 세션 (Ephemeral Session) URLSession(configuration: .ephemeral)
- 캐시 쿠기 사용자 정보 같은 정보를 디스크에 저장하지 않는다.
- 메모리에 올려서 연결
- 백그라운드 세션 (Background Session) URLSession(configuration: .background)
- 앱이 실행되지 않는 동안 백그라운드에서 실행
→ URLSeesionTask 이용하여 각 세션에서 작업을 추가할 수 있다.
- URLSessionDataTask
- URLSessionUploadTask
- URLSessionDownloadTask
- URLSessionStreamTask
- URLSessionWebSocketTask
라이프 사이클
- Session Configuration을 결정하고, Session을 생성
- 통신할 URL과 Request 객체를 설정
- 사용할 Task를 결정하고 그에 맞는 Compeletion Handler나 Delegate 메소드를 작성
- 해당 Task를 실행
- Task 완료 후 Compeletion Handler 클로저가 호출됨.
기타
- Codable 자신을 변환하거나 외부타입으로 변환활수 있는 프로토콜, 외부타입 → JSON 과 같은 형태
- 채택하면 decode incode 모두 가능하다. json.parse json.stringfy 와 비슷한 것
- 네트워크 작업은 main 쓰레드에서 동작하지 않으므로 네트워크 작업을 완료한 후에 결과를 띄우기 위해서 main 쓰레드에서 추가적인 작업을 해주어야 한다.
1 | DispatchQueue.main.async { |