[swift] Reachability를 사용해 네트워크 상태 모니터링을 위한 독립적인 모듈 구현하기

목차

  1. Reachability란?
  2. Reachability 모듈 구현
  3. 네트워크 상태 모니터링
  4. 마무리

Reachability란?

네트워크 상태를 모니터링하는 것은 앱의 성능과 사용자 경험에 중요한 영향을 미칩니다. 사용자가 온라인 또는 오프라인인지 확인하여, 필요한 작업을 제한하거나 오류 메시지를 표시하는 등의 처리를 할 수 있습니다.

Reachability는 네트워크 연결 상태를 확인하기 위한 SDK로, Apple에서 제공하는 SystemConfiguration.framework에 포함되어 있습니다. Reachability를 사용하면 앱에서 인터넷 연결 상태를 감지하고, 연결 유형(와이파이, 셀룰러 등)을 확인할 수 있습니다.

Reachability 모듈 구현

간단한 Swift 모듈을 만들어서 Reachability를 활용할 수 있습니다. 먼저, Reachability 파일을 다운로드하고 프로젝트에 추가합니다.

  1. Reachability 파일 다운로드 링크

프로젝트에 Reachability.swift 파일이 추가되면, 다음과 같이 모듈을 구현할 수 있습니다.

import Reachability

class NetworkManager {
    static let shared = NetworkManager()
    
    private let reachability: Reachability!
    
    private init() {
        reachability = try! Reachability()
        
        NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged), name: .reachabilityChanged, object: reachability)
        try! reachability.startNotifier()
    }
    
    @objc private func reachabilityChanged(notification: Notification) {
        let reachability = notification.object as! Reachability
        if reachability.connection != .unavailable {
            // 네트워크 연결이 가능한 상태
        } else {
            // 네트워크 연결이 불가능한 상태
        }
    }
}

NetworkManager는 Singleton으로 구현되어 있으며, Reachability 객체를 사용하여 reachabilityChanged 메서드가 호출되면 네트워크 연결 상태를 확인하고 처리할 수 있습니다.

네트워크 상태 모니터링

Reachability 모듈을 사용하면, 앱의 어느 곳에서든지 네트워크 상태를 모니터링할 수 있습니다. 예를 들어, ViewController에서 네트워크 상태 변화에 따른 처리를 해보겠습니다.

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged), name: .reachabilityChanged, object: nil)
    }
    
    @objc func reachabilityChanged(notification: Notification) {
        let reachability = notification.object as! Reachability
        if reachability.connection != .unavailable {
            // 네트워크 연결 가능
            showAlert(with: "네트워크 연결 가능")
        } else {
            // 네트워크 연결 불가능
            showAlert(with: "네트워크 연결 불가능")
        }
    }
    
    func showAlert(with message: String) {
        let alert = UIAlertController(title: "네트워크 상태", message: message, preferredStyle: .alert)
        let okAction = UIAlertAction(title: "확인", style: .default, handler: nil)
        alert.addAction(okAction)
        present(alert, animated: true, completion: nil)
    }

}

ViewController에서 reachabilityChanged 메서드를 구현하고, NotificationCenter를 통해 Reachability의 변화를 감지합니다. 상태에 따라서 showAlert 메서드를 통해 알림창을 표시할 수 있습니다.

마무리

이번 포스트에서는 Reachability를 사용해 네트워크 상태를 모니터링하는 독립적인 모듈을 구현하는 방법에 대해 알아보았습니다. 네트워크 상태 모니터링은 사용자에게 편리한 서비스를 제공하고 앱의 성능을 향상시키는 데에 큰 도움이 됩니다.

더 자세한 내용은 Reachability GitHub 참고에서 확인할 수 있습니다.