연결된 응용 프로그램 개발

이 문서에서는 연결된 모든 Windows 스토어 앱이 알고 있어야 하는 일련의 네트워크 고려사항을 제공합니다.

소개

Windows 8은 개발자가 C++, C# 또는 JavaScript로 앱을 빌드하는 데 사용할 수 있는 간단하지만 성능이 뛰어난 API 세트가 포함된 새 Windows 런타임을 소개합니다. Windows 스토어 앱의 중요 속성 중 하나는 대부분 앱이 "연결"된다는 것입니다.

이 문서에서는 연결된(또는 네트워크 인식) 앱을 특정 목적을 위해 네트워크를 사용하려는 Windows 스토어 앱으로 정의합니다. 연결된 모든 앱은 사용자에게 예측 가능하고 즐거운 경험을 제공하기 위해 아래의 지침을 따라야 합니다.

올바른 네트워크 기능 선택

앱은 네트워크 리소스에 액세스하기 위해 네트워크 격리 기능을 선언해야 합니다. 다음 검사 목록을 사용하여 앱에 네트워크 격리가 구성되었는지 확인할 수 있습니다.

  • 앱에 필요한 네트워크 액세스의 방향을 결정합니다. 클라이언트가 시작한 아웃바운드 요청, 원하지 않는 인바운드 요청 또는 이 둘의 조합일 수 있습니다.
  • 앱에서 통신할 네트워크 리소스의 유형을 결정합니다. 앱이 홈 네트워크, 회사 네트워크, 인터넷 또는 이러한 네트워크 유형의 조합에 있는 신뢰할 수 있는 리소스와 통신해야 하는지 고려합니다.
  • 앱 매니페스트에서 필요한 최소 네트워킹 격리 기능을 구성합니다. 앱 개발 중 Microsoft Visual Studio Express 2012 for Windows 8을 사용하여 이 작업을 수행할 수 있습니다.
  • 앱을 배포하고 실행하여 문제 해결을 위해 제공된 네트워크 격리 도구를 사용하여 테스트하세요.

선언된 기능은 Windows에서 강제 실행됩니다. 앱은 최소 권한 원칙을 사용하고 필요한 기능만 추가해야 합니다. 다음 표에서는 네트워크 격리 기능에 대해 자세히 설명합니다.

네트워크 기능설명

인터넷(클라이언트)

인터넷 및 공공 장소(예: 공항, 커피숍)의 네트워크에 대한 아웃바운드 액세스를 제공합니다. 인터넷 액세스가 필요한 대부분의 앱은 이 기능을 선언해야 합니다.

참고  

앱 매니페스트에서 internetClient로 선언됩니다.

인터넷(클라이언트 및 서버)

인터넷 및 공공 장소(예: 공항, 커피숍)의 네트워크에 대한 인바운드 및 아웃바운드 액세스를 제공합니다. 중요 포트에 대한 인바운드 액세스는 항상 차단됩니다.

이 기능은 인터넷(클라이언트) 기능의 상위 집합이므로 두 기능을 모두 선언할 필요는 없습니다.

참고  

앱 매니페스트에서 internetClientServer로 선언됩니다.

개인 네트워크(클라이언트 및 서버)

집이나 회사와 같이 사용자가 신뢰하는 위치에서 인바운드 및 아웃바운드 네트워크 액세스를 제공합니다. 중요 포트에 대한 인바운드 액세스는 항상 차단됩니다.

앱 매니페스트에서 privateNetworkClientServer로 선언됩니다.

 

연결된 앱에 필요할 수 있는 다른 인증서로는 장치 근접 연결 인식을 제공하는 인증서, 공유 사용자 인증서 등이 있습니다. 네트워크 격리 및 기능 선언에 대한 자세한 내용은 네트워크 격리 기능을 구성하는 방법을 참조하세요.

올바른 API 선택

Windows 런타임은 인터넷 또는 개인 네트워크의 원격 끝점과 통신하기 위한 다양한 네트워킹 API에 대한 지원을 제공합니다. 개발자가 API를 통해 특정 상위 프로토콜을 사용할 수 없는 경우, Windows 런타임은 (멀티캐스트와 함께) TCP 및 UDP 소켓을 지원하여 개발자가 다른 상위 프로토콜을 구현할 수 있게 합니다.

