APM 시스템 기술 아키텍처 소개
1. Agent — C 기반 모니터링 데이터 수집 Agent
APM Agent는 대상 시스템에 설치되어 시스템 및 애플리케이션의 성능 데이터를 실시간으로 수집하고, 수집된 데이터를 중앙 수집 서버로 전송하는 경량형 모니터링 모듈이다.
Agent는 C 언어 기반의 Native Application으로 구현되며, 서버 시스템에 상주하면서 주기적인 Polling 또는 Event 기반 수집 방식을 통해 모니터링 데이터를 획득한다.
1.1 수집 대상
Agent에서 수집하는 주요 모니터링 대상은 다음과 같다.
| System | CPU, Memory, Disk, Network, Load Average, 시스템 자원 사용률 |
| DBMS | Session, Connection, Transaction, SQL 수행정보, Lock, Buffer/Cache, DB Resource |
| Middleware | Connection Pool, Queue, Thread, Transaction, 처리량, 응답시간 |
| Process | Process CPU, Memory, Thread, Process 상태, Process 수 |
| Application | Transaction, TPS, 응답시간, 오류율, Application Resource, 사용자 요청 정보 |
Agent는 수집 대상별 Collector 또는 Monitor Module을 통해 데이터를 수집하고, 내부적으로 수집 데이터를 표준 데이터 구조로 변환 및 정규화(Normalization) 한다.
1.2 데이터 전송
수집된 데이터는 Agent에서 중앙 수집 서버로 직접 TCP 통신하는 방식이 아니라 Redis를 Message Transport Layer로 활용하여 비동기 방식으로 전송한다.
[System / DBMS / Middleware / Process / Application]
│
▼
┌─────────────────┐
│ APM Agent │
│ C 기반 │
│ Collector │
└────────┬────────┘
│
JSON Serialize
│
▼
┌─────────────────┐
│ Redis │
│ Message Transport│
└────────┬────────┘
│
▼
APM Server
데이터 전송 포맷은 JSON(JavaScript Object Notation) 을 사용한다.
즉, Agent에서 수집된 Monitoring Data를 JSON 형태로 Serialization한 후 Redis에 전달하고, 서버에서는 Redis로부터 데이터를 수신하여 Deserialization 후 내부 데이터 구조로 변환한다.
1.3 주요 기술적 특징
- C 기반 Native Agent
- 저오버헤드(Low Overhead) 데이터 수집
- 실시간/주기적 모니터링
- Monitoring Data Collector 구조
- JSON 기반 Data Serialization
- Redis 기반 Message Transport
- 비동기 데이터 전송 구조
- 수집 대상별 Collector 모듈화
- Agent와 Server 간 Loose Coupling
2. APM Server — 데이터 수집 및 서비스 Server
APM Server는 Agent와 Client 사이에서 Monitoring Data의 수집, 저장, 조회 및 전달을 담당하는 중앙 처리 서버이다.
Server는 C 언어 기반으로 구성되며 크게 Agent 대응 영역과 Client 대응 영역으로 구분할 수 있다.
2.1 Agent 대응 — Monitoring Data 수집 및 저장
Agent에서 Redis를 통해 전달한 JSON 데이터를 Server가 수신한다.
Agent
│
│ JSON
▼
Redis
│
▼
┌───────────────────────────┐
│ APM Server │
│ │
│ Redis Receiver │
│ │ │
│ ▼ │
│ JSON Parser │
│ │ │
│ ▼ │
│ Data Validation │
│ │ │
│ ▼ │
│ Data Normalization │
│ │ │
│ ├──────────► DB │
│ │ │
│ └──────────► Shared │
│ Memory │
└───────────────────────────┘
Server는 Redis를 통해 Agent가 전달한 데이터를 수신하고 다음과 같은 처리 과정을 수행한다.
Redis Receive → JSON Parsing → Validation → Data Processing → Storage
수신 데이터는 실시간 조회가 필요한 데이터와 장기 보관이 필요한 데이터로 구분하여 처리한다.
Shared Memory
실시간 모니터링 화면에서 빠르게 조회해야 하는 데이터는 Shared Memory 기반의 In-Memory Data Store에 저장한다.
Shared Memory를 사용하는 목적은 DB I/O를 최소화하고 Client의 반복적인 조회 요청에 대해 Low Latency 데이터 제공을 하기 위함이다.
Database
장기적인 데이터 보관이 필요한 Monitoring Data는 Database에 저장한다.
Database에는 다음과 같은 용도의 데이터가 저장될 수 있다.
- Historical Monitoring Data
- Performance Statistics
- Transaction History
- 장애 및 Event 정보
- 사용자 조회 이력
- 통계 및 분석 데이터
따라서 서버의 저장 구조는 다음과 같이 구성된다.
┌───────────────┐
│ APM Server │
└───────┬───────┘
│
┌──────────┴──────────┐
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Shared │ │ Database │
│ Memory │ │ │
│ │ │ Historical │
│ Real-Time │ │ Data │
│ Data │ │ │
└─────────────┘ └─────────────┘
즉,
Shared Memory = 실시간 데이터 처리 및 조회 최적화
Database = 장기 데이터 저장 및 이력/통계 조회
라는 역할 분담을 갖는다.
2.2 Client 대응 — Monitoring Data 제공
APM Client가 특정 Monitoring Data를 요청하면 Server는 요청 내용을 분석하여 Shared Memory 또는 Database에서 필요한 데이터를 조회한다.
APM Client
│
│ Request
▼
Redis
│
▼
APM Server
│
├────► Shared Memory
│
└────► Database
│
▼
Query / Data Processing
│
▼
JSON Serialize
│
▼
Redis
│
▼
APM Client
Client의 요청에 따라 Server는 다음과 같은 처리를 수행한다.
- Client Request 수신
- Request Message Parsing
- 요청 대상 및 조회 조건 분석
- Shared Memory 또는 Database 조회
- 데이터 가공 및 Aggregation
- JSON Serialization
- Redis를 통한 Client 전송
특히 실시간 Dashboard의 경우 Shared Memory를 우선적으로 활용하여 빠른 응답시간과 높은 처리량(Throughput) 을 확보할 수 있다.
2.3 Server의 핵심 역할
APM Server는 단순한 데이터 중계 역할이 아니라 다음과 같은 기능을 수행하는 Central Monitoring Data Processing Layer이다.
- Agent Data 수집
- JSON Parsing / Serialization
- Data Validation
- Data Normalization
- Real-Time Data Management
- Shared Memory Management
- Historical Data Persistence
- Monitoring Data Query
- Data Aggregation
- Client Request Processing
- Redis Message Processing
- Agent/Client 간 데이터 중계
따라서 전체 시스템에서 Server는 Data Collection Layer와 Presentation Layer를 연결하는 Core Processing Layer의 역할을 수행한다.
3. APM Client — C# 기반 Monitoring Console
APM Client는 최종 사용자가 시스템의 상태와 성능을 확인하기 위한 Monitoring Console / Visualization Layer이다.
C# 기반의 Windows Desktop Application으로 구현하며, WinForms MDI(Multiple Document Interface) Architecture를 기반으로 여러 모니터링 화면을 하나의 Main Application에서 관리한다.
3.1 데이터 요청 및 수신 구조
Client는 사용자가 화면을 실행하거나 Monitoring 화면을 활성화하면 필요한 데이터를 Server에 요청한다.
┌──────────────────────────────┐
│ APM Client │
│ C# / WinForms │
│ │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │화면1 │ │화면2 │ │화면3 │ │
│ │Dash │ │Grid │ │Chart │ │
│ └──┬───┘ └──┬───┘ └──┬───┘ │
│ └────────┼────────┘ │
│ ▼ │
│ Request Manager │
└──────────────┬───────────────┘
│
▼
Redis
│
▼
APM Server
Client에서 발생한 요청은 JSON으로 Serialization하여 Redis를 통해 Server에 전달한다.
Server의 응답 역시 JSON 형태로 전달되며 Client에서는 이를 Parsing하여 해당 화면에서 사용할 수 있는 데이터 모델로 변환한다.
3.2 Push / Pop 기반 데이터 처리
Client와 Server 사이의 데이터 교환은 Redis를 Transport Layer로 사용한다.
개념적으로 다음과 같은 구조를 가진다.
Client
│
│ Push Request
▼
Redis
│
▼
Server
│
│ Data Processing
▼
Redis
│
│ Pop Response
▼
Client
Client에서는 화면별 요청을 생성하고 Redis를 통해 Server에 전달한다.
Server에서 처리된 결과는 다시 Redis를 통해 Client로 전달되며, Client는 수신 데이터를 해당 화면에 전달한다.
이를 Message-based Asynchronous Communication Architecture로 볼 수 있다.
3.3 MDI 기반 Monitoring 화면
Client는 하나의 Main Form에서 여러 Monitoring 화면을 Child Form으로 관리하는 MDI Architecture를 사용한다.
예를 들어 다음과 같은 화면을 동시에 운영할 수 있다.
APM Main Client
│
├── System Monitoring
│
├── DBMS Monitoring
│
├── Middleware Monitoring
│
├── Process Monitoring
│
├── Application Monitoring
│
├── Transaction Monitoring
│
├── Performance Dashboard
│
└── Statistics / Analysis
각 화면은 독립적으로 Server에 데이터를 요청하고, 수신된 데이터를 해당 화면의 Visualization Component를 통해 표현한다.
3.4 Monitoring Data Visualization
Client에서 제공하는 주요 데이터 표현 방식은 다음과 같다.
Dashboard
시스템 전체 상태를 한눈에 파악할 수 있도록 주요 성능지표를 KPI(Key Performance Indicator) 형태로 표현한다.
예:
- CPU Usage
- Memory Usage
- TPS
- Response Time
- Error Count
- Active Session
- Process Count
- Queue Size
Grid
대량의 Monitoring Data 또는 상세 데이터를 Tabular Data 형태로 표시한다.
예:
- Process List
- Transaction List
- SQL List
- Application Request List
- 장애/Event List
Chart
시간에 따른 성능 변화를 시각화한다.
예:
- CPU Trend
- Memory Trend
- TPS Trend
- Response Time Trend
- Transaction Trend
- Error Trend
이를 통해 사용자는 현재 상태뿐만 아니라 Time-Series 기반의 Performance Trend를 분석할 수 있다.
전체 시스템 아키텍처
전체적으로 APM 시스템은 다음과 같은 3-Tier / Layered Architecture 형태로 구성할 수 있다.
┌─────────────────────────────────────────────────────────┐
│ APM CLIENT │
│ C# / WinForms │
│ │
│ Dashboard │ Grid │ Chart │ Monitoring │ Statistics │
│ │ │
│ Request / Response │
└─────────────────────────┬───────────────────────────────┘
│
│ JSON
│ Redis
▼
┌─────────────────────────────────────────────────────────┐
│ APM SERVER │
│ C │
│ │
│ Agent Receiver │
│ │ │
│ ├── JSON Parser │
│ ├── Data Validation │
│ ├── Data Processing │
│ ├── Data Aggregation │
│ │ │
│ ├──────────────► Shared Memory │
│ │ (Real-Time Data) │
│ │ │
│ └──────────────► Database │
│ (Historical Data) │
│ │
│ Client Request Handler │
└─────────────────────────┬───────────────────────────────┘
│
│ JSON
│ Redis
▼
┌─────────────────────────────────────────────────────────┐
│ APM AGENT │
│ C │
│ │
│ System Collector │
│ DBMS Collector │
│ Middleware Collector │
│ Process Collector │
│ Application Collector │
│ │
│ Monitoring Data Collection │
└─────────────────────────────────────────────────────────┘
기술 구성 요약
| 역할 | 데이터 수집 | 데이터 수집/처리/저장/제공 | 데이터 요청/표현 |
| 개발언어 | C | C | C# |
| 주요 기능 | Monitoring Data Collection | Data Processing & Management | Visualization |
| 통신 | Redis | Redis | Redis |
| 데이터 포맷 | JSON | JSON | JSON |
| 실시간 데이터 | 수집 | Shared Memory | Dashboard/Grid/Chart |
| 이력 데이터 | - | Database | Statistics/Analysis |
| 구조 | Collector | Processing Layer | Presentation Layer |
| 통신방식 | Message-based | Message-based | Message-based |
| 주요 특징 | Low Overhead | High Throughput / Low Latency | Rich Visualization |
한 문장으로 정리하면
APM 시스템은 C 기반 Agent가 System/DBMS/Middleware/Process/Application의 성능 데이터를 수집하고, Redis/JSON 기반의 Message-Oriented Communication을 통해 C 기반 Server로 전달하며, Server는 Shared Memory와 Database를 이용하여 실시간 및 이력 데이터를 관리하고, C# 기반 Client가 이를 요청하여 Dashboard, Grid, Chart 등의 형태로 시각화하는 3-Tier Monitoring Architecture로 구성된다.
'c# 언어 > CHAT.GPT' 카테고리의 다른 글
| Kotlin - Android용 APM Agent를 개발할 때 의미가 큰 기술 (1) | 2026.09.03 |
|---|---|
| (Web.APM) Redis - Java API Server - WebSocket / REST - TypeScript - React (0) | 2026.09.03 |
| 기본적으로 부모 컨트롤의 Font를 상속(inherit) 받습니다. (0) | 2026.08.28 |
| Designer.cs> BeginInit() / EndInit() (0) | 2026.08.28 |
| Tcp 송수신 & SendMessage 송수신과의 차이 (0) | 2026.07.07 |












