SignalR Service를 사용하여 웹 애플리케이션에서 자동 업데이트 사용

완료됨

폴링 기반 웹 애플리케이션.

다음으로, 폴링에서 벗어나 데이터 업데이트를 연결된 클라이언트로 푸시하는 앱으로 이동합니다. 이 새 설계는 데이터가 변경될 때만 업데이트하여 트래픽을 줄이고 더 효율적인 UI를 만듭니다. 이 업데이트된 솔루션을 제공하는 데 사용할 세 가지 기술은 Azure Cosmos DB, Azure Functions, SignalR입니다.

  • Azure Cosmos DB: 데이터베이스에서 데이터가 변경되면 Azure Cosmos DB에서 변경 피드를 표시합니다. Azure Cosmos DB의 변경 피드 지원은 데이터베이스 컨테이너에서 변경 내용을 수신 대기하여 작동합니다. 그런 다음, 변경된 문서가 수정된 순서대로 정렬된 목록을 출력합니다. 애플리케이션은 변경 피드를 수신 대기할 때 데이터 변경에 자동으로 응답할 수 있습니다.

  • Azure Functions: 이 함수와 원래 getStocks 함수의 주요 차이점은 이제 데이터 변경 내용을 기반으로 하여 함수가 트리거된다는 것입니다. 이전의 연습에서는 클라이언트의 요청에 따라 함수를 트리거하고, Azure Cosmos DB 입력 바인딩을 통해 모든 데이터를 다시 가져왔습니다. Azure Cosmos DB 트리거를 사용하면 데이터 검색의 효율성이 자동으로 향상됩니다. Azure Functions는 Azure Cosmos DB 변경 피드에서 데이터가 업데이트될 때마다 코드를 실행하는 바인딩을 갖추고 있습니다. 함수에서 변경 피드를 수신 대기하면 데이터 변경 내용만 나타내는 데이터 하위 세트로 작업할 수 있습니다.

  • Azure SignalR: 이 서비스는 Azure Functions 앱에서 SignalR 브로드캐스트를 수신 대기하는 클라이언트의 SignalR 연결과의 양방향 통신을 제공합니다.

SignalR 및 영구 연결

폴링과 달리 더 적합한 설계로 클라이언트와 서버 간의 영구 연결을 갖추고 있습니다. 영구 연결을 설정하면 서버에서 데이터를 클라이언트로 자유롭게 푸시할 수 있습니다. 주문형 연결 특성은 네트워크 트래픽과 서버 부하를 줄입니다. SignalR을 사용하면 이 유형의 아키텍처를 애플리케이션에 쉽게 추가할 수 있습니다.

SignalR은 앱이 클라이언트와 서버 간의 양방향 통신을 수행할 수 있게 하는 일련의 기술에 대한 추상화입니다. SignalR은 연결 관리를 자동으로 처리하며, 대화방처럼 메시지를 연결된 모든 클라이언트에 동시에 브로드캐스트할 수 있습니다. 메시지를 특정 클라이언트에 보낼 수도 있습니다. 클라이언트와 서버 간의 연결은 기존 HTTP 연결과 달리 영구적이며, 각 통신에 대해 다시 설정됩니다.

SignalR에서 제공하는 추상화의 주요 이점으로 "전송(transport)" 대체를 지원하는 방법입니다. 전송은 클라이언트와 서버 간에 통신하는 방법입니다. SignalR 연결은 표준 HTTP 요청으로 시작합니다. 서버에서 연결을 평가할 때 가장 적합한 통신 방법(전송)이 선택됩니다. 클라이언트에 대한 영구 연결과 페어링되면 이 함수에서 요청에 따라 개별 클라이언트에 연결할 수 있으며, 이는 실시간 애플리케이션 아키텍처의 기반입니다. 전송은 클라이언트에서 사용할 수 있는 API에 따라 선택됩니다.

  • HTML 5: HTML 5를 지원하는 클라이언트의 경우 기본적으로 WebSocket API 전송이 사용됩니다.
  • WebSockets: 클라이언트에서 WebSocket을 지원하지 않으면 SignalR이 서버 전송 이벤트(EventSource라고도 함)로 대체됩니다.
  • 기타 기술: 이전 클라이언트의 경우 Ajax Long Polling 또는 Forever Frame(IE에만 해당)이 양방향 연결을 가장하는 데 사용됩니다.

SignalR에서 제공하는 추상화 계층은 두 가지 이점을 애플리케이션에 제공합니다. 첫 번째 이점은 앱의 미래를 보장한다는 것입니다. 웹이 발전하고 WebSocket보다 우수한 API를 사용할 수 있게 되면 애플리케이션을 변경할 필요가 없습니다. 새 API를 지원하는 SignalR 버전으로 업데이트할 수 있으며 애플리케이션 코드를 점검할 필요가 없습니다.

두 번째 이점은 SignalR을 사용하면 지원되는 클라이언트 기술에 따라 애플리케이션의 성능이 적절하게 저하될 수 있다는 것입니다. WebSocket을 지원하지 않으면 서버 전송 이벤트가 사용됩니다. 클라이언트에서 서버 전송 이벤트를 처리할 수 없으면 Long Polling 등이 사용됩니다.

SignalR을 사용하여 Azure Cosmos DB 변경 피드를 읽는 함수에서 정보를 브로드캐스트하는 방법을 살펴보겠습니다.