영향 범위

네트워크에서 데이터를 보내고 수신해야 하는 모든 Windows 스토어 앱이 영향을 받습니다.

지침

먼저, 앱에 포함할 기능을 결정합니다. 기능이 아래 기능 영역 중 하나에 속하면 이러한 API를 직접 사용하세요.

API기능

Windows.Web.AtomPub, Windows.Web.Syndication

여러 버전에서 RSS 또는 Atom 형식의 피드를 검색하기 위한 API. 또한 Windows 런타임은 Atom Publication Protocol을 지원하여, Atom 컬렉션을 게시할 수 있습니다. 뿐만 아니라, 이러한 API는 OData와 같은 최신 형식에 대한 지원을 구현하기 쉽게 합니다.

Windows.Networking.BackgroundTransfer

호출하는 응용 프로그램이 포그라운드에서 실행되지 않더라도, 콘텐츠를 중단 없이 갱신 가능한 비용 인지 방식으로 다운로드/업로드하기 위해 사용된 API. 이 API는 HTTP, HTTPS 및 FTP 프로토콜을 사용하는 다운로드를 지원합니다.

XMLHTTPRequest(JavaScript), HttpClient(C#), IXHR2(C++).

RESTful 웹 서비스 및 기타 HTTP 기반 프로토콜과 상호 작용하는 데 사용된 API.

Windows.Networking.Proximity

두 장치 간의 거리가 근접함을 탐지하여 응용 프로그램이 두 Socket API를 사용하여 두 장치 간에 네트워크 통신을 실행할 수 있도록 하는 API.

Windows.Storage.Pickers

원격 파일 공유와 통신(예: 원격 파일 공유에 파일 저장)하는 데 사용되는 앱은 파일 선택기 API를 사용해야 합니다.

 

포함할 기능이 있는 API가 위 목록에 없으면 새 Windows.Networking.Sockets API를 사용하세요. 그러나 이러한 API를 사용하는 앱은 다음 사항을 고려해야 합니다.

  • Windows 8은 "WebSocket"이라는 새로운 유형의 소켓을 소개합니다. 다음은 다양한 유형의 소켓(UDP, TCP 또는 Websockets)을 사용할 때 결정하는 데 도움을 주는 몇 가지 고려사항입니다.

    • SMTP, MAPI 또는 텔넷과 같은 이 절에서 설명하는 API에서 지원하지 않는 프로토콜을 사용하는 서비스에 연결할 경우 TCP 또는 UDP 소켓을 사용합니다.

    • 동일한 로컬 네트워크의 다른 장치에 연결해야 할 경우 TCP 또는 UDP 소켓을 사용하세요.

    • HTTP 프록시를 통해 통신할 수 있는 간단한 요청 및 응답 프로토콜이 필요하면 위에 설명된 REST API를 사용하세요. (C++, C#, JavaScript).

    • (HTTP 프록시 경유를 포함하여) 웹 상에서 작성 중인 새 서비스에 연결하는 데 소켓 형태의 의미 체계(비동기식, 양방향)가 필요한 앱을 프로그램을 만드는 경우 WebSockets를 사용합니다.

  • 이름을 사용하여 끝점을 지정합니다. IP 주소는 변경할 수 있는 반면, 일반적으로 이름은 변경할 수 없으므로, (URIs의 IP 리터럴을 포함하여) IP 주소를 사용하여 끝점을 지정하지 않도록 하세요. 일반적으로 이름을 사용하면 끝점에 대한 현재 IP 주소에 연결됩니다.

  • 전통적으로 Windows API는 유니코드 문자열을 기본 형식으로 사용합니다(HostNamesURIs의 경우 포함). 그러나, 지정된 프로토콜이 다른 형식을 요구할 수 있으므로, DataReader/DataWriter 클래스 메서드를 사용하여 문자열을 프로토콜이 요구하는 어떤 형식으로든 변환하세요.

  • 개체에 대한 동등 규칙이 다르므로, 동등성을 비교할 때 HostNamesURIs를 문자열이 아닌, 클래스 개체로 구현해야 합니다.

  • 네트워크 변경 알림을 등록하고 네트워크 상태 변경에 대한 대응에 설명된 지침을 따르세요.

네트워크 요금제에 맞게 앱 동작 조정

한때 인터넷에는 네트워크 요금제가 있었습니다. 예를 들어, 대부분의 ISP가 사용자가 한 달에 전송할 수 있는 데이터 양에 대한 cap(보통 아주 큰 cap)을 가집니다. 더 최근에는 모바일 광대역 기술의 인기가 증가하면서 데이터 캡(data cap) 증가 또는 로밍으로 사용자에게 상당한 금액 청구를 초래할 수 있는 더욱 심각한 문제가 되었습니다. 따라서 앱은 사용할 수 있는 네트워크 리소스를 모니터링하고 적절히 대처해야 합니다.

아래 표에는 Windows.Networking.Connectivity.ConnectionCost에 정의된 가능한 연결 비용이 나와 있습니다.

속성설명

ApproachingDataLimit

연결이 요금제에 지정된 남은 사용 시간에 근접한지를 나타내는 값을 가져옵니다.

NetworkCostType

연결의 현재 네트워크 비용을 나타내는 값을 가져옵니다.

  • Unrestricted: 이 네트워크 연결 사용은 무제한입니다. 이것은 사용 요금과 용량 구속조건을 제한했습니다.

  • Fixed:이 네트워크 연결 사용은 특정 제한까지 무제한입니다.

  • Variable: 이 네트워크 연결 사용은 바이트 단위로 요금이 부과됩니다.

  • Unknown:이 네트워크 연결에 대한 요금 정보를 사용할 수 없습니다.

OverDataLimit

연결이 요금제에 지정된 남은 사용 시간을 초과했음을 나타내는 값을 가져옵니다.

로밍

홈 공급자 외부의 네트워크에 연결되어 있는지를 나타내는 값을 가져옵니다.

 

영향 범위

일반적으로 모든 앱(특히 대량의 데이터를 전송하는 앱)은 아래의 지침을 따라야 합니다.

사용자는 각 응용 프로그램이 사용 중인 대역폭 양을 판별할 수 있습니다. 네트워크 요금제 대역폭을 잘못 사용하면 앱 및 회사의 신뢰도에 영향을 줄 수 있습니다

Guidance

인터넷에 있는 대상에 연결하는 앱은 GetInternetConnectionProfile를 사용하여 데이터를 보내고 받는 네트워크에 대한 요금 정보를 얻어야 합니다. 통신 회사가 설정한 데이터 전송 제한사항에 따라 다음 지침을 따르세요.

동작지침
일반

일반 시나리오에서 앱은 제한 사항을 구현하지 않아야 합니다. 연결이 요금에서 "제한 없음"으로 간주되고 사용 요금과 용량 제약의 제한을 받지 않아야 합니다.

NetworkCostType이 "Unrestricted" 또는 "Unknown"이고 ConnectionCost가 "Roaming"이 아니면 앱은 일반 동작을 구현해야 합니다.

예:

  • 미디어 플레이어 앱이 전체 HD 동영상을 재생할 수 있습니다.

  • 앱이 제약이나 프롬프트 없이 큰 파일을 다운로드할 수 있습니다.

무난

무난한 시나리오에서 앱은 네트워크 사용을 최적화하기 위한 제한 사항을 구현하여 네트워크 요금제의 작업을 처리해야 합니다.

NetworkCostType이 "Fixed" 또는 "Variable"이고 ConnectionCost가 "Roaming" 또는 "OverDataLimit"가 아니면 앱은 무난한 동작을 구현해야 합니다.

예:

  • 미디어 플레이어 앱이 낮은 해상도의 동영상을 재생할 수 있습니다.

  • 앱이 중요하지 않은 다운로드를 지연시킬 수 있습니다.

  • 앱이 네트워크를 통한 정보의 사전 가져오기를 방지할 수 있습니다.

  • 메일 앱이 메일 메시지를 받을 때 헤더 전용 모드로 전환할 수 있습니다.

옵트인

옵트인 시나리오에서 앱은 네트워크 액세스 요금이 요금제 요금보다 높은 특수한 경우를 처리해야 합니다. 예를 들어 사용자가 로밍 중일 때 통신사가 상당히 높은 요금을 부과할 수 있습니다.

ConnectionCost가 "Roaming" 또는 "OverDataLimit"인 경우 앱은 옵트인 동작을 구현해야 합니다.

예:

  • 앱이 사용자에게 네트워크에 액세스할지 확인해야 합니다.

  • 앱이 모든 백그라운드 데이터 네트워크 작업을 일시 중지해야 합니다.

 

네트워크 상태 변경에 대응

Windows 8이 새 네트워크를 탐지할 때 이것은 자동으로 새 연결 옵션을 제공합니다. 예를 들어 사용자가 3G 네트워크를 사용하여 데이터를 스트리밍하고 나중에 Wi-Fi 네트워크 범위로 들어가면 앱에서 새 연결 옵션을 사용하는 것이 적절할 경우 이렇게 해서 능률을 높일 수 있습니다.

모든 모바일 장치의 경우 네트워크 연결이 종종 끊어질 수 있습니다. 3G 네트워크는 사용자의 집 또는 차고 범위를 벗어난 경우에도 Wi-Fi를 사용할 수 있으며, 이와 유사하게 Wi-Fi는 사용자가 집을 나갈 때 범위를 벗어날 수 있습니다. 또한 네트워크를 사용할 수 없는 경우도 있습니다. Wi-Fi 및 모바일 광대역 네트워크의 확산으로 인해 그러한 네트워크 상태 변경(네트워크 연결, 사용 불가)이 점점 일반화될 것입니다. 원활하게 새로운 네트워크로 자동 연결되지는 않으며, 응용 프로그램 작업이 있어야 연결됩니다. 네트워크 요금제보다 무제한 네트워크를, 저속 네트워크보다 고속 네트워크를 우선적으로 선택하는 것이 Windows 8의 기본 정책입니다.

영향 범위

네트워크를 사용하는 모든 Windows 스토어 앱이 영향을 받고 이러한 지침을 따르지 않으면 네트워크 변경 사항이 발생할 때 사용자 경험이 좋지 않을 수 있습니다.

지침

모든 Windows 스토어 앱은 다음 단계를 따라야 합니다.

  1. 앱에서 사용 중인 연결을 더 이상 사용할 수 없는 경우(오류로 표시) 다음과 같이 하세요.

    1. 인터넷 연결 비용을 확인합니다.

    2. 작업을 다시 시도합니다. 실패할 경우 다른 NetworkStatusChanged 알림이 표시될 때까지 기다립니다.

  2. 인터넷 연결 요금을 확인한 다음 앞선 네트워크 요금제에 맞게 응용 프로그램 동작 조정에서 권장된 대로 동작을 조정하세요.

  3. 네트워크 상태 변경 알림으로 등록합니다(onNetworkStatusChanged).

  4. 올바른 API 선택에 설명된 API 중 하나를 사용하여 네트워크 작업을 시작합니다.

  5. 네트워크 상태 변경됨 알림은 사용 가능한 비용 또는 연결 옵션이 변경되었을 수 있음을 나타냅니다. 이 알림을 받은 경우 다음과 같이 하세요.

    1. 인터넷 연결 비용을 확인합니다. 비용 특징이 변경된 경우(무료 -> 유료, 유료 -> 무료) 네트워크 작업을 다시 시도하세요. Windows 8은 자동으로 최상의 네트워크/최악의 금액 네트워크를 사용합니다. 재시도에서 네트워크 작업이 성공하면 원래 네트워크 작업을 취소합니다.

      참고  고급 개발자는 네트워크 작업을 다시 시도할 때 앱을 최적화할 수도 있습니다. 예를 들어, 고속 네트워크 상에서 기존 연결을 새 연결로 바꿔야 할 수 있습니다. 이 시나리오에서는 개발자가 소켓 API(BandwidthStatistics)를 사용하여 전환할 지 여부를 결정할 수 있습니다.

    2. 인터넷 연결 비용 특징이 변경되지 않았지만 한도의 80% 이상 소진, 가변 비용, 로밍, 등과 같은 비용 관련 알림을 받은 경우 동작을 적용하세요.

연결된 앱 디버깅 및 문제 해결

네트워크 결함으로 인해 앱이 중단되었거나 충돌하거나, 사용자에게 처리 불가능한 대화 상자와 혼동되는 오류 메시지를 표시할 수 있습니다. 이러한 오류는 네트워킹 스택 내 어디에서나 발생할 수 있으므로 이러한 오류를 디버깅하기가 어려울 수 있습니다.

영향 범위

네트워크를 (소켓을 사용하여) 직접 또는 (결과적으로 네트워크를 사용하는 API를 사용하여) 간접적으로 사용하는 모든 Windows 스토어 앱이 영향을 받습니다. 이상적인 상황은 운영 체제가 개발자를 대신하여 자동으로 오류 상태를 해결하는 경우이지만, 이러한 시도가 소용이 없을 때 앱이 오류를 처리하도록 준비해야 합니다.

지침

Windows 스토어 앱에서는 다음을 수행해야 합니다.

  • 네트워킹 오류가 발생한 경우 작업을 다시 시도합니다(해당하는 경우). 예를 들어, 인증이 실패할 경우에는 작업을 다시 시도하지 않지만, 통신 중인 네트워크의 연결이 끊어졌을 때는 다른 연결을 사용할 수 있으므로 작업을 재시도하세요. 대부분의 오류는 작업을 다시 시도할 때 간단히 사라집니다. 재시도 중에 앞에서 네트워크 상태 변경에 대응 섹션에서 지정한 지침을 따르세요.

  • UI 스레드에서 호출이 차단되지 않도록 비동기 API를 사용해야 합니다. 즉, 네트워크 작업이 완료하는 데 시간이 오래 걸리거나 오류가 있을 경우 응용 프로그램은 중단되지 않습니다. Windows 런타임의 비동기 특징을 기반으로 동기 동작을 에뮬레이트하지 마세요.

  • 이상적으로는 오류를 처리할 모델을 미리 계획했습니다. 앱을 설계할 때 사용자에게 오류 정보를 표시할 방법을 생각해 봅니다. 예를 들어 Outlook에서는 주요 네트워크 표시기를 사용하고, Communicator에는 "전체 UI 바꾸기" 체계가 있고, Internet Explorer에는 네트워크 오류를 표시하는 다운로드에 대한 작업 지향적 대화 상자가 포함되어 있습니다. 예외가 발생된 경우의 예외를 파악하고 각 오류 문자열을 이해하고 적절하게 사용자에게 알립니다.

  • 다양한 네트워킹 환경에서 연결 끊기, 다시 연결하기, 일시 정지 또는 다시 시작, 다른 네트워크로 전환 등의 작업을 수행하면서 앱을 테스트합니다.

  • 앱을 테스트할 때 즉시 명확하지 않은 오류를 발견하면 ETW 추적을 사용하도록 설정합니다.

리소스

다음 설명서에서는 이 주제 항목에서 설명한 Windows 런타임 기능에 대한 지침 및 API 세부정보를 제공합니다.

기능 구현 참고 자료

네트워킹 지원 추가
웹 서비스에 연결
네트워크 서비스에 연결
웹 소켓 서비스에 연결
연결 및 데이터 계획 정보 액세스
네트워크 리소스에서 파일 전송
신디케이티드 콘텐츠 액세스 및 관리

코드 샘플

네임스페이스 설명서

Windows.Networking.BackgroundTransfer
Windows.Networking.Connectivity
Windows.Networking.Proximity
Windows.Networking.Sockets
Windows.Storage.Picker
Windows.Web.AtomPub
Windows.Data.Html
Windows.Web.Syndication
Windows.Foundation (URI 클래스)
Windows.Networking (HostName 클래스)
Windows.Storage.Streams (DataReader/DataWriter 클래스)

 

 

표시:
© 2014 Microsoft