네트워크 연결 검색

완료됨

모바일 디바이스는 Wi-Fi 및 셀룰러 기술을 사용하여 인터넷에 연결합니다. 이러한 종속성 때문에 사용자가 애플리케이션을 사용하는 동안 인터넷 연결이 끊어질 수 있습니다. 이 가능성을 방지하기 위해 코드를 추가하지 않으면, 앱이 응답을 중지하고 사용자에게 나쁜 환경을 제공할 수 있습니다.

이 단원에서는 사용자의 인터넷 연결이 끊기는 시기를 검색하여 애플리케이션을 보호합니다. REST 웹 서비스를 사용하기 시작하면 이 정보가 중요해집니다.

모바일 애플리케이션에서 네트워크 연결을 검색하는 이유는 무엇인가요?

모바일 디바이스에서는 인터넷 연결이 자주 끊어질 수 있으므로 모바일 애플리케이션에서 인터넷에 연결되었는지 검색하는 것이 중요합니다. 이는 네트워크 서비스 공급자의 커버리지가 좋지 않거나 터널, 깊은 계곡 또는 높은 산과 같이 수신이 제한되거나 수신되지 않는 환경에 있기 때문일 수 있습니다. 네트워크 연결 유형도 다릅니다. WiFi 연결을 제공하는 환경에 있는 경우 일반적으로 셀룰러 액세스에 의존하는 경우보다 대역폭이 더 높습니다. 인터넷에 연결할 수는 있지만 비디오 콘텐츠 스트리밍과 같은 일부 작업은 셀룰러 연결을 사용하면 WiFi 연결에 비해 느리고 비용이 많이 들 수 있습니다.

모바일 디바이스에는 이런 문제가 있으므로 이를 방지하는 코드를 작성해야 합니다. 해당 코드를 작성하지 않은 상태에서 애플리케이션이 인터넷을 사용하는 작업을 수행하려고 하면 애플리케이션이 응답을 중지할 수 있습니다.

또한 애플리케이션이 인터넷에 연결할 수 없는 경우에도 좋은 사용자 환경을 제공하는 것이 좋습니다. 인터넷 서비스에 연결되지 않아서 애플리케이션 작동이 중단되면 사용자가 혼란스러워할 수 있습니다. 가장 좋은 방법은 사용자에게 정보를 제공하는 것입니다. 인터넷에 연결되지 않은 경우 애플리케이션이 충분히 작동하지 않을 수 있음을 알려주세요. 다음 이미지는 예를 보여 줍니다.

Screenshot of an app showing a warning about limited network connectivity.

이 예제에서는 애플리케이션 개발자가 사용자에게 인터넷에 연결되지 않았고 Wi-Fi에 연결을 시도해야 한다는 것을 알립니다.

네트워크 연결 검색

.NET MAUI 앱에서 네트워크 연결을 확인하려면 Connectivity 클래스를 사용합니다. 이 클래스는 NetworkAccess라는 속성과 ConnectivityChanged라는 이름의 이벤트를 노출합니다. 이러한 멤버를 사용하여 네트워크의 변경 내용을 검색할 수 있습니다.

Current라는 다른 속성을 통해 NetworkAccess 속성에 액세스합니다. Connectivity가 플랫폼별 구현에 액세스하는 데 사용하는 메커니즘입니다.

NetworkAccess 속성은 NetworkAccess 열거형의 값을 반환합니다. 이 열거형은 ConstrainedInternet, Internet, Local, None, Unknown 이렇게 5개 값을 가집니다. NetworkAccess 속성이 값 NetworkAccess.None을 반환하는 경우 인터넷에 연결되지 않았고 네트워킹 코드를 실행하지 않아야 한다는 것으로 이해합니다. 이 메커니즘은 여러 플랫폼 간에 이식 가능합니다. 다음 코드에서는 예제를 보여 줍니다.

if (Connectivity.Current.NetworkAccess == NetworkAccess.None)
{
    ...
}

ConnectivityChanged 이벤트를 사용하면 디바이스가 인터넷에 연결되어 있는지 확인할 수도 있습니다. ConnectivityChanged 이벤트는 네트워크 상태가 변경될 때 자동으로 트리거됩니다. 예를 들어 활성 네트워크 연결로 시작했는데 결국 연결이 끊긴 경우 ConnectivityChanged 이벤트가 발생하여 변경 내용에 대해 알립니다. ConnectivityChanged 이벤트 처리기에 전달되는 매개 변수 중 하나는 ConnectivityChangedEventArgs 개체입니다. 이 개체에는 IsConnected라는 속성이 포함되어 있습니다. IsConnected 속성을 사용하여 인터넷에 연결되었는지 여부를 결정할 수 있습니다. 예를 들면 다음과 같습니다.

Connectivity.Current.ConnectivityChanged += Connectivity_ConnectivityChanged;
...
void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs  e)
{
    bool stillConnected = e.IsConnected;
}

ConnectivityChanged 이벤트를 사용하면 네트워크 상태의 변화를 감지하고 다양한 환경에 따라 사용 가능한 기능을 원활하게 조정할 수 있는 앱을 작성할 수 있습니다.

지식 점검

1.

다음 중 네트워크 코드를 실행하기 전에 인터넷에 연결되었는지 확인하는 가장 중요한 이유는 무엇인가요?

2.

사용자가 차량으로 이동하는 동안 실행할 수 있는 애플리케이션을 작성한다고 가정해 보겠습니다. 차량이 터널에 들어가면 디바이스에서 인터넷 연결이 끊어질 수 있습니다. Connectivity 클래스 멤버 중 네트워크 연결의 변화를 검색하는 데 사용할 수 있는 것은 무엇인가요?