네트워크 연결 이벤트 및 가용성 변경을 관리하는 방법(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

이 항목에서는 Windows.Networking.Connectivity 네임스페이스의 클래스를 사용하여 현재 상태 정보를 검색하고 네트워크 연결 상태 변경 알림을 받도록 등록하는 방법을 보여 줍니다.

또한 네트워크 시나리오에서 일관된 사용자 환경을 지원하는 앱 동작에 대한 권장 지침을 제공합니다.

사전 요구 사항

다음 예는 JavaScript를 사용하며 네트워크 정보 샘플을 기반으로 합니다. JavaScript를 사용하여 Windows 런타임 앱을 만드는 방법에 대한 일반적인 내용은 JavaScript를 사용하여 첫 번째 Windows 런타임 앱 만들기를 참조하세요.

ConnectionProfile이 무엇인지와 이 프로필에 중요하다고 표시된 정보에 액세스하는 방법을 알고 있어야 합니다. 자세한 내용은 네트워크 연결 정보를 검색하는 방법을 참조하세요. 추가 코드 예제가 필요하면 네트워크 정보 샘플을 다운로드하세요.

연결 상태 변경 이벤트가 필요한 이유

상태 변경 이벤트는 개별 연결이 제공하는 연결 가용성, 형식 또는 비용의 변경 사항을 표시합니다. 연결된 최신 앱에서 모바일 장치 사용에 일반적인 네트워크 통과 시나리오가 발생하는 경우가 많습니다. Windows 런타임은 새 네트워크를 검색할 경우 자동으로 새 연결 옵션으로 제공합니다. 예를 들어 사용자가 3G/4G 네트워크에서 장치를 사용하여 데이터를 스트림하는 도중 Wi-Fi 네트워크 범위로 들어가게 되면 응용 프로그램이 사용할 수 있도록 새 연결 옵션이 제공됩니다. 이는 사용자가 현재 사용 중인 네트워크 범위 밖으로 이동할 수도 있음을 의미합니다.

이러한 가능성을 모두 고려할 때 네트워크 가용성에 변경 내용이 있을 때 적절한 선택을 할 수 있는 논리를 앱에 구현하는 것이 중요합니다. 기존 네트워크 연결은 자동으로 다른 연결로 매끄럽게 전환되지 않습니다. 앱이 networkstatuschanged 이벤트를 등록하고 그에 따라 적응해야 합니다.

연결 상태 변경 이벤트 알림 등록

앱이 네트워크 상태 변경에 적응하려면 네트워크 상태가 변경되는 때를 알아야 합니다. 다음 코드 예제에서는 특정 연결 프로필에 대해 networkstatuschanged 이벤트 알림을 등록하는 방법을 보여 줍니다.

따라서 대부분의 비동기 네트워크 메서드를 호출할 때 예외를 처리하는 코드를 작성해야 합니다. 이벤트 알림에 등록하거나 ConnectionProfile을 검색하려고 하는 Windows.Networking.Connectivity 네임스페이스의 메서드에서 예외가 발생할 수도 있습니다. 예외 처리기는 예외의 원인에 대해 보다 자세한 정보를 검색하므로 오류를 더 잘 이해하고 적절한 의사 결정을 내릴 수 있습니다. 자세한 내용은 네트워크 앱에서 예외를 처리하는 방법을 참조하세요.


// Define some variables used

// A variable to store network status change information
var internetProfileInfo = "";

// A  boolean to keep track of registration for network status change notifications
var registeredNetworkStatusNotif = false;

var networkInfo = Windows.Networking.Connectivity.NetworkInformation;

//Register for Network Status Change notifications, and display new Internet Connection Profile information on network status change
function registerForNetworkStatusChangeNotif() {

    // register for network status change notifications
    if (!registeredNetworkStatusNotif) {
        try {
            networkInfo.addEventListener("networkstatuschanged", onNetworkStatusChange);
            registeredNetworkStatusNotif = true;

            if (internetProfileInfo === "") {
                mySample.displayStatus("No network status change. ", "sample", "status");
        }
        catch (e) {
            mySample.displayError("An unexpected exception occured: " + e.name + ": " + e.message);
        }
    }
}

네트워크 시나리오가 변경되면 앱이 이미 등록된 경우 네트워크 상태 변경 알림에서 등록을 취소한 다음 새 네트워크 시나리오에 대한 알림을 다시 등록해야 할 수도 있습니다.

//Unregister for Network Status Change notifications
function unRegisterForNetworkStatusChangeNotif() {
    try {
        networkInfo.removeEventListener("networkstatuschanged", onNetworkStatusChange);
        internetProfileInfo = "";
    }
    catch (e) {
        mySample.displayError("An unexpected exception occured: " + e.name + ": " + e.message, "sample", "error");
    }
}

연결 상태 변경 정보 검색

상태 변경이 발생할 경우 다음 이벤트 처리기 예에서는 현재 인터넷 연결 프로필과 관련된 ConnectionProfile을 검색합니다. 이 ConnectionProfile을 사용하여 NetworkConnectivityLevel, NetworkTypesNetworkCostType에 정의된 현재 연결 범위, 형식 및 비용을 포함하는 연결 상태 정보를 검색하고 표시할 수 있습니다.

// Event handler for Network Status Change event
function onNetworkStatusChange(sender) {

    //network status changed
    internetProfileInfo = "Network Status Changed: \n\r";

    try {
        // get the ConnectionProfile that is currently used to connect to the Internet
        var internetProfile = networkInfo.getInternetConnectionProfile();
        if (internetProfile === null) {
            mySample.displayStatus("Not connected to Internet\n\r");
        }
        else {
            internetProfileInfo += getConnectionProfileInfo(internetProfile) + "\n\r";
            mySample.displayStatus(internetProfileInfo);
        }
        internetProfileInfo = "";
    }
    catch (e) {
            mySample.displayError("An unexpected exception occured: " + e.name + ": " + e.message, "sample", "error");
    }
}

변경되어 네트워크 상태 변경 이벤트를 발생시킬 수 있는 다양한 네트워크 상태가 있습니다. 여기에는 장치에 새 ConnectionProfile, 새 연결 비용, 연결 수준 및 기타 변경 내용이 있는지 여부가 포함됩니다. 위의 이벤트 처리기는 NetworkStateChangeEventDetails 클래스를 사용하여 변경 내용을 확인할 수 있습니다.

연결 상태 변경을 처리할 때 권장되는 앱 동작

다음 표에는 주요 연결 상태 변경 시나리오가 설명되어 있으며 앱 동작 권장 지침이 나와 있습니다.

시나리오 권장되는 동작
오류로 인한 연결 손실

네트워크 작업을 다시 시도하여 연결을 다시 설정할 수 있습니다. 실패하면 networkstatuschanged 이벤트가 현재 연결 상태 정보를 검색하도록 기다립니다. 앱은 50밀리초 값에서 시작하여 다시 시도 사이에서 현저하게 증가하는 백오프 간격을 사용하는 것이 좋습니다.

네트워크 손실

사용자에게 연결이 손실되었음을 알린 다음 networkstatuschanged 이벤트를 등록하고 기다립니다.

새 네트워크 가용성

모바일 장치에서는 여러 공용 및 개인 네트워크를 통과하는 단일 장치와 관련된 시나리오가 일반적입니다. 예를 들어 사용자가 모바일 광대역에 연결하고 메시지 앱을 사용하여 친구와 대화한 후 집으로 돌아가 무제한 홈 네트워크에 연결할 수 있습니다. 데이터 통신 연결 네트워크보다 무제한 네트워크를, 저속 네트워크보다 고속 네트워크를 우선적으로 선택하는 것이 Windows 8, Windows Server 2012 및 Windows Phone 8.1 이상의 기본 정책입니다. 그러나 앱에서 설정한 기존 연결이 새 네트워크로 자동으로 전환되지 않습니다. 앱만 새 네트워크로 전환할지 여부를 가장 잘 결정할 수 있으므로 앱이 포함되어야 합니다.

동영상 스트림 다운로드가 거의 다 완료된 경우 새 네트워크로 전환하여 다운로드를 다시 시작하는 것은 타당하지 않을 수 있습니다. 그러나 현재 네트워크에서 패킷이 삭제되거나, 속도가 너무 느리거나, 스트림이 완료되는 데 추가 시간이 필요한 경우 새 네트워크로 전환하는 것이 가장 좋을 수 있습니다.

앱 시나리오에 네트워크 전환이 필요하다고 결정한 경우 새 네트워크 검색 시 다음 지침을 따릅니다.

1. 네트워크 비용을 확인하고 더 나은 연결을 사용할 수 있는 경우 네트워크 작업을 다시 시도합니다. Windows에서는 자동으로 데이터 통신 연결 네트워크보다 무제한 네트워크를, 저속 네트워크보다 고속 네트워크를 선택합니다(사용 가능한 경우).

2. 네트워크 작업이 성공하면 다시 시도할 때 이전 네트워크에서 원래 네트워크 작업을 취소합니다(이전 네트워크가 있는 경우).

네트워크 요금 변경

특히, 모바일 네트워크에서는 사용에 대한 매우 구체적인 제한 사항이 있는 경우가 종종 있습니다. 사용된 모바일 광대역 데이터 상한이 80%가 넘거나, 가변 요금제 또는 로밍 때문에 앱의 네트워크 요금이 변경된 경우 데이터 통신 연결 네트워크 비용 제약 조건을 관리하는 방법에 자세히 설명되어 있는 앱 동작을 적응시킵니다.

 

참고  고급 개발자는 네트워크 작업을 다시 시도할 때 앱을 최적화할 수도 있습니다. 예를 들어 기존 연결을 속도가 더 빠른 네트워크의 새 연결로 바꾸려 할 수 있습니다. 이 시나리오에서 개발자는 소켓 API(예: StreamSocketInformation.bandwidthStatistics)를 사용하여 다른 연결로 전환하는 것이 적절한지 결정할 수 있습니다.

 

요약

이 항목에서는 연결 상태 변경 알림을 등록하고 이러한 알림을 사용하여 이벤트가 발생한 ConnectionProfile에서 현재 상태 정보를 검색하는 방법을 살펴보았습니다. 또한 가장 일반적인 상태 변경 시나리오를 처리할 때 권장되는 앱 동작에 대해서도 검토했습니다.

이 항목에서는 데이터 통신 연결 네트워크가 적용되는 네트워크에 연결하는 것과 관련한 시나리오에서의 네트워크 가용성을 다루었지만, networkstatuschanged 이벤트도 요금 및 데이터 요금제 속성에 변경을 나타낼 수 있습니다. 이러한 시나리오에서 앱 동작을 가장 적절하게 변경하는 방법에 대한 자세한 내용은 데이터 통신 연결 네트워크 비용 제약 조건을 관리하는 방법을 참조하세요.

관련 항목

기타

JavaScript를 사용하여 첫 Windows 런타임 앱 만들기

네트워크 앱에서 예외를 처리하는 방법

데이터 통신 연결 네트워크 비용 제약 조건을 관리하는 방법

네트워크 어댑터 및 위치 정보를 검색하는 방법

네트워크 연결 정보를 검색하는 방법

네트워크 연결 사용 데이터를 검색하는 방법

참조

ConnectionProfile

NetworkInformation

networkstatuschanged

networkStatusChangedEventHandler

Windows.Networking.Connectivity

샘플

네트워크 정보 샘플

네트워크 상태 배경 샘플