[swift] Reachability를 사용해 인터넷 연결 상태에 따른 백그라운드 작업 제어하기

앱은 사용자가 인터넷에 연결되어 있는 상태에서만 정상적으로 작동할 수 있습니다. 따라서, 앱이 백그라운드에서 실행 중인 경우에도 인터넷 연결 상태를 확인하고 작업을 제어해야 합니다. 이를 위해 Swift에서는 Reachability 라이브러리를 사용할 수 있습니다. Reachability는 네트워크 연결 상태를 모니터링하고, 해당 상태에 따라 알림을 보내는 기능을 제공합니다.

Reachability 라이브러리 설치하기

Reachability 라이브러리를 사용하기 위해서는 먼저 해당 라이브러리를 프로젝트에 추가해야 합니다. Reachability 라이브러리는 CocoaPods를 통해 간편하게 설치할 수 있습니다. 아래와 같이 Podfile에 Reachability를 추가하고, pod install 명령어를 실행합니다.

pod 'ReachabilitySwift'

Reachability 사용하기

Reachability를 사용하기 위해 먼저 ReachabilitySwift를 import 해야 합니다. 아래 코드 예시에서는 AppDelegate에 Reachability 이벤트 핸들링을 구현하도록 하겠습니다.

import UIKit
import ReachabilitySwift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    let reachability = Reachability()!

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged), name: .reachabilityChanged, object: reachability)

        do {
            try reachability.startNotifier()
        } catch {
            print("Could not start reachability notifier")
        }
        
        return true
    }
    
    @objc private func reachabilityChanged(note: Notification) {
        let reachability = note.object as! Reachability
        
        if reachability.isReachable {
            print("인터넷 연결됨")
            // 인터넷 연결 상태에 따라 백그라운드 작업 진행
        } else {
            print("인터넷 연결 끊김")
            // 인터넷 연결이 끊겼을 때, 작업을 중단하거나 오류 처리
        }
    }
    
}

위 예시에서는 AppDelegate의 didFinishLaunchingWithOptions 메서드에서 Reachability의 이벤트 핸들링을 등록하고, Reachability 객체의 startNotifier 메서드를 호출하여 네트워크 모니터링을 시작합니다. 그리고 reachabilityChanged 메서드에서 네트워크 연결 상태가 변경될 때마다 동작할 로직을 구현할 수 있습니다.

이제 Reachability를 사용하여 인터넷 연결 상태에 따라 앱의 백그라운드 작업을 제어할 수 있게 되었습니다.

참고 자료

여기서는 Swift로 Reachability를 사용한 예시 코드를 제공했지만, Objective-C나 다른 프로그래밍 언어에도 Reachability 라이브러리가 존재합니다. 따라서 해당 언어에 맞게 Reachability 라이브러리를 검색하여 사용하면 됩니다.