[swift] Reachability를 사용해 네트워크 에러 핸들링을 위한 다이얼로그 표시하기

소개

네트워크 연결을 확인하고 네트워크 에러를 핸들링하는 것은 모바일 앱 개발에서 중요한 부분입니다. Apple의 Reachability 라이브러리를 사용하면 이를 간편하게 처리할 수 있습니다. 이 글에서는 Swift 언어를 사용하여 Reachability를 이용해 네트워크 에러를 감지하고, 에러 발생 시 다이얼로그를 표시하는 방법을 알아보겠습니다.

Reachability 라이브러리 설치하기

Reachability 라이브러리는 CocoaPods를 통해 설치할 수 있습니다. 프로젝트의 Podfile에 다음과 같이 추가합니다:

pod 'ReachabilitySwift'

그리고 터미널에서 프로젝트 폴더로 이동한 후 pod install 명령어를 실행하여 라이브러리를 설치합니다.

Reachability 설정하기

먼저 Reachability 객체를 생성하고, 해당 객체로 네트워크 연결 상태를 모니터링하기 위한 설정을 해야 합니다. 이를 위해 아래 코드를 AppDelegate.swift 파일에 추가합니다:

import Reachability

class AppDelegate: UIResponder, UIApplicationDelegate {

    var reachability: Reachability!

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        reachability = try! Reachability()

        // 네트워크 상태 변화를 감지하는 옵저버 등록
        NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(notification:)), name: .reachabilityChanged, object: reachability)
        
        do {
            // Reachability 객체 시작
            try reachability.startNotifier()
        } catch {
            print("Unable to start notifier")
        }
        
        return true
    }
    
    @objc func reachabilityChanged(notification: Notification) {
        let reachability = notification.object as! Reachability
        
        if reachability.connection != .unavailable {
            // 네트워크 연결이 가능한 상태
        } else {
            // 네트워크 연결이 불가능한 상태
        }
    }
}

네트워크 에러 다이얼로그 표시하기

네트워크 연결이 불가능한 상태일 때, 사용자에게 알리기 위해 에러 다이얼로그를 표시할 수 있습니다. 이를 위해 UIAlertController를 사용하겠습니다. 아래의 코드를 적절한 위치에 추가하여 네트워크 에러 발생 시 다이얼로그를 표시합니다:

func showNetworkErrorDialog() {
    let alertController = UIAlertController(title: "네트워크 연결 오류", message: "네트워크에 연결할 수 없습니다.", preferredStyle: .alert)
    alertController.addAction(UIAlertAction(title: "확인", style: .default, handler: nil))
    
    // 현재 화면 상단에 다이얼로그 표시
    UIApplication.shared.windows.first?.rootViewController?.present(alertController, animated: true, completion: nil)
}

@objc func reachabilityChanged(notification: Notification) {
    let reachability = notification.object as! Reachability
    
    if reachability.connection != .unavailable {
        // 네트워크 연결이 가능한 상태
    } else {
        // 네트워크 연결이 불가능한 상태
        showNetworkErrorDialog()
    }
}

이제 네트워크 연결 상태를 모니터링하고, 연결이 불가능할 때마다 에러 다이얼로그를 표시할 준비가 되었습니다.

결론

Reachability 라이브러리를 사용하여 네트워크 에러 핸들링을 간편하게 처리할 수 있습니다. 이를 통해 네트워크 연결 상태를 모니터링하고, 네트워크 에러 발생 시 사용자에게 알릴 수 있습니다. 추가적으로 필요한 기능을 추가하여 앱의 네트워크 에러 핸들링을 더욱 향상시킬 수 있습니다.