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

라이프 사이클

  1. Session Configuration을 결정하고, Session을 생성
  2. 통신할 URL과 Request 객체를 설정
  3. 사용할 Task를 결정하고 그에 맞는 Compeletion Handler나 Delegate 메소드를 작성
  4. 해당 Task를 실행
  5. Task 완료 후 Compeletion Handler 클로저가 호출됨.

기타

  • Codable 자신을 변환하거나 외부타입으로 변환활수 있는 프로토콜, 외부타입 → JSON 과 같은 형태
    • 채택하면 decode incode 모두 가능하다. json.parse json.stringfy 와 비슷한 것
  • 네트워크 작업은 main 쓰레드에서 동작하지 않으므로 네트워크 작업을 완료한 후에 결과를 띄우기 위해서 main 쓰레드에서 추가적인 작업을 해주어야 한다.
1
2
3
4
DispatchQueue.main.async {
self?.weatherStackView.isHidden = false
self?.configureView(weatherInfomation: weatherInformation)
}