본문 바로가기
Swift

[iOS] About Alamofire

by dsungc 2024. 6. 23.

Alamofire?

iOS 및 macOS 애플리케이션에서 네트워크 요청을 간편하게 처리할 수 있도록 도와주는 HTTP 네트워킹 라이브러리입니다.

Apple의 기본 네트워킹 프레임워크인 URLSession을 기반으로, 더 쉽게 네트워킹 작업을 처리할 수 있도록 다양한 기능을 제공합니다.

RESTful API와의 통신, 파일 업로드/다운로드, JSON 데이터 처리 등과 같은 네트워킹 작업을 간결하고 직관적으로 구현할 수 있습니다.

 

그렇다면 Alamofire는 어떻게 사용할지 알아보도록 하겠습니다.

AF.requset() ....  형태를 기본적으로 갖고있는데요.. 요 request부분을 자세히 확인해보면

 

기본적으로 네트워크 통신을 하기 위해 필요한 요소들을 확인해볼 수 있습니다. 

 

옵셔널 처리가 돼있는 요소도 있고, 필수적으로 들어가야하는 요소들도 확인해볼 수 있습니다.

 

하나씩 살펴보면

  • url : 요청할 URL
  • method : 요청 형식 - get(기본값), post, put, delete, patch 등
  • parameters : 요청 시 같이 보낼 파라미터
  • encoding
    • URLEncoding
      • Get 요청과 같이, URL에 파라미터를 추가하는 경우에 주로 사용
    • JSONEncoding
      • Post 요청과 깉이, 파라미터를 JSON 형식으로 변환하여 서버에 전송하는 경우 사용
  • header
    • [String : String] 형태로 가능
    • 위의 문서만 보면 알 수 없지만 문서를 타고타고 들어가보면 name, value라는 string으로 구성

 

 

이를 바탕으로 날씨를 받아오는 네트워크 메서드를 구현했는데요

 func callWeather(lat: Double, lon: Double, completionHandler: @escaping (Weather) -> Void) {
        let url = "https://api.openweathermap.org/data/2.5/weather?"
        let param: Parameters = [
            "APIKey" : APIKey.key,
            "lat" : "\(lat)",
            "lon" : "\(lon)",
            "units" : "metric",
            "lang" : "kr"
        ]
        AF.request(url, parameters: param, encoding: URLEncoding.default).responseDecodable(of: Weather.self) { response in
            switch response.result {
            case .success(let value):
                completionHandler(value)
            case .failure(let error):
                print(error)
            }
        }
    }

 

이전에 사용하던 URLSession 코드에 비해  훨씬 더 간결한 것 같아요 👍👍

 

+

기본적으로 Alomofire는 비동기이기 때문에 서버로부터 응답을 다 받을때까지 기다리는 것이 아니라 콜백을 통해 응답을 처리해줍니다.

그렇기에 @escaping을 활용해 Weather라는 데이터를 탈출 시켜주고 있습니다.

 

또한 Weather라는 데이터를 살펴보면 


struct CloudsInfo: Decodable {
    let all: Int
}

struct WindInfo: Decodable {
    let speed: Double
    let deg: Int
}

struct WeatherInfo: Decodable {
    let temp, feels_like, temp_min, temp_max : Double
    let pressure, humidity: Int
    
}

struct TodayWeather: Decodable {
    let id: Int
    let main, description, icon: String
}
struct Coord: Decodable {
    let lon, lat: Double
}

struct Weather: Decodable {
    let coord: Coord
    let weather : [TodayWeather]
    let base: String
    let main: WeatherInfo
    let visibility: Int
    let wind: WindInfo
    let clouds: CloudsInfo
    let dt: Int
    let name: String
}

 

다음과 같은 형태로 구성되어 있습니다. 

 

여기서 Decodable은 디코딩(데이터를 읽는 과정)만을 담당합니다. 서버에서 받은 JSON을 Swift모델로 변환해주는 것이죠.

반대로 사용자의 데이터를 서버로 전송할 때는 Encodable을 사용하면 됩니다.

그런데 보통 사용할 때는 이 두가지 역할을 모두 하는 Codable 이라는 프로토콜을 사용하더라구요!

 

마지막의 데이터 모델과 관련된 프로토콜은 URLSession에서도 사용되기 때문에 잘 알고 구분하면 좋을 것 같습니다.

그럼 여기까지 Alamofire의 기본적인 형태 + 사용할 속성에 대해서 간단하게 풀어보았습니다~~

 

.

.

.

.

'Swift' 카테고리의 다른 글

[iOS] About 싱글턴 패턴  (0) 2024.06.29
[iOS] About Router pattern  (0) 2024.06.27
[iOS] About URLSession - 2  (0) 2024.06.19
[iOS] About URLSession - 1  (0) 2024.06.12
[iOS] About App SandBox  (0) 2024.05.20