[swift] Swift Moya에서 응답 처리하기

Moya는 iOS 앱 개발을 위한 네트워킹 라이브러리로, Alamofire를 기반으로 구현되었습니다. Moya를 사용하면 쉽게 API 요청을 보낼 수 있고 응답을 처리할 수 있습니다. 이번 포스트에서는 Swift Moya에서 응답을 처리하는 방법을 알아보겠습니다.

Moya 기본 설정

먼저 Moya를 설치하고 기본 설정을 해야 합니다. Moya는 CocoaPods 또는 Swift Package Manager를 통해 설치할 수 있습니다. 프로젝트의 Podfile에 다음과 같은 내용을 추가한 후, pod install을 실행합니다.

platform :ios, '10.0'
use_frameworks!

target 'MyApp' do
  pod 'Moya'
end

설치가 완료되면, 해당 파일을 열고 Moya를 import합니다.

import Moya

Provider 생성

Moya를 사용하기 위해서는 MoyaProvider를 생성해야 합니다. MoyaProvider는 요청을 처리하고 응답을 받는 객체입니다.

let provider = MoyaProvider<API>()

여기서 API는 Moya에서 사용할 서비스의 이름입니다. APIenum으로 정의되며, 각 case는 실제 API 엔드포인트에 대응됩니다.

응답 처리

Moya를 사용하면 응답을 처리하기 위해 provider.request 메서드를 사용합니다. 이 메서드는 API 요청에 대한 응답을 비동기적으로 받아옵니다.

provider.request(.getUser(id: 1)) { result in
    switch result {
    case let .success(response):
        // 성공적으로 응답을 받은 경우
        do {
            let user = try response.map(User.self)
            // 응답 데이터를 원하는 타입으로 매핑하여 사용합니다.
        } catch {
            // 응답 데이터를 매핑하는 도중 에러가 발생한 경우
            print("Error mapping response: \(error)")
        }
    case let .failure(error):
        // 응답을 받지 못한 경우
        print("Network error: \(error)")
    }
}

위의 예제에서는 서버로부터 사용자의 정보를 가져오는 API를 호출하는 getUser 케이스를 사용하였습니다. 응답이 성공적으로 왔을 경우, response.map 메서드를 사용하여 응답 데이터를 지정한 타입으로 매핑할 수 있습니다. 매핑하는 과정에서 에러가 발생하면 catch 블록이 실행됩니다.

에러 처리

Moya는 응답에 대한 에러 처리를 간편하게 할 수 있도록 지원합니다. 각각의 API 케이스에 대해 var validationType: ValidationType 프로퍼티를 설정할 수 있습니다.

enum API {
    case getUser(id: Int)

    var validationType: ValidationType {
        return .successCodes
    }

    // ...
}

위의 예제에서는 validationType.successCodes로 설정했습니다. 이 경우, 응답의 상태 코드가 200-299 사이인 경우에만 성공으로 간주됩니다. 특정 상태 코드에 대해서만 에러 처리를 하려면 switch 문을 사용하여 처리할 수 있습니다.

switch response.statusCode {
case 200..<300:
    // 성공 상태 코드
case 400..<500:
    // 클라이언트 에러
case 500..<600:
    // 서버 에러
default:
    // 그 외의 상태 코드
}

결론

이번 포스트에서는 Swift Moya에서 응답을 처리하는 방법에 대해 알아보았습니다. Moya는 간편한 네트워킹 처리를 제공하므로 iOS 앱 개발시 유용하게 사용할 수 있습니다. 추가로 Moya는 테스트, 취소 및 재시도 등의 기능을 지원하기도 하니, 자세한 내용을 공식 문서를 참고하시기 바랍니다.