Azure SignalR Service의 서비스 모드

서비스 모드는 Azure SignalR Service의 중요한 개념입니다. SignalR Service는 현재 기본, 서버리스클래식의 세 가지 서비스 모드를 지원합니다. SignalR Service 리소스는 각 모드에서 다르게 동작합니다. 이 문서에서는 시나리오에 따라 올바른 서비스 모드를 선택하는 방법을 알아봅니다.

서비스 모드 설정

Azure Portal에서 새 SignalR 리소스를 만드는 경우 서비스 모드를 지정하라는 메시지가 표시됩니다.

Azure portal – Choose service mode when creating a SignalR Service

또한 서비스 모드는 나중에 설정 메뉴에서 변경할 수 있습니다.

Update service mode

Azure SignalR CLI에서 az signalr createaz signalr update를 사용하여 서비스 모드를 설정하거나 변경합니다.

기본 모드

이름에서 알 수 있듯이 기본 모드는 SignalR Service의 기본 서비스 모드입니다. 기본 모드에서 애플리케이션은 일반적인 ASP.NET Core SignalR 또는 ASP.NET SignalR(사용되지 않음) 애플리케이션으로 작동합니다. 허브 서버라는 허브를 호스트하는 웹 서버 애플리케이션이 있고, 클라이언트에서 허브 서버와 전이중 통신을 수행합니다. ASP.NET Core SignalR과 Azure SignalR Service의 차이점은 클라이언트와 허브 서버를 직접 연결하는 대신 클라이언트와 서버에서 모두 SignalR Service에 연결하고 서비스를 프록시로 사용하는 것입니다. 다음 다이어그램에서는 기본 모드의 일반적인 애플리케이션 구조를 보여 줍니다.

Application structure in Default mode

기본 모드는 일반적으로 SignalR Service에서 사용하려는 SignalR 애플리케이션이 있는 경우에 적합한 선택입니다.

기본 모드의 연결 라우팅

기본 모드에는 서버 연결이라는 허브 서버와 SignalR Service 간의 WebSocket 연결이 있습니다. 이러한 연결은 서버와 클라이언트 간에 메시지를 전송하는 데 사용됩니다. 새 클라이언트가 연결되면 SignalR Service에서 기존 서버 연결을 통해 클라이언트를 하나의 허브 서버(둘 이상의 서버가 있다고 가정)로 라우팅합니다. 클라이언트 연결은 해당 수명 동안 동일한 허브 서버에 고정됩니다. 이 속성을 연결 유지라고 합니다. 클라이언트에서 메시지를 보내는 경우 메시지는 항상 동일한 허브 서버로 이동합니다. 연결 유지 동작을 사용하면 허브 서버의 개별 연결에 대한 일부 상태를 안전하게 유지할 수 있습니다. 예를 들어 서버와 클라이언트 간에 무언가를 스트림하려는 경우 데이터 패킷이 다른 서버로 이동하는 사례를 고려할 필요가 없습니다.

Important

기본 모드에서는 허브 서버가 먼저 서비스에 연결되지 않고는 클라이언트에서 연결할 수 없습니다. 네트워크 중단 또는 서버 다시 부팅으로 인해 모든 허브 서버의 연결이 끊어지면 서버가 연결되지 않았다는 오류 메시지가 클라이언트 연결에 표시됩니다. 사용자는 SignalR Service에 연결된 하나 이상의 허브 서버가 항상 있는지 확인해야 합니다. 예를 들어 여러 허브 서버를 사용하여 애플리케이션을 설계한 다음, 모든 서버가 동시에 오프라인 상태가 되지 않도록 할 수 있습니다.

또한 기본 라우팅 모델에서는 허브 서버가 오프라인 상태가 되면 해당 서버로 라우팅되는 연결이 끊어집니다. 유지 관리를 위해 허브 서버가 오프라인 상태일 때 연결이 끊어지고, 애플리케이션에 미치는 영향을 최소화하기 위해 다시 연결을 처리해야 합니다.

참고 항목

기본 모드에서 허브 서버를 통과하지 않으려면 REST API, 관리 SDK 및 함수 바인딩을 사용하여 메시지를 클라이언트에 직접 보낼 수도 있습니다. 기본 모드에서 클라이언트 연결은 여전히 허브 서버에서 처리되며 업스트림 엔드포인트는 이 모드에서 작동하지 않습니다.

서버리스 모드

기본 모드와 달리 서버리스 모드는 허브 서버를 실행할 필요가 없으므로 이 모드의 이름이 "서버리스"입니다. SignalR Service에서 클라이언트 연결을 유지 관리합니다. 연결 유지가 보장되지 않으며 HTTP 요청이 WebSocket 연결보다 덜 효율적일 수 있습니다.

서버리스 모드는 Azure Functions에서 작동하여 실시간 메시징 기능을 제공합니다. 클라이언트는 함수 바인딩이라는 Azure Functions에 대한 SignalR Service 바인딩을 사용하여 메시지를 출력 바인딩에 보냅니다.

서버 연결이 없으므로 서버 SDK를 사용하여 서버 연결을 설정하려고 하면 오류가 발생합니다. SignalR Service는 서버리스 모드에서 서버 연결 시도를 거부합니다.

