[swift] Moya와 ObjectMapper를 사용하여 API 호출 후 데이터 매핑하는 프로세스 이해하기

소개

이번 포스트에서는 Swift에서 네트워크 호출 및 데이터 매핑을 간편하게 처리할 수 있는 Moya와 ObjectMapper의 사용법에 대해 알아보겠습니다. Moya는 Alamofire 기반의 네트워킹 라이브러리이며, ObjectMapper는 JSON 데이터를 모델 객체로 매핑해주는 라이브러리입니다.

Moya 설치하기

Moya를 사용하기 위해서는 먼저 프로젝트에 Moya를 추가해야 합니다. Cocoapods를 사용하는 경우, Podfile에 다음과 같이 Moya를 추가합니다.

pod 'Moya'

그리고 터미널에서 pod install 명령어를 실행하여 Moya를 설치합니다.

ObjectMapper 설치하기

ObjectMapper 또한 Cocoapods를 사용하여 설치할 수 있습니다. Podfile에 다음과 같이 ObjectMapper를 추가합니다.

pod 'ObjectMapper'

터미널에서 다시 pod install 명령어를 실행하여 ObjectMapper를 설치합니다.

MoyaProvider 설정하기

먼저 MoyaProvider를 설정해야 합니다. MoyaProvider는 Moya로부터 API 호출을 처리하는 역할을 합니다. 다음은 MoyaProvider를 생성하는 예시 코드입니다.

import Moya

let provider = MoyaProvider<SomeAPI>()

SomeAPI는 서버 API의 endpoint와 관련된 정보를 제공하는 enum입니다. MoyaProvider 생성 시에는 해당 API enum을 generic으로 전달해야 합니다.

모델 객체 정의하기

다음으로는 API 결과 데이터를 매핑할 모델 객체를 정의합니다. ObjectMapper를 사용하여 JSON 데이터를 모델 객체로 변환합니다. 예를 들어, 다음과 같이 모델 객체를 정의할 수 있습니다.

import ObjectMapper

struct User: Mappable {
    var name: String?
    var age: Int?
    
    init?(map: Map) {}
    
    mutating func mapping(map: Map) {
        name <- map["name"]
        age <- map["age"]
    }
}

위의 User 구조체는 Mappable 프로토콜을 준수하며, nameage 프로퍼티를 가지고 있습니다. mapping 함수를 통해 JSON 데이터의 키와 프로퍼티를 매핑합니다.

API 호출하기

이제 API를 호출하고 데이터를 매핑하는 과정을 살펴보겠습니다. MoyaProvider를 사용하여 API를 호출하고, 응답을 처리하는 클로저를 정의합니다. 응답 데이터를 ObjectMapper를 사용하여 모델 객체로 변환하고, 필요한 작업을 수행합니다.

provider.request(.getUser(id: 1)) { result in
    switch result {
    case let .success(response):
        do {
            let json = try response.mapJSON() as? [String: Any]
            
            if let user = Mapper<User>().map(JSON: json) {
                // 데이터 매핑 성공
                print("이름: \(user.name ?? ""), 나이: \(user.age ?? 0)")
            } else {
                // 데이터 매핑 실패
                print("데이터 매핑에 실패하였습니다.")
            }
            
        } catch {
            // JSON 매핑 실패
            print("JSON 매핑에 실패하였습니다.")
        }
        
    case let .failure(error):
        // API 호출 실패
        print("API 호출에 실패하였습니다. 에러: \(error.localizedDescription)")
    }
}

위의 예시 코드에서는 .getUser(id: 1) 형태로 API 호출을 수행하고, 응답 데이터를 JSON으로 매핑한 다음 ObjectMapper를 사용하여 User 객체로 변환합니다. 변환 성공 시에는 유저의 이름과 나이를 출력하고, 변환 실패 시에는 실패 메시지를 출력합니다.

결론

Moya와 ObjectMapper를 함께 사용하여 API 호출 후 데이터 매핑을 쉽게 처리할 수 있습니다. Moya는 네트워크 호출을 추상화하고, ObjectMapper는 JSON 데이터를 모델 객체로 변환해주는 강력한 도구입니다. 이를 통해 Swift 애플리케이션의 개발 생산성과 유지보수성을 향상시킬 수 있습니다.

참고자료