[swift] Swift Moya에서 에러 코드 확인하기

Swift Moya는 iOS 애플리케이션 개발을 위한 네트워킹 라이브러리로, 간편하고 유연한 네트워크 요청을 처리할 수 있습니다. 때로는 서버에서 반환되는 에러 코드를 확인해야 할 때가 있습니다. 이 게시물에서는 Swift Moya를 사용하여 에러 코드를 확인하는 방법에 대해 알아보겠습니다.

1. 네트워크 요청

첫 번째 단계는 Moya를 사용하여 서버에 네트워크 요청을 보내는 것입니다. Moya는 Alamofire를 기반으로 구축되었으므로, 네트워크 요청은 Alamofire와 유사한 방식으로 작성됩니다.

import Moya

let provider = MoyaProvider<YourAPI>()

// 네트워크 요청
provider.request(.yourEndpoint) { result in
    switch result {
    case let .success(response):
        // 성공
        // 에러 코드 확인은 이 후 작업에서 진행됩니다.
    case let .failure(error):
        // 실패
        print(error.localizedDescription)
    }
}

위의 예제에서 provider는 MoyaProvider로 초기화됩니다. YourAPI는 Moya의 타겟 타입입니다. ‘yourEndpoint’는 서버의 엔드포인트를 나타내며, 이 예제에서는 변경되어야 합니다. 네트워크 요청은 provider.request를 호출하여 수행됩니다. 요청이 성공하면 .success 케이스에 대한 스위치 문이 실행되고, 실패하면 .failure에 대한 스위치 문이 실행됩니다.

2. 에러 코드 확인

네트워크 요청이 성공하면, 서버에서 반환된 응답을 처리해야 합니다. 이때 응답의 에러 코드를 확인하여 적절한 작업을 수행할 수 있습니다.

provider.request(.yourEndpoint) { result in
    switch result {
    case let .success(response):
        do {
            // 응답을 디코딩하여 처리
        } catch {
            // 디코딩 오류 처리
        }

    case let .failure(error):
        // 에러 코드 확인
        if let moyaError = error as? MoyaError {
            switch moyaError {
            case .underlying(let error, _):
                // 기본 에러 처리
                print(error.localizedDescription)
                
            case .statusCode(let response):
                // 상태 코드 확인
                let statusCode = response.statusCode
                print("Status Code: \(statusCode)")
                
                // 상태 코드에 따른 추가 작업 수행
            }
        }
    }
}

네트워크 요청이 성공한 경우, 응답을 디코딩하여 적절한 작업을 수행할 수 있습니다. 디코딩이 실패하면 catch 블록에서 오류 처리를 할 수 있습니다.

네트워크 요청이 실패한 경우, .failure 케이스에 대한 스위치 문이 실행됩니다. 이 때 error 매개변수는 MoyaError 타입으로 캐스팅할 수 있습니다. MoyaError에는 .underlying.statusCode 등의 여러 케이스가 있습니다. .statusCode 케이스에서는 서버의 상태 코드를 확인할 수 있으며, 이를 기반으로 추가 작업을 수행할 수 있습니다.

이렇게 해서 Moya를 사용하여 에러 코드를 확인하는 방법에 대해 알아보았습니다. 이를 통해 네트워킹 과정에서 발생하는 에러를 더욱 잘 처리할 수 있을 것입니다.

참고 자료