[swift] Swift Moya에서 네트워크 상태 확인하기

Swift Moya는 네트워크 작업을 수행하기 위해 많이 사용되는 라이브러리입니다. 이 라이브러리를 사용하면 네트워킹 관련 작업을 간편하게 처리할 수 있고, 서버와의 통신 상태를 확인할 수 있습니다.

이번 글에서는 Swift Moya를 사용하여 네트워크 상태를 확인하는 방법에 대해 알아보겠습니다.

1. 네트워크 상태 관찰

Swift Moya는 네트워크 상태 관찰을 위한 기능을 제공합니다. 네트워크 작업 전후에 호출되는 NetworkActivityPlugin을 사용하여 네트워크 작업을 시작하고 끝나는 시점을 알 수 있습니다.

let provider = MoyaProvider<MyAPI>(plugins: [NetworkActivityPlugin { change, _ in
    switch change {
    case .began:
        UIApplication.shared.isNetworkActivityIndicatorVisible = true
    case .ended:
        UIApplication.shared.isNetworkActivityIndicatorVisible = false
    }
}])

위 코드에서 NetworkActivityPlugin으로 네트워크 상태를 관찰하고, 상태에 따라 UIApplication.shared.isNetworkActivityIndicatorVisible를 설정하여 네트워크 인디케이터를 표시하거나 감춥니다.

2. 연결 가능성 확인

네트워크 상태를 확인하기 위해 연결 가능성을 체크할 수도 있습니다. Reachability라이브러리를 사용하여 기기의 현재 연결 가능한 상태를 확인할 수 있습니다.

import Reachability

let reachability = try! Reachability()

reachability.whenReachable = { reachability in
    if reachability.connection == .wifi {
        print("WiFi에 연결되었습니다.")
    } else {
        print("셀룰러에 연결되었습니다.")
    }
}

reachability.whenUnreachable = { _ in
    print("연결이 끊겼습니다.")
}

do {
    try reachability.startNotifier()
} catch {
    print("네트워크 상태 확인 불가능")
}

위 코드에서는 Reachability를 초기화한 후, whenReachable 클로저와 whenUnreachable 클로저를 이용하여 연결 가능한 상태와 연결이 끊겼을 때의 상태를 처리합니다. 마지막으로 startNotifier()를 호출하여 연결 가능성을 모니터링합니다.

3. 네트워크 속도 측정

네트워크 연결 상태를 확인하는 또 다른 방법은 네트워크 속도를 측정하는 것입니다. 이를 위해 Speedtest.swift 라이브러리를 사용할 수 있습니다.

import Speedtest

let speedtest = Speedtest()

speedtest.on(.download) { speed in
    print("다운로드 속도: \(speed.prettyValue)")
}

speedtest.on(.upload) { speed in
    print("업로드 속도: \(speed.prettyValue)")
}

speedtest.start { result in
    switch result {
    case .success(let speeds):
        // 성공적으로 속도 측정을 완료함
    case .failure(let error):
        print("속도 측정 실패: \(error.localizedDescription)")
    }
}

위 코드에서는 Speedtest를 초기화하고 다운로드 및 업로드 속도를 측정하는 클로저를 설정합니다. start를 호출하여 속도 측정을 시작하고, 결과를 처리합니다.

결론

Swift Moya를 사용하여 네트워크 상태를 확인하는 방법에 대해 알아보았습니다. NetworkActivityPlugin을 사용하여 네트워크 상태를 관찰하고, Reachability 라이브러리를 이용하여 연결 가능성을 확인하며, Speedtest.swift 라이브러리를 사용하여 네트워크 속도를 측정할 수 있습니다.

더 자세한 내용은 Moya GitHub 페이지Speedtest.swift GitHub 페이지를 참고하세요.