[swift] Reachability를 사용해 서버 연결 가능 여부 확인하기

안녕하세요! 이번에는 Swift에서 Reachability를 사용하여 서버 연결 가능 여부를 확인하는 방법에 대해 알아보겠습니다. Reachability는 iOS 디바이스의 네트워크 연결 상태를 확인할 수 있는 유용한 라이브러리입니다.

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

먼저, Reachability 라이브러리를 프로젝트에 추가해야 합니다. Reachability는 다양한 방법으로 설치할 수 있지만, 가장 쉬운 방법은 CocoaPods을 사용하는 것입니다. Podfile에 다음과 같이 Reachability를 추가해주세요.

pod 'ReachabilitySwift'

그리고 터미널에서 pod install 명령어를 실행하여 Reachability를 설치합니다.

2. Reachability 클래스 사용하기

Reachability 라이브러리를 추가한 후, Reachability를 사용하여 서버의 연결 가능 여부를 확인하는 코드를 작성해보겠습니다.

import Reachability

class NetworkManager {
    static let shared = NetworkManager()
    
    var reachability = try? Reachability()
    
    private init() {
        startMonitoring()
    }
    
    func startMonitoring() {
        NotificationCenter.default.addObserver(self, selector: #selector(networkStatusChanged), name: .reachabilityChanged, object: nil)
        do {
            try reachability?.startNotifier()
        } catch {
            print("Failed to start reachability notifier")
        }
    }
    
    @objc func networkStatusChanged() {
        if reachability?.connection != .none {
            print("인터넷 연결 가능")
        } else {
            print("인터넷 연결 불가능")
        }
    }
}

위의 코드에서는 NetworkManager 클래스를 생성하여 Reachability 라이브러리를 사용합니다. Singleton 디자인 패턴을 사용하여 객체를 하나만 생성하고, startMonitoring() 함수를 호출하여 네트워크 상태 변경을 감지합니다. networkStatusChanged() 함수에서는 현재 연결 상태에 따라 메시지를 출력합니다.

3. 서버 연결 가능 여부 확인하기

이제, 서버의 연결 가능 여부를 확인하는 방법을 알아보겠습니다. 예를 들어, 서버의 주소가 “https://www.example.com” 이라고 가정해보겠습니다.

let urlString = "https://www.example.com"

if let url = URL(string: urlString) {
    let request = URLRequest(url: url)
    let session = URLSession.shared
    
    let task = session.dataTask(with: request) { (data, response, error) in
        if let _ = data, let _ = response as? HTTPURLResponse, error == nil {
            print("서버 연결 가능")
        } else {
            print("서버 연결 불가능")
        }
    }
    
    task.resume()
}

위의 코드에서는 URLSession.shared.dataTask(with:completionHandler:) 메서드를 사용하여 서버와의 연결을 시도하고, 성공적인 응답을 받으면 “서버 연결 가능” 메시지를 출력합니다. 그렇지 않은 경우에는 “서버 연결 불가능” 메시지가 출력됩니다.

마지막으로, NetworkManager.shared.networkStatusChanged() 메서드를 호출하여 현재 디바이스의 네트워크 상태를 확인할 수 있습니다.

결론

Swift에서 Reachability를 사용하여 서버의 연결 가능 여부를 확인하는 방법을 알아보았습니다. Reachability를 사용하면 앱에서 네트워크 상태에 따른 적절한 처리를 할 수 있습니다.

더 자세한 내용은 Reachability GitHub 페이지를 참고해주세요.