CH 07. 날씨 앱 만들기
기능 상세:
- 도시 이름을 입력하면 현재 날씨 정보를 가져와 화면에 표시
- 도시 이름을 잘못 입력하면 서버로부터 응답받은 에러 메시지가 Alert으로 표시
활용 기술:
- Current Weather API
- https://openweathermap.org -> 계정생성 -> API 키발급 -> My API keys 확인
-
- Codable Protocol
- 자신을 변환하거나 외부 표현(json)으로 변환할 수 있는 Type
- Decodable: 자신을 외부 표현에서 디코딩 json -> WeatherInformation 객체
- Encodable: 자신을 외부 표현에서 인코딩 WeatherInformation 객체 -> json
- json 타입의 key와 사용자가 정의한 프로퍼티의 이름과 타입이 일치해야함!*
- 다를 경우 타입 내부에서 CodingKeys라는 String 타입의 열거형을 선언(CodingKey 프로토콜 준수)
Ex)enum CodingKeys: String, CodingKey{ case temp case feelsLike = “feels_like” case minTemp = “temp_min” case maxTemp = “temp_max” }
- https://openweathermap.org -> 계정생성 -> API 키발급 -> My API keys 확인
- URLSession
- 특정한 url을 이용하여 데이터를 다운로드하고 업로드하기 위한 API
- 앱에서 서버와 통신하기 위해 제공하는 API
- 앱은 하나 이상의 URLSession 인스턴스를 생성하며 각 인스턴스는 관련 데이터 전송 작업 그룹을 조정함
예) 웹브라우저를 만드는 경우 앱은 탭 또는 창 당 하나의 세션을 만들 수 있음 각 세션 내에서 앱은 특정 url에 대한 요청을 나타내는 일련의 작업을 추가함 - Request: 서버로 요청을 보낼 때 어떤 http 메소드를 사용할 것인지, 캐싱 정책을 어떻게 할 것인지 설정
- Response: url 요청의 응답을 나타내는 객체
-
- URLSessionConfiguration
- URLSession 생성 timeout값, 캐싱정책과 추가적인 http 헤더와 같은 세션 프로퍼티를 구성
- 공유 세션(Shared Session) URLSession.shared()
싱글톤사용, 기본요청을 하기위함, 맞춤 설정x, 쉽게 만듬 - 기본 세션(Default Session) URLSesson(configuration: .default)
공유 세션과 유사, 직접 원하는 설정, 캐시와 쿠키 등을 디스크에 저장, 순차적으로 데이터를 처리하기 위해 delegate 지정가능 - 임시 세션(Ephemeral Session) URLSession(configuration: .ephemeral)
공유세션과 유사, 캐시 쿠키, 사용자 인증정보 등을 디스크에 저장x, 메모리에 올려서 세션을 연결, 세션 만료시 데이터가 사라짐 - 백그라운드 세션(Background Session) URLSession(configuration: .background)
앱이 실행되지 않는 동안 백그라운드에서 컨텐츠 업로드및 다운로드 수행
-
- URLSessionTask
- URLSession내 한개 이상 생성 가능, 실제 서버와 통신
- URLSessionDataTask
데이터 객체를 사용하여 데이터를 요청하고 응답, 주로 짧고 빈번하게 요청하는 경우 사용 - URLSessionUploadTask
데이터 객체 또는 파일 형태의 데이터를 업로드 하는 작업을 수행, 앱이 실행되지 않았을 때 background 업로드를 지원 - URLSessionDownloadTask
데이터를 다운로드 받아서 파일의 형태로 저장하는 작업을 수행 앱이 실행중이지 않을 때는 background 다운로드를 지원 - URLSessionStreamTask
TCP/IP 연결을 생성할 때 사용 - URLSessionWebSocketTask
웹소켓 프로토콜 표준을 통해 통신
- URLSession Life Cycle
1. Session Configuration을 결정하고, Session을 생성
2. 통신할 URL과 Request 객체를 설정
3. 사용할 Task를 결정하고 그에 맞는 Completion Handler 나 Delegate 메소드들을 작성
4. 해당 Task를 실행
5. Task 완료 후 Completion Handler 클로저가 호출이 됨
웹통신
인터넷 상에서의 통신
- Protocol
- SMTP Protocol: 메일을 주고받을 때
- FTP Protocol: 파일 전송
- HTTP Protocol: 브라우저와 웹 서버와 통신
- HTTP(Hyper Text Transfer Protocol)
- Hyper Text를 전송하기 위한 프로토콜
- html 문서를 주고 받는데 사용
- 요청(request)과 응답(response)으로 구성
- 서버와 클라이언트가 연결되어있지 않음 - 응답 후 연결 종료
- HTTP 패킷
Header - 보내는 사람, 받는 사람의 주소, 패킷의 생명 시간
Body - 전하고자 하는 실제 내용 - HTTP Method
- GET: 클라이언트가 서버에 리소스를 요청할 때 사용(정보를 받아올때)
- POST: 클라이언트가 서버의 리소스를 새로 만들 때 사용(로그인, 게시글 업로드)
- PUT: 클라이언트가 서버의 리소스를 전체 수정할 때 사용(회원 정보 전체 수정)
- PATCH: 클라이언트가 서버의 리소스를 일부 수정할 때 사용(회원 정보 일부 수정)
- DELETE: 클라이언트가 서버의 리소스를 삭제할 때 사용
- HEAD: 클라이언트가 서버의 정상 작동 여부를 확인 할 때 사용
- OPTIONS: 클라이언트가 서버에서 해당 URL이 어떤 메소드를 지원하는지 확인할 때 사용
- CONNECT: 클라이언트가 프록시를 통하여 서버와 SSL 통신을 하고자 할 때 사용
- TRACE: 클라이언트와 서버간 통신 관리 및 디버깅을 할 때 사용
- HTTP Status
- 100번대 Informational: 요청 정보를 처리중
- 200번대 Success: 요청을 정상적으로 처리함
- 300번대 Redirection: 요청을 완료하기 위해 추가 동작 필요
- 400번대 Client Error: 서버가 요청을 이해하지 못함
- 500번대 Server Error: 서버가 요청 처리 실패함
추가할 기술:
- 한글 변환
- 이미지 추가