playhong16 / Study-Alamofire

Alamofire 라이브러리 사용해보기.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Alamorefire 공부하기

Alamorefire란?

Alamorefireswift로 만든 HTTP 네트워킹을 위한 라이브러리다.

URL Loading System

Alamorefire는 Apple의 Foundation 프레임워크에서 제공하는 URL Loading System을 기반으로 구현했다.

URL Loading System을 통해 HTTPS/HTTP와 같은 표준 프로토콜 또는 사용자가 정의한 프로토콜을 사용하여 URL과 상호 작용하고 서버와 통신할 수 있다.
로딩은 비동기식으로 수행되기 때문에 앱이 응답성을 유지하고 전달 받는 데이터나 오류를 도착과 동시에 처리할 수 있다.

웹 사이트의 데이터를 메모리로 가져오는 방법

웹 사이트의 URL을 통해 데이터를 가져오기 위해서는 URLSession 인스턴스를 사용하여 작업을 생성해야한다.
그리고 작업이 비교적 간단한 경우, URLSessionshared 속성에 접근하여 세션을 만들지 않고 사용할 수도 있다.

  • 서버와 작은 규모의 상호 작용의 경우 URLSessionDataTask 인스턴스를 생성하여 응답 데이터를 메모리로 수신하여 사용한다.
  • URLSessionDataTask는 웹 서비스의 EndPoint를 호출하는 등의 용도에 사용하기 적합하다.
  • 파일 시스템에 직접 데이터를 저장해야하는 경우, URLSessionDownloadTask 인스턴스를 사용한다.

URLSession

URLSession은 네트워킹 즉, 서버와 통신할 수 있도록 제공하는 객체다.

  • URLSession 인스턴스를 사용하여 하나 이상의 URLSessionTask 인스턴스를 생성한다.
  • URLSessionTask 인스턴스는 데이터를 앱으로 가져오거나 반환하기도 하며, 파일을 다운로드하고 데이터와 파일을 서버에 업로드할 수도 있다.
  • URLSession을 구성하려면 URLSessionConfiguration 객체를 사용하여 캐시와 쿠키 및 셀룰러 네트워크의 연결 허용 여부 등을 제어할 수 있다.
  • 하나의 세션을 반복적으로 사용해서 작업을 생성할 수 있다.

URLSessionTask

URLSessionTaskURLSession의 일부이며, 세션을 통해 수행할 작업이다.

  • URLSession 인스턴스의 dataTask(with:) 및 여러 메서드를 호출하여 URLSessionTask을 생성한다.
  • Data Task는 리소스를 요청하여 서버의 응답을 메모리에 있는 하나 이상의 NSData 객체로 반환한다.
  • 이것들은 기본(default), 임시(ephemeral), 공유(shared) 세션에서는 지원되지만 백그라운드(Background) 세션에서는 지원되지 않는다.

URLSession을 사용한 네트워크 통신 코드

1. URL 생성

서버의 URL을 생성한다.

let url = URL(String:"https://jsonplaceholder.typicode.com/posts")!

2. URLRequest 생성

URL을 사용하여 요청을 생성한다.

var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "GET"
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.setValue("application/json", forHTTPHeaderField: "Accept")

3. URLSession 생성

서버와 통신하기 위한 세션을 생성한다.

let session = URLSession.shared

4. URLSessionTask 생성

요청에 대한 작업을 생성한다.

let task = session.dataTask(with: urlRequest) { data, response, error in
    if let error = error {
        print(error)
        return
    }

    guard let httpResponse = response as? HTTPURLResponse,
        (200...299).contains(httpResponse.statusCode) else {
        print(error)
        return
    }

    print(String(decoding: safeData, as: UTF8.self))
}

// Task는 일시정지된 상태로 생성되기 때문에 실행해야한다.
task.resume()

About

Alamofire 라이브러리 사용해보기.