[swift] Reachability를 사용해 네트워크 연결 상태가 변경되는 경우 로그인 처리하기

앱 개발에서 네트워크 연결 상태를 감지하고 이에 대한 적절한 대응을 하는 것은 매우 중요합니다. 특히 로그인 기능을 가진 앱에서는 사용자가 인터넷에 연결되어 있는지 확인한 후에 로그인 처리를 진행해야 합니다. 이를 위해 Apple은 Reachability라는 클래스를 제공하고 있으며, 이를 사용하여 네트워크 연결 상태를 감지하고 처리할 수 있습니다.

Reachability 클래스 사용하기

먼저 Reachability 클래스를 사용하기 위해 SystemConfiguration 프레임워크를 프로젝트에 추가해야 합니다. 프레임워크를 추가하는 방법은 다음과 같습니다:

  1. Xcode에서 프로젝트를 선택한 후, 타겟을 선택합니다.
  2. “Build Phases” 탭을 선택한 후, “Link Binary With Libraries” 섹션을 찾습니다.
  3. ”+” 버튼을 클릭하고 “SystemConfiguration.framework”를 추가합니다.

Reachability 클래스는 네트워크 연결 상태를 모니터링하고 변경 사항을 관찰하는 기능을 제공합니다. 다음은 Reachability 클래스를 사용하여 네트워크 연결 상태의 변경을 감지하고 로그인 처리를 하는 예제 코드입니다.

예제 코드:

import SystemConfiguration

class NetworkManager {
    static let shared = NetworkManager()
    
    private let reachability = SCNetworkReachabilityCreateWithName(nil, "www.google.com")!
    
    private init() {
        // Reachability 변경 사항을 감지하는 옵저버 등록
        SCNetworkReachabilitySetCallback(reachability, { (_, flags, _) in
            if flags.contains(.reachable) {
                // 네트워크가 연결된 경우, 로그인 처리
                self.login()
            } else {
                // 네트워크가 연결되지 않은 경우, 로그아웃 처리
                self.logout()
            }
        }, nil)
        
        SCNetworkReachabilityScheduleWithRunLoop(reachability, CFRunLoopGetCurrent(), CFRunLoopMode.commonModes)
    }
    
    deinit {
        SCNetworkReachabilityUnscheduleFromRunLoop(reachability, CFRunLoopGetCurrent(), CFRunLoopMode.commonModes)
    }
    
    private func login() {
        // 로그인 처리를 수행하는 로직 작성
        print("로그인 처리 완료")
    }
    
    private func logout() {
        // 로그아웃 처리를 수행하는 로직 작성
        print("로그아웃 처리 완료")
    }
}

위의 예제 코드는 Singleton 디자인 패턴을 사용하여 NetworkManager 클래스를 구현한 것입니다. Singleton 패턴을 사용하면 어디서든 동일한 인스턴스에 접근할 수 있으므로, 네트워크 상태 변경을 모니터링하고 처리하기에 편리합니다.

실제로는 위의 예제에 로그인 처리 및 로그아웃 처리를 구현하는 로직을 추가해야 합니다. 이 예제 코드는 단순히 login()logout() 메소드를 호출하여 처리가 완료되었다고 가정합니다.

Reachability 활용하기

위의 예제에서는 www.google.com을 매개변수로 전달하여 Reachability 인스턴스를 생성했습니다. 이는 네트워크 상태를 www.google.com 서버의 연결 상태를 기준으로 판단하겠다는 의미입니다. reachability 변수의 값을 원하는 도메인 또는 IP 주소로 변경하여 사용할 수 있습니다.

또한, 네트워크 상태가 변경될 때마다 SCNetworkReachabilitySetCallback 클로저가 호출되며, 이를 통해 로그인 및 로그아웃 처리를 수행할 수 있습니다.

결론

이번 포스팅에서는 Swift에서 Reachability 클래스를 사용하여 네트워크 연결 상태의 변경을 감지하고, 해당 변경에 대한 로그인 처리를 하는 방법을 알아보았습니다. 네트워크 상태를 실시간으로 모니터링하고 적절히 대응할 수 있도록 Reachability를 활용해 보세요.

참고 자료