앱을 개발할 때 서버와의 통신이 필요한 경우가 많습니다. 하지만 사용자의 인터넷 연결이 불안정하거나 서버의 문제로 인해 통신이 실패할 수 있습니다. 이러한 상황에서 효율적으로 서버와의 통신 가능 여부를 확인하기 위해 Reachability라는 도구를 사용할 수 있습니다.
Reachability란?
Reachability는 네트워크 연결 상태를 감지하고 알려주는 도우미 클래스입니다. iOS에서는 Reachability 클래스를 사용하여 현재 네트워크 연결 상태를 확인할 수 있습니다. Reachability는 Objective-C로 작성되어 있으며 Swift에서도 사용할 수 있도록 래핑된 라이브러리가 제공됩니다.
Reachability 라이브러리 가져오기
Reachability를 사용하기 위해서는 먼저 Reachability 클래스의 라이브러리를 가져와야 합니다. Cocoapods를 사용하거나 수동으로 라이브러리를 추가할 수 있습니다. Cocoapods를 사용한다면 Podfile
에 다음과 같이 추가합니다:
pod 'ReachabilitySwift'
라이브러리를 수동으로 추가한다면, ReachabilitySwift GitHub 저장소에서 최신 버전을 다운로드하고 프로젝트에 추가합니다.
Reachability 클래스 사용하기
Reachability 클래스를 사용하려면 다음과 같은 단계를 따르세요:
- Reachability 클래스를 import합니다:
import Reachability
- Reachability 인스턴스를 생성합니다:
let reachability = try! Reachability()
- 네트워크 연결 상태 변경을 감지하기 위한 옵저버를 등록합니다:
NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(note:)), name: .reachabilityChanged, object: reachability)
- Reachability를 시작합니다:
do {
try reachability.startNotifier()
} catch {
print("Could not start reachability notifier")
}
- 네트워크 연결 상태 변경 이벤트를 처리하기 위한 메소드를 추가합니다:
@objc func reachabilityChanged(note: Notification) {
let reachability = note.object as! Reachability
if reachability.connection != .unavailable {
// 서버와의 통신 가능
print("Server reachable")
} else {
// 서버와의 통신 불가능
print("Server unreachable")
}
}
Reachability 사용 예시
위에서 작성한 Reachability 클래스를 사용하여 서버와의 통신 가능 여부를 확인하는 예시를 보겠습니다:
import Reachability
class ViewController: UIViewController {
let reachability = try! Reachability()
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(note:)), name: .reachabilityChanged, object: reachability)
do {
try reachability.startNotifier()
} catch {
print("Could not start reachability notifier")
}
}
@objc func reachabilityChanged(note: Notification) {
let reachability = note.object as! Reachability
if reachability.connection != .unavailable {
// 서버와의 통신 가능
print("Server reachable")
} else {
// 서버와의 통신 불가능
print("Server unreachable")
}
}
}
위의 예시 코드는 앱이 시작될 때 Reachability를 시작하고, 네트워크 연결 상태가 변경될 때마다 reachabilityChanged 메소드가 호출되어 서버와의 통신 가능 여부를 확인합니다.