ASP.NET SignalR 2.0: Windows Azure 웹 사이트에서 SignalR 사용하기

등록일시: 2014-01-16 08:00,  수정일시: 2014-02-11 12:02
조회수: 5,602
이 문서는 ASP.NET SignalR 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.

본문에서는 Windows Azure에서 실행되는 SignalR 응용 프로그램의 구성 방법을 살펴봅니다.

목차

개요

ASP.NET SignalR을 사용하면 서버와 웹 클라이언트 또는 .NET 클라이언트 간에 새로운 차원의 상호작용성을 도입할 수 있습니다. 뿐만 아니라, SignalR 응용 프로그램을 Windows Azure에서 호스트하면, 클라우드 공급자에서 실행되는 고가용성과 고확장성, 그리고 고성능 환경의 이점들까지 누릴 수 있습니다.

Windows Azure 웹 사이트에 SignalR 응용 프로그램 배포하기

SignalR 응용 프로그램을 Windows Azure에 배포한다고 해서, 온-프레미스(On-Premise) 서버에 배포할 때보다 특별히 더 복잡한 문제점들이 발생하지는 않습니다. 구성이나 기타 설정들을 전혀 변경하지 않고도 SignalR 응용 프로그램을 Windows Azure에 호스트 할 수 있습니다. (그러나, Windows Azure 서비스 버스를 이용해서 SLA(Service Level Agreement) 요건을 만족시키고자 한다면 Windows Azure 서비스 버스 백플레인 사용하기 절을, 웹 소켓 지원을 활성화하려면 Windows Azure 웹 사이트에서 웹 소켓 활성화시키기 절을 참고하시기 바랍니다.) 본문에서는 ASP.NET SignalR 2.0: 자습서: SignalR 2.0 시작하기 문서의 응용 프로그램을 Windows Azure에 배포해봅니다.

전제조건

  • Visual Studio 2013용 Windows Azure SDK가 필요합니다. 이 SDK는 여기에서 다운로드 받으실 수 있습니다.

  • Visual Studio 2013이 필요합니다. Visual Studio 2013을 갖고 있지 않다면, Windows Azure SDK를 설치할 때 무료 버전을 함께 설치할 수 있습니다.

  • 본 자습서를 완료하려면 Windows Azure 구독이 필요합니다. Windows Azure 무료 평가판 페이지에서 Windows Azure의 평가판 구독을 등록할 수 있습니다.

Windows Azure에 SignalR 응용 프로그램 배포하기

  1. ASP.NET SignalR 2.0: 자습서: SignalR 2.0 시작하기 문서의 과정을 완료하거나, 코드 갤러리에서 모든 작업이 완료된 프로젝트를 다운로드 받습니다.

  2. Get started with Windows Azure and ASP.NET 자습서의 Deploy the application to Windows Azure 절의 과정에 따라 응용 프로그램을 Windows Azure에 배포합니다.

Windows Azure에 SignalR 응용 프로그램을 재배포하는 경우

연결 및 응용 프로그램 데이터를 Windows Azure 테이블 같은 영구 데이터 저장소에 저장하지 않으면, 실제 응용 프로그램을 업데이트 할 때, 기존 연결과 응용 프로그램 데이터들이 유지되지 않습니다. Windows Azure 테이블에 연결 정보를 저장하는 방법은 Mapping SignalR Users to Connections: Windows Azure 문서의 코드 예제에서 살펴보실 수 있습니다.

Windows Azure 웹 사이트에서 웹 소켓 활성화시키기

Windows Azure 웹 사이트에서도 웹 소켓을 지원합니다. Windows Azure 웹 사이트에서 웹 소켓을 사용하려면, 사이트 구성 섹션에서 이를 활성화시켜야 합니다. 먼저, Windows Azure 관리 포털에서 해당 웹 사이트를 열고 구성(CONFIGURE) 섹션을 선택합니다.

Configure tab

