CH 07. 날씨 앱 만들기

2 분 소요

Simulator Screen Shot - iPhone 11 Pro - 2022-04-12 at 11 32 59 Simulator Screen Shot - iPhone 11 Pro - 2022-04-12 at 11 32 51 Simulator Screen Shot - iPhone 11 Pro - 2022-04-12 at 11 32 01

기능 상세:
  • 도시 이름을 입력하면 현재 날씨 정보를 가져와 화면에 표시
  • 도시 이름을 잘못 입력하면 서버로부터 응답받은 에러 메시지가 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”
          }
        
  • 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: 서버가 요청 처리 실패함
추가할 기술:
  • 한글 변환
  • 이미지 추가

카테고리:

업데이트: