MS WPF 차트 제어 및 LightningChart .NET 검토
소개
안녕하세요, 저는 Omar입니다. 이 글에서는 Microsoft WPF 차트 컨트롤 라이브러리에 초점을 맞추어 기술 사양, 장점, 단점을 검토합니다. 또한 LightningChart .NET 라이브러리와의 간단한 비교도 함께 다룹니다.
WPF에 대해 충분히 익숙하지 않다면, 이 글을 보완해 주는 다음 아티클들을 참고하시길 권장합니다:
이 간단한 소개를 마치고, 이제 시작해 보겠습니다!
MS WPF 차트 컨트롤이란 무엇인가요?
Microsoft의 WPF 차트 컨트롤은 WPF(Windows Presentation Foundation)로 구축된 데스크톱 애플리케이션에서 데이터를 시각적으로 표현할 수 있도록 해줍니다. 이러한 컨트롤은 애플리케이션에서 매출 추이 또는 시간에 따른 센서 데이터와 같이 정보를 이해하기 쉬운 형태로 표시해야 할 때 유용합니다.
과거에 Microsoft는 WPF Toolkit이라는 라이브러리를 제공했으며, 이 라이브러리에는 막대 차트, 파이 차트, 라인 차트와 같은 기본적인 차트 컨트롤이 포함되어 있었습니다. 이는 WPF 애플리케이션에서 단순한 차트 요구 사항을 충족하는 데 적합한, 비교적 간단한 컨트롤들이었습니다.
그러나 WPF Toolkit은 더 이상 적극적으로 유지 관리되지 않으며, Microsoft는 표준 WPF 라이브러리에 고급 차트 기능을 추가하지 않았습니다. 보다 정교한 차트나 인터랙티브한 시각화를 원하는 개발자들은 점차 서드파티 차트 라이브러리로 눈을 돌리게 되었습니다. LightningChart .NET과 같은 옵션은 인터랙티브 데이터 포인트, 실시간 업데이트, 더욱 세밀하게 사용자 정의할 수 있는 디자인 등 훨씬 폭넓은 차트 유형과 기능을 제공합니다. LightningChart .NET은 기존의 MS WPF 차트 컨트롤 툴킷에 비해 보다 현대적이고 기능이 풍부한 경험을 제공합니다.
그렇다고 해서, 기본적인 차트만 필요한 프로젝트라면 System.Windows.Controls.DataVisualization 네임스페이스로 파이 차트나 라인 차트와 같은 기능을 여전히 구현할 수 있습니다. 하지만 기본 수준을 넘어서는 요구 사항이 있다면, 서드파티 솔루션을 검토하는 것이 일반적으로 더 나은 선택입니다.
MS WPF 차트 제어 기능 검토
WPF Toolkit Extended(NuGet에서 System.Windows.Controls.DataVisualization.Toolkit 으로 제공됨)에는 주요 Chart 컨트롤과 몇 가지 기본 차트 유형이 포함되어 있습니다:
열(세로 막대)

라인 (라인)

면적(면적)

파이 (원형 차트)

바(가로 바)

산점(산점도)

이 라이브러리는 기본적인 요구 사항에는 사용하기 쉽고 편리하지만, 다소 오래되었으며 성능과 기능 옵션 측면에서 제한적입니다. 보다 고급 기능이 필요한 경우에는 현재 LightningChart .NET과 같은 라이브러리가 더 널리 사용되고 있습니다.
Microsoft WPF 차트의 한계
Microsoft의 차트 라이브러리에 대한 공식적인 성능 정보는 거의 제공되지 않지만, 간단한 조사를 통해 다음과 같은 결론에 도달했습니다:
MS WPF 차트 툴킷:
기본적인 요구 사항만 있다면 무료로 쉽게 사용할 수 있는 차트입니다.
성능과 기능 측면에서 다소 오래되었고 제한적입니다.
보다 고급 시나리오에서는 현재 LightningChart .NET과 같은 라이브러리가 더 일반적으로 사용됩니다.
이 라이브러리는 소규모 데이터셋에 적합하며, 특히 소수의 시리즈나 정적인 데이터를 다루는 애플리케이션에서는 성능 문제를 거의 경험하지 않을 것입니다. 그러나 가장 큰 한계는 동적 차트나 대용량 데이터를 처리할 때의 성능입니다. 많은 데이터 포인트나 실시간 업데이트(예: 센서 그래프나 비즈니스 지표)가 포함된 시나리오에서는 이 라이브러리가 느려질 수 있습니다. 마지막으로 간단히 언급하자면, LightningChart .NET 라이브러리는 앞서 언급한 MS WPF Charts Toolkit의 모든 한계를 극복합니다.
LightningChart .NET
LightningChart .NET은 방대한 문서, 아티클, 튜토리얼, 그리고 샘플 프로젝트를 제공하는 상용 라이브러리입니다. 다음은 LightningChart .NET이 제공하는 주요 기술적 기능에 대한 간단한 개요입니다:
2차원 차트

라인(line), 영역(area), 막대(bar), 포인트(point), 컬럼(column), 버블(bubble), 캔들스틱(candlestick) 등 다양한 차트 유형을 지원합니다.
시리즈당 수백만 개의 데이터 포인트를 성능 저하 없이 처리할 수 있습니다.
GPU 가속 최적화를 지원합니다.
3D 차트

3D 서피스(Surface Mesh, Waterfall, PointCloud, 3D Heatmaps)를 지원합니다.
회전, 확대/축소, 카메라 패닝을 지원합니다.
볼류메트릭 렌더링, 인터랙티브 3D 축, 사용자 정의 가능한 시점을 제공합니다.
과학적 / 의료 시각화

ECG, EMG, 실시간 신호 모니터링을 지원합니다.
자동 축 조정을 제공하는 오실로스코프 모드를 지원합니다.
주파수 스펙트럼 및 FFT(Fast Fourier Transform)를 지원합니다.
지리공간 지도 제작 (지도 및 GIS)

히트맵과 지리적 데이터 레이어 위에 데이터를 표시할 수 있습니다.
직교 좌표계(Cartesian)와 지리 좌표계(위도/경도, lat/lon)를 모두 지원합니다.
고급 시리즈 유형

폴라 시리즈(polar series), 방사형 시리즈(radial series), 스플라인 시리즈(spline series), 간트 차트(Gantt charts) 등을 지원합니다.
게이지(gauges), 스피드미터(speedometers), 레이더 차트(radar charts)를 제공합니다.
멀티채널 / 실시간

수백 개의 시리즈 또는 신호를 동시에 시각화할 수 있습니다.
초저지연(ultra-low latency)을 제공하여 라이브 모니터링 및 데이터 수집 시스템에 이상적입니다.
고급 상호작용
툴팁, 확대/축소(zoom), 이동(pan), 포인트 선택을 지원합니다.
좌표 동기화, 스마트 커서, 연결된 차트를 제공합니다.
중첩 차트(nested charts) 및 플로팅 시각화 창을 지원합니다.
수출
이미지, 비디오, 또는 원시 데이터(raw data)로 내보낼 수 있습니다.
보고서 또는 스트리밍을 위한 실시간 차트 캡처를 지원합니다.
렌더링 엔진
GDI+나 CPU 기반이 아닌 DirectX 기반 렌더링을 사용합니다.
이를 통해 수백만 개의 데이터 포인트가 화면에 표시되는 상황에서도 극도의 성능을 제공합니다.
다음과 같은 요구 사항이 있다면 LightningChart .NET이 적합합니다:
수백만 개의 포인트를 처리하는 극한의 성능
실시간 텔레메트리, 오실로스코프, 또는 신호 처리
인터랙티브한 3D 시각화
과학 또는 의료 시각화 도구
전문적인 데이터 분석 기능
LC .NET 성능
LightningChart .NET은 성능 테스트에서 뛰어난 결과를 보여줍니다.
렌더링 성능: 중급 사양의 PC에서도 최소 30 FPS의 업데이트 속도를 유지하면서 수십억 개의 데이터 포인트를 실시간으로 표시할 수 있습니다.
성능 비교: SciChart와의 테스트에서, 특정 시나리오에서는 최대 3000배 더 빠른 성능을 입증했으며, SciChart가 리샘플링(resampling) 기법을 사용하는 경우에도 상당한 성능 우위를 유지합니다.
3D 차트 성능: 3D 메시(MeshModel) 및 히트맵과 같은 시각화에서는 경쟁 제품 대비 최대 13배 빠른 속도를 기록했으며, 특정 테스트에서 평균 90 FPS(경쟁 제품은 39.28 FPS)를 달성했습니다.
성능 테스트에 대한 자세한 내용은 관련 자료를 참고하실 수 있습니다.
결론
WPF 애플리케이션에서 차트를 사용할 때, Microsoft WPF Chart Controls와 같이 기본으로 제공되는 기능을 선택할 수도 있고, LightningChart .NET과 같은 고성능 솔루션을 선택할 수도 있습니다. 처음에는 두 가지 모두 동일한 작업(차트에 데이터 표시)을 수행하는 것처럼 보일 수 있지만, 실제로는 매우 큰 차이가 존재합니다. 이제 그 차이를 살펴보겠습니다.