[swift] Swift Moya에서 네트워크 품질 체크하기

Moya는 Swift에서 네트워크 작업을 쉽게 처리할 수 있도록 도와주는 라이브러리입니다. 이번에는 Moya를 사용하여 네트워크 품질 체크를 하는 방법에 대해 알아보겠습니다.

1. 네트워크 품질 체크란?

네트워크 품질 체크란 사용자의 디바이스가 인터넷에 연결되어 있는 상태를 확인하는 것을 말합니다. 이는 사용자에게 안정적인 서비스를 제공하기 위해 중요한 요소입니다.

2. Reachability 라이브러리 설치하기

먼저, 네트워크 상태를 체크하기 위해 Reachability라는 라이브러리를 설치해야 합니다. Reachability는 네트워크 연결 상태를 모니터링할 수 있는 라이브러리로, Moya와 함께 사용할 수 있습니다.

Reachability를 프로젝트에 추가하는 가장 쉬운 방법은 CocoaPods를 사용하는 것입니다. Podfile에 다음과 같은 내용을 추가하고 pod install 명령을 실행하세요.

pod 'ReachabilitySwift'

3. Reachability를 활용하여 네트워크 체크하기

Reachability를 이용하여 네트워크 연결 상태를 체크하는 방법은 다음과 같습니다.

import Reachability

class NetworkManager {
    static let shared = NetworkManager()
    let reachability = try! Reachability()

    func startMonitoring() {
        NotificationCenter.default.addObserver(self, selector: #selector(networkStatusChanged(_:)), name: .reachabilityChanged, object: reachability)
        do {
            try reachability.startNotifier()
        } catch {
            print("Could not start reachability notifier")
        }
    }

    @objc func networkStatusChanged(_ notification: Notification) {
        let reachability = notification.object as! Reachability

        switch reachability.connection {
        case .wifi:
            print("WiFi 연결됨")
        case .cellular:
            print("모바일 데이터 연결됨")
        case .none:
            print("인터넷에 연결되지 않음")
        }
    }
}

NetworkManager는 싱글톤 객체로, startMonitoring() 메서드를 호출하여 네트워크 연결 상태를 모니터링합니다. networkStatusChanged(_:) 메서드는 네트워크 상태가 변경될 때 호출되며, 여기에서 연결된 네트워크 타입에 따라 적절한 동작을 수행합니다. 현재 연결 상태에 따라 적절한 알림이나 처리를 추가할 수 있습니다.

4. Moya에서 네트워크 품질 체크 활용하기

Moya는 네트워크 작업을 처리하기 위한 강력한 기능을 제공합니다. 네트워크 품질 체크를 활용하여 Moya의 요청에 다음과 같은 코드를 추가할 수 있습니다.

class APIProvider {
    let provider = MoyaProvider<MyAPI>()
    
    func performRequest(target: MyAPI, completion: @escaping (Result<Response, MoyaError>) -> Void) {
        if reachability.connection == .none {
            completion(.failure(.underlying(NetworkError.noConnection)))
            return
        }
        
        provider.request(target) { result in
            switch result {
            case .success(let response):
                completion(.success(response))
            case .failure(let error):
                completion(.failure(error))
            }
        }
    }
}

위의 코드에서 performRequest(target:completion:) 메서드에서 네트워크 연결 상태를 확인한 다음, 연결이 없을 경우 NetworkError.noConnection 에러를 반환합니다. 이를 통해 네트워크 품질에 따른 적절한 처리를 할 수 있습니다.

마무리

이제 Swift Moya와 Reachability를 활용하여 네트워크 품질 체크를 하는 방법에 대해 알아보았습니다. 안정적인 서비스 제공을 위해 네트워크 품질 체크를 적극 활용해 보세요!