그리고, 구성 페이지 상단에서 웹 사이트가 .NET 4.5를 사용하도록 설정되어 있는지 확인합니다.

.NET framework version 4.5 setting

그런 다음, 같은 페이지에서 WEBSOCKET 항목을 설정(On)으로 설정합니다.

Web Sockets setting: On

마지막으로 페이지 하단의 저장(Save) 버튼을 클릭해서 변경 사항을 저장합니다.

Save settings

Windows Azure 서비스 버스 백플레인 사용하기

만약, 다중 인스턴스로 구성된 웹 사이트를 실행해서 인스턴스들의 사용자들끼리 서로 상호작용하기를 원한다면 (가령, 특정 인스턴스에서 작성된 챗 메시지가 다른 인스턴스들에 연결된 사용자들에게도 전달되려면), 응용 프로그램에서 Azure 서비스 버스(Azure Service Bus)를 구현해야 합니다.

SignalR에서 Azure 서비스 버스 백플레인 구현하기

SignalR 응용 프로그램에서 Azure 서비스 버스 백플레인을 활성화하려면 다음의 과정을 따릅니다.

  1. 라이브러리 패키지 관리자 콘솔(Library Package Manager Console)을 열고, 다음 명령을 수행해서 프로젝트에 Microsoft.AspNet.SignalR.ServiceBus 패키지를 추가합니다:

    Install-Package Microsoft.AspNet.SignalR.ServiceBus
  2. 다음에 강조된 코드 라인들을 OWIN 시작 클래스의 Configuration 메서드에 추가합니다.

    public void Configuration(IAppBuilder app)
    {
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
    
        app.MapSignalR();
    }

    역주: 클래스 상단에 Microsoft.AspNet.SignalR 네임스페이스를 참조하는 using 문을 함께 추가해야 합니다.

이렇게 설정을 마치고 나면 각각의 인스턴스들이 수신한 메시지들이 백플레인으로도 전달됩니다. 서버에서 백플레인으로 (허브 외부에서) 직접 메시지를 전송하는 방법에 관한 더 많은 정보는 How to call client methods and manage groups from outside the Hub class 문서를 참고하시기 바랍니다.

그리고, Windows Azure 백플레인을 사용하는 방법에 대한 더 자세한 정보는 SignalR Scaleout with Azure Service Bus 문서를 참고하시기 바랍니다.

SignalR과 Azure에 대한 일반적인 문제 해결하기

다중 인스턴스 응용 프로그램에서 일부 메시지가 수신되지 않습니다.

Windows Azure 서비스 버스 백플레인이 구현되지 않았거나 부적절하게 구현되면, 특정 인스턴스에서 생성된 메시지들이 다른 인스턴스들에 연결된 클라이언트로 전달되지 않습니다. Windows Azure 서비스 버스 백플레인을 구성하는 방법은 Windows Azure 서비스 버스 백플레인 사용하기 절을 참고하시기 바랍니다.

토픽 이름을 변경하면 Windows Azure 서비스 버스 백플레인을 통해서 메시지가 수신되지 않습니다.

내부적으로 토픽은 Windows Azure 서비스 버스 백플레인에 의해 사용됩니다. 사용자가 구성할 수 있는 부분이 아닙니다.

역주: 이전 절에서 살펴본 샘플 코드에서 UseServiceBus 메서드를 호출할 때 전달하는 두 번째 매개변수, 즉 "YourAppName"가 바로 토픽(Topic Prefix)입니다.

다른 어셈블리에 존재하는 허브에서 Windows Azure 서비스 버스 백플레인을 통해서 메시지들이 전달되지 않습니다.

백플레인의 인스턴스들 사이에서 통신하는 허브들은 반드시 동일한 어셈블리에 정의된, 동일한 허브 클래스 인스턴스이어야만 합니다. 서로 다른 어셈블리에 정의되어 있는 허브들끼리는 백플레인을 통해서 통신할 수 없습니다.