[swift] Reachability를 사용해 특정 도메인이 차단된 경우 대응 방법

iOS 앱을 개발할 때, 네트워크 연결 상태를 확인하는 것은 중요한 요소입니다. 특히, 특정 도메인이 차단되어 사용자에게 제대로 된 서비스를 제공할 수 없는 경우가 있다면, 이를 감지하고 대응할 수 있어야 합니다.

이러한 상황에 대비하여 Reachability 라이브러리를 사용하는 방법을 알아보겠습니다.

1. Reachability 라이브러리 추가하기

먼저, Reachability 라이브러리를 프로젝트에 추가해야 합니다.

CocoaPods을 사용한다면 Podfile에 다음과 같이 추가합니다.

pod 'ReachabilitySwift'

그리고 터미널에서 pod install 명령어를 실행하여 라이브러리를 다운로드 받습니다.

CocoaPods을 사용하지 않는다면, GitHub 저장소에서 라이브러리를 다운로드 받고 프로젝트에 추가합니다.

2. Reachability 클래스를 이용해 네트워크 상태 감지하기

Reachability 라이브러리를 프로젝트에 추가했다면, 이제 해당 네트워크 상태를 감지하는 클래스를 작성해야 합니다.

import Foundation
import Reachability

class NetworkMonitor {
    
    let reachability = try! Reachability()
    
    init() {
        NotificationCenter.default.addObserver(self, selector: #selector(networkStatusChanged(_:)), name: .reachabilityChanged, object: nil)
        do {
            try reachability.startNotifier()
        } catch {
            print("Could not start reachability notifier")
        }
    }
    
    @objc func networkStatusChanged(_ notification: Notification) {
        if reachability.connection == .unavailable {
            // 특정 도메인이 차단된 경우의 처리 코드를 작성합니다.
            print("해당 도메인이 차단되었습니다.")
        }
    }
    
    deinit {
        reachability.stopNotifier()
        NotificationCenter.default.removeObserver(self)
    }
}

위의 코드는 Reachability 클래스를 이용해 네트워크 연결 상태를 감지하는 클래스입니다. NetworkMonitor라는 클래스를 생성하고 초기화하면, 해당 클래스는 네트워크 상태 변경을 감지합니다.

그리고, 네트워크 연결 상태가 변경될 때마다 networkStatusChanged 메서드가 호출되며, 여기에서는 특정 도메인이 차단된 경우의 처리 코드를 작성하면 됩니다.

3. NetworkMonitor 클래스 사용하기

이제 NetworkMonitor 클래스를 사용하여 네트워크 상태를 감지하고 특정 도메인이 차단된 경우에 대한 처리를 할 수 있습니다.

let networkMonitor = NetworkMonitor()

// 사용 예시
// 서비스에 사용되는 도메인이 차단되었는지 확인
if let url = URL(string: "https://blocked-domain.com") {
    let request = URLRequest(url: url)
    
    URLSession.shared.dataTask(with: request) { (data, response, error) in
        if let error = error {
            // 특정 도메인이 차단된 경우 처리 코드 작성
            print("네트워크 에러: \(error.localizedDescription)")
        } else {
            // 정상적인 응답 처리
            print("서비스에 접속 가능합니다.")
        }
    }.resume()
}

위의 예시 코드에서는 blocked-domain.com 이라는 도메인이 차단되었는지를 체크하는 코드입니다. URLSession을 사용하여 도메인에 접속하여 응답을 받아옵니다. 만약 도메인이 차단된 경우, 에러가 발생하게 되고 해당 에러 처리 코드를 작성하면 됩니다.

이제 네트워크 상태를 감지하고 특정 도메인이 차단되었는지 확인하는 방법을 알게 되었습니다. 이를 활용하여 사용자에게 안내 메시지를 표시하거나, 대안적인 서비스를 제공하는 등의 대응을 할 수 있습니다.

참고 문서: