19.실시간 모니터링 시스템 구축 C#과 SignalR 활용, C#과 SignalR을 이용한 실시간 데이터 업데이트 구현

19. 실시간 모니터링 시스템 구축: C#과 SignalR 활용

제조업체와 공장 자동화 시스템에서 실시간 모니터링은 생산성 향상과 장비 관리의 최적화를 위한 필수 요소입니다. 실시간으로 데이터를 모니터링하고, 즉각적인 피드백을 제공하는 시스템은 공장의 운영 효율성을 크게 개선할 수 있습니다. 이번 글에서는 C#과 SignalR을 활용하여 실시간 데이터 업데이트를 구현하는 방법에 대해 자세히 설명하겠습니다.

1. 실시간 모니터링 시스템의 필요성

현대의 제조 환경에서는 제품의 품질 관리, 설비 상태 모니터링, 생산 현황 파악 등 다양한 정보를 실시간으로 처리해야 합니다. 이를 통해:

  • 신속한 의사 결정
  • 설비 가동률 향상
  • 예방 유지보수 및 다운타임 최소화

이와 같은 이유로, 데이터를 실시간으로 수집하고 이를 사용자에게 제공하는 시스템이 필수적으로 요구됩니다.

2. C#과 SignalR의 개요

SignalR은 ASP.NET을 위한 라이브러리로, 웹 애플리케이션에서 서버와 클라이언트 간의 실시간 통신을 쉽게 구현할 수 있게 도와줍니다. WebSocket을 기반으로 동작하며, 연결이 불안정할 경우 폴백 방법을 제공하여 안정적인 통신을 보장합니다. 이와 같은 특징으로 인해 실시간 모니터링 시스템 구축에 매우 적합합니다.

2.1 SignalR의 기능

  • 실시간 데이터 전송: 클라이언트와 서버 간에 즉각적인 데이터를 전송할 수 있습니다.
  • 자동 연결 관리: 클라이언트와 서버 간의 연결이 끊어질 경우 자동으로 재연결합니다.
  • 다양한 클라이언트 지원: ASP.NET, JavaScript, Java 등 다양한 플랫폼에서 사용할 수 있습니다.

3. 시스템 아키텍처

실시간 모니터링 시스템은 다음과 같은 구성 요소로 이루어집니다:

  • 데이터 수집기: 센서나 PLC와 같은 장치로부터 데이터를 수집.
  • 서버: C#으로 구축된 SignalR 서버를 통해 실시간 데이터 처리 및 전송.
  • 클라이언트: 웹 애플리케이션 또는 데스크탑 애플리케이션에서 데이터를 시각화.

4. C# 및 SignalR을 이용한 실시간 데이터 업데이트 구현

4.1 SignalR 설치

먼저, Visual Studio에서 새로운 ASP.NET Core 웹 애플리케이션을 생성한 후, SignalR 라이브러리를 설치합니다. 다음과 같은 NuGet 패키지를 설치합니다:

Install-Package Microsoft.AspNetCore.SignalR

4.2 Hub 클래스 작성

SignalR의 중심이 되는 Hub 클래스를 작성합니다. 이 클래스는 클라이언트와의 통신을 처리합니다.

using Microsoft.AspNetCore.SignalR;

public class MonitoringHub : Hub
{
    public async Task SendMonitoringData(string data)
    {
        await Clients.All.SendAsync("ReceiveMonitoringData", data);
    }
}

4.3 Startup 설정

Startup.cs 파일에서 SignalR을 설정합니다.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub("/monitoringHub");
    });
}

4.4 클라이언트 측 코드

실시간 데이터를 표시하기 위한 클라이언트 측 JavaScript 코드를 설정합니다.

<!DOCTYPE html>
<html>
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft.signalr/3.1.9/signalr.min.js"></script>
</head>
<body>
    <div id="data-container"></div>

    <script>
        const connection = new signalR.HubConnectionBuilder()
            .withUrl("/monitoringHub")
            .build();

        connection.on("ReceiveMonitoringData", function (data) {
            $("#data-container").append("<p>" + data + "</p>");
        });

        connection.start().catch(function (err) {
            return console.error(err.toString());
        });
    </script>
</body>
</html>

4.5 데이터 발송 메커니즘

서버 측에서는 데이터를 주기적으로 수집하고, 이를 SignalR Hub를 통해 클라이언트로 전송합니다. 예를 들어, Timer를 사용해 일정 시간마다 데이터를 전송할 수 있습니다.

public class DataCollector
{
    private readonly IHubContext _hubContext;

    public DataCollector(IHubContext hubContext)
    {
        _hubContext = hubContext;
    }

    public async Task StartDataCollection()
    {
        while (true)
        {
            var data = GetDataFromSensors(); // 여기에 데이터를 가져오는 논리 구현
            await _hubContext.Clients.All.SendAsync("ReceiveMonitoringData", data);
            await Task.Delay(5000); // 5초 간격
        }
    }
}

5. 데이터 시각화 및 추가 기능

실시간으로 수신한 데이터를 다양한 형식으로 시각화할 수 있습니다. 예를 들어, 차트 라이브러리를 사용하여 생산량, 설비 상태 등을 그래픽으로 표현할 수 있습니다. 추가적으로, 사용자에게 알림을 질문하기 위한 기능을 추가하여 효과적으로 사용자 인터페이스를 개선할 수 있습니다.

6. 결론

SignalR을 활용한 실시간 모니터링 시스템은 현대 제조업의 필수 요소이며, C#을 이용하여 효율적으로 구현할 수 있습니다. 지속적으로 변화하는 시장 요구에 대처하기 위해 실시간 데이터 분석 및 모니터링 시스템은 점점 더 중요해지고 있습니다. 이 글에서 소개한 방법을 통해 여러분의 제조 공장에도 실시간 모니터링 시스템을 성공적으로 구축할 수 있기를 바랍니다.