[swift] Swift Moya에서 에러 처리하기

Moya는 Swift에서 네트워크 작업을 쉽게 처리할 수 있도록 도와주는 라이브러리입니다. 그러나 네트워크 요청을 보낼 때 에러가 발생할 수 있습니다. 이번 포스트에서는 Moya에서 발생하는 에러를 처리하는 방법에 대해 알아보겠습니다.

1. Moya 에러 타입

Moya는 네트워크 요청에 대한 여러 가지 에러 타입을 제공합니다. 주요한 에러 타입은 다음과 같습니다:

2. 에러 처리하기

Moya에서 발생하는 에러를 처리하기 위해서는 여러 가지 방법이 있습니다. 아래는 그 중에서 몇 가지 방법을 소개하겠습니다.

2.1. 기본적인 에러 처리

Moya의 네트워크 요청 결과는 Result 타입으로 반환됩니다. 이를 이용하여 에러를 처리할 수 있습니다.

provider.request(.getUser(userId: 1)) { (result) in
    switch result {
    case let .success(response):
        // 성공적인 응답 처리
        // ...
    case let .failure(error):
        // 에러 처리
        if let moyaError = error as? MoyaError {
            // Moya 에러 처리
            switch moyaError {
            case .statusCode(let response):
                // HTTP 에러 상태 코드 처리
                let statusCode = response.statusCode
                // ...
            case .underlying(let nsError as NSError, _):
                // Alamofire 에러 처리
                let errorCode = nsError.code
                let errorDescription = nsError.localizedDescription
                // ...
            default:
                // 그 외의 Moya 에러 처리
                // ...
            }
        } else {
            // 그 외의 일반적인 에러 처리
            // ...
        }
    }
}

위 예제에서는 provider.request() 메서드를 통해 네트워크 요청을 보냅니다. resultResult<Response, MoyaError> 타입입니다. 성공적인 응답일 경우 success 케이스로 처리하고, 에러일 경우 failure 케이스로 처리합니다.

2.2. 에러 핸들러 등록

Moya에서는 EndpointClosure를 사용하여 에러 핸들러를 등록할 수 있습니다. 이를 통해 에러가 발생했을 때 원하는 동작을 수행할 수 있습니다.

let endpointClosure = { (target: YourTargetType) -> Endpoint in
    let defaultEndpoint = MoyaProvider.defaultEndpointMapping(for: target)
    return defaultEndpoint.adding(newHTTPHeaderFields: ["Authorization": "Bearer YOUR_ACCESS_TOKEN"])
}

let provider = MoyaProvider<YourTargetType>(endpointClosure: endpointClosure, onError: { (error) in
    // 에러 핸들러
    if let moyaError = error as? MoyaError {
        // Moya 에러 처리
        // ...
    } else {
        // 그 외의 일반적인 에러 처리
        // ...
    }
})

위 예제에서는 endpointClosure를 통해 네트워크 요청마다 새로운 헤더 필드를 추가하는 작업을 수행하고, onError 클로저를 통해 에러 핸들러를 등록합니다.

3. 참고 자료

이번 포스트에서는 Swift Moya에서 에러 처리하는 방법에 대해 알아보았습니다. Moya를 사용하면 네트워크 요청에 대한 에러를 손쉽게 처리할 수 있으며, 코드의 가독성을 향상시킬 수 있습니다. 더 자세한 내용은 Moya 공식 문서를 참고하시기 바랍니다.