서버리스 모드에는 연결 유지가 없지만 여전히 클라이언트에 대한 서버 쪽 애플리케이션 푸시 메시지가 제공될 수 있습니다. 서버리스 모드에는 메시지를 클라이언트에 푸시하는 다음 두 가지 방법이 있습니다.

  • REST API를 일회성 보내기 이벤트에 사용합니다. 또는
  • 여러 메시지를 더 효율적으로 보낼 수 있도록 WebSocket 연결을 사용합니다. 이 WebSocket 연결은 서버 연결과 다릅니다.

참고 항목

REST API와 WebSocket은 모두 SignalR Service 관리 SDK에서 지원됩니다. .NET 이외의 언어를 사용하는 경우 이 사양에 따라 REST API를 수동으로 호출할 수도 있습니다.

서버 애플리케이션이 클라이언트에서 메시지 및 연결 이벤트를 받을 수도 있습니다. SignalR Service는 웹후크를 사용하여 메시지 및 연결 이벤트를 미리 구성된 엔드포인트(업스트림 엔드포인트라고 함)에 전달합니다. 업스트림 엔드포인트는 서버리스 모드에서만 구성할 수 있습니다. 자세한 내용은 업스트림 엔드포인트를 참조하세요.

다음 다이어그램에서는 서버리스 모드의 작동 방식을 보여 줍니다.

Application structure in Serverless mode

클래식 모드

참고 항목

클래식 모드는 주로 기본 및 서버리스 모드가 도입되기 전에 만들어진 애플리케이션의 이전 버전과의 호환성을 위한 것입니다. 최후의 수단인 경우를 제외하고는 클래식 모드를 사용하지 않습니다. 새 애플리케이션의 경우 시나리오에 따라 기본 또는 서버리스를 사용합니다. 클래식 모드가 필요하지 않도록 기존 애플리케이션을 다시 설계하는 것이 좋습니다.

클래식은 기본 모드와 서버리스 모드가 혼합된 모드입니다. 클래식 모드에서는 클라이언트 연결이 설정될 때 연결된 허브 서버가 있는지 여부에 따라 연결 형식이 결정됩니다. 허브 서버가 있는 경우 클라이언트 연결은 허브 서버로 라우팅됩니다. 허브 서버를 사용할 수 없는 경우 클라이언트 연결은 클라이언트-서버 메시지를 허브 서버로 전송할 수 없는 제한된 서버리스 모드에서 수행됩니다. 클래식 모드 서버리스 연결은 업스트림 엔드포인트와 같은 일부 기능을 지원하지 않습니다.

어떤 이유로든 모든 허브 서버가 오프라인 상태이면 서버리스 모드에서 연결이 수행됩니다. 사용자는 하나 이상의 허브 서버를 항상 사용할 수 있도록 보장해야 합니다.

올바른 서비스 모드 선택

지금까지 서비스 모드 간 차이점과 적절하게 선택하는 방법을 알아보았습니다. 앞에서 설명한 대로 클래식 모드는 새 애플리케이션 또는 기존 애플리케이션에 권장되지 않습니다. 적합한 서비스 모드를 선택하고 클래식 모드를 기존 애플리케이션에 사용하지 않도록 중지하는 데 도움이 되는 몇 가지 추가 팁은 다음과 같습니다.

  • SignalR 라이브러리의 작동 방식에 이미 익숙하고 자체 호스팅 SignalR에서 이동하여 Azure SignalR Service를 사용하려는 경우 기본 모드를 선택합니다. 기본 모드는 자체 호스팅 SignalR과 정확히 동일한 방식으로 작동하며, SignalR 라이브러리에서 동일한 프로그래밍 모델을 사용할 수 있습니다. SignalR Service는 클라이언트와 허브 서버 간의 프록시로 작동합니다.

  • 새 애플리케이션을 만들고 허브 서버와 서버 연결을 유지하지 않으려면 서버리스 모드를 선택합니다. 서버리스 모드는 Azure Functions에서 작동하므로 서버를 전혀 유지할 필요가 없습니다. REST API, 관리 SDK 또는 함수 바인딩 + 업스트림 엔드포인트를 통해 전이중 통신을 계속 사용할 수 있지만, 프로그래밍 모델은 SignalR 라이브러리와 다릅니다.

  • 클라이언트 연결을 제공하는 허브 서버와 메시지를 클라이언트에 직접 푸시하는 백 엔드 애플리케이션이 있는 경우 기본 모드를 선택합니다. 기본 모드와 서버리스 모드의 주요 차이점은 허브 서버가 있는지 여부와 클라이언트 연결이 라우팅되는 방법입니다. 두 모드에서 모두 REST API/관리 SDK/함수 바인딩을 사용할 수 있습니다.

  • 실제로 혼합 시나리오가 있는 경우 사용 사례를 용도에 따라 서비스 모드가 설정된 여러 SignalR Service 인스턴스로 분리하는 것이 좋습니다. 클래식 모드가 필요한 혼합 시나리오의 예는 두 개의 서로 다른 허브가 동일한 SignalR 리소스에 있는 경우입니다. 한 허브는 기존 SignalR 허브로 사용되고, 다른 허브는 Azure Functions에서 사용됩니다. 이 예의 경우 하나는 기본 모드이고 다른 하나는 서버리스 모드인 두 개의 리소스로 분할해야 합니다.

다음 단계

기본 및 서버리스 모드를 사용하는 방법에 대해 자세히 알아보려면 다음 문서를 참조하세요.