본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 16. 21:53

당신의 PC 모니터는 숫자만 보여줍니다. 이제 당신의 기계를 이해해야 합니다 - Marcin Firmuga

요약

기존의 단순 임계값 기반 시스템 모니터링 방식의 한계를 지적하며, 하드웨어의 상태를 맥락적으로 이해하는 새로운 접근법을 제안합니다. 특정 기계의 과거 데이터와 현재 환경을 학습하여 단순 수치 이상의 통찰을 제공하는 오픈 소스 도구를 소개합니다.

핵심 포인트

  • 기존 모니터링은 단순 임계값(Threshold) 기반으로 맥락 파악이 불가능함
  • 하드웨어의 상태는 주변 온도, 부하, 과거 이력 등 맥락에 따라 다르게 해석되어야 함
  • 기계 고유의 특성을 학습하여 산업 등급의 통계를 제공하는 오픈 소스 도구 개발
  • 단순 수치 비교를 넘어 기계의 상태를 이해하는 코딩 구현 방식 제안

당신의 PC 모니터는 숫자만 보여줍니다. 이제 당신의 기계를 이해해야 합니다.

저는 수리점에서 플라스틱 용접 작업을 하며 보낸 하루를 마치고 저녁에 이 글의 대부분을 작성했습니다.

이것이 솔직한 제 상황입니다. 저축한 돈이 다 떨어졌거든요.
제 IT 애플리케이션들은 침묵을 지키고 있습니다. 그래서 3일 전부터 코드와는 전혀 상관없는 임시직을 시작했고, 밤에 이 글을 쓰고 있습니다. 이 프로젝트 전체가 11개월 동안 구축되어 온 것과 똑같은 리듬으로 말이죠.

하지만 저를 계속 나아가게 하는 부분은 이것입니다:
제가 곧 설명할 내용은 계획이나 피칭(pitch)이 아닙니다.

지금 바로 다운로드하여 한 줄 한 줄 읽어볼 수 있는 무료 오픈 소스(open-source) 도구 내에서 작동하는 코드입니다. 산업 등급(Industrial-grade)의 통계가 당신의 PC에서 실행되며, 당신의 특정 기계를 학습합니다.
교대 근무 사이에 코딩을 하는 누군가에 의해 만들어졌습니다.

왜 모든 전통적인 PC 모니터가 근본적으로 제한적인지, 그리고 특정 하드웨어를 학습한다는 것이 실제로 코드에서 어떻게 구현되는지 보여드리겠습니다.

임계값(threshold)은 설계부터 멍청합니다

어떤 인기 있는 시스템 모니터를 열어도 하는 일은 단 하나입니다:
그래프에 78°C를 그리는 것입니다. 80을 넘으면 빨간색으로 변합니다. 그게 전부입니다.

그 78°C가 더운 7월 오후의 유휴(idle) 상태인지, 아니면 6개월 동안 먼지가 쌓인 채 방치된 쿨러에서 게임을 하고 있는 상태인지 모니터는 전혀 알지 못합니다. 모니터에게 78은 그저 78일 뿐입니다.

임계값(threshold)은 설계부터 멍청합니다.
이것은 모욕이 아니라 그것의 본질입니다.
규칙

"if temp > X, alert"

무엇 위에서 실행되고 있는지에 대한 개념이 없습니다. 어제의 상태를 기억하지 못합니다.
당신의 RTX가 이 게임에서 항상 71°C를 유지했다는 사실도 모르며, 오늘 같은 부하와 같은 실내 온도에서 갑자기 77°C로 치솟더라도 이를 알지 못합니다.
임계값(threshold)은 전 세계의 모든 기계에 대해 누군가가 한꺼번에 하드코딩한 상수와 비교하여 숫자만을 바라볼 뿐입니다.

그리고 이 글에서 가장 중요한 문장은 이것입니다:
당신의 기계는 그 어떤 표(table)에도 들어있지 않습니다.

이러한 도구들이 실제로 작동하는 방식

누군가

"일반적(general)"인 방식이 취약한 네 가지 이유

실리콘 로또 (Silicon lottery).
동일한 생산 라인에서 나온 두 개의 똑같은 RTX 4070도 완전히 동일하지 않습니다.
전압-주파수 곡선 (voltage-frequency curves)이 다르고, 누설 전류 (leakage)가 다르며, 언더볼팅 여유분 (undervolt headroom)도 다릅니다. 그 격차는 50-100 mV에 달할 수 있습니다.

"4070은 -100 mV를 하세요, 저한테는 잘 작동하네요"라는 포럼의 조언은 절반의 기기를 블랙 스크린(black screen)으로 충돌시킬 것입니다. 왜냐하면 절반의 기기는 그 정도의 여유분이 없기 때문입니다.
일반적인 프로필 (general profile)은 물리적으로 당신의 실리콘을 알 방법이 없습니다.
그것은 당신이 소유하지 않은, 평균적인 카드를 보았을 뿐입니다.

노화 및 드리프트 (Aging and drift).
서멀 페이스트 (Thermal paste)는 1년 또는 3년에 걸쳐 밀려 나오고, 온도는 몇 도 상승합니다. 팬 베어링 (Fan bearings)은 마모됩니다. PSU 커패시터 (PSU capacitors)는 노화되어 정전 용량 (capacitance)을 잃습니다.
고정된 프로필은 단 한 번 작성되었기 때문에 결코 적응하지 못합니다.
작년에 설정한 당신의 "안정적인" 오버클럭 (OC)은 오늘 조용한 소프트 에러 (soft-errors)를 일으킵니다.

주변 환경 및 맥락 (Ambient and context).
겨울철 18°C에서의 동일한 부하 (load)와 여름철 28°C에서의 동일한 부하는 서로 다른 코어 온도 (core temperatures)를 생성합니다.

"if temp > X"

규칙은 이에 대해 무지합니다. 그것은 당신의 방, 계절, 또는 당신이 창문을 열었다는 사실을 알지 못합니다.

부하 구성 (Load composition).
"게임 + Discord + 브라우저 + OBS"는 게임만 실행할 때와는 완전히 다른 열 프로필 (thermal profile)을 가집니다.

Blender 렌더링 (한 시간 동안 지속되는 100% 부하)은 게임 (간헐적인 스파이크)과 다르게 작동하며, 암호화폐 채굴기 (항상 최대치로 고정됨)와도 다르게 작동합니다.
일반적인 임계값 (thresholds)은 부하가 고립되어 존재하는 것처럼 취급합니다.
현실 세계에서는 결코 그렇지 않습니다.

전압 (Voltages). 모든 것이 하나로 합쳐지는 지점입니다.

이 글에서 단 하나의 예시만 기억해야 한다면, 이것을 기억하십시오.

12V 레일에 대한 ATX 규격은 ±5%를 허용합니다. 따라서 11.4V에서 12.6V 사이의 모든 값은 공식적으로 "정상 범위 내"에 있습니다.
모든 클래식 모니터는 전압이 그 범위를 벗어날 때만 경고를 보냅니다.

하지만 건강한 PSU (Power Supply Unit)는 그 전체 범위를 떠돌며 작동하지 않습니다.
건강한 PSU는 전압 레일 (rail)을 훨씬 더 타이트하게, 약 11.95-12.05V 근처로 유지합니다. 이는 ±5%가 아닌 실제 ±0.4% 수준입니다.

이제, 당신의 PSU가 노후화되기 시작합니다.
부하 (load)가 걸리면 레일 전압이 11.7V로 떨어집니다.
여전히 "사양 범위 내 (in spec)"에 있습니다! 임계값 (threshold)은 괜찮다고 말하며, 당신은 문제가 없다고 생각할 것입니다.
하지만 이는 수명이 다해가는 커패시터 (capacitor)들이 신호를 보내는 것이며, 시스템이 더 무거운 부하에서 고장 나기 시작하기 몇 달, 때로는 반년 전부터 나타나는 현상입니다.

여기서 사양서 (spec sheet)가 아닌, 당신의 이력 (history)을 바탕으로 계산된 통계가 등장합니다.
PC Workman은 사용자 자신의 샘플에 대한 중앙값 (median)과 MAD (중앙값 절대 편차, median absolute deviation)를 유지하며, Iglewicz-"Hoaglin" 방식에 따른 수정된 Z-점수 (modified Z-score)를 계산합니다:

M = 0.6745 × (x − median) / MAD
|M| > 3.5  → 이상 (anomaly)
|M| > 2.5  → 경고 (warning)

ATX 임계값에는 보이지 않는 11.7V로의 하락은, 당신의 기준인 11.95-12.05V에 비추어 볼 때 3.5를 훨씬 상회합니다. 이상 (Anomaly)입니다.

세상의 그 어떤 임계값도 잡아낼 수 없는 조기 경고입니다. 왜냐하면 임계값은 제조사의 사양을 볼 뿐, 이 특정 PSU가 지난 몇 주 동안 어떻게 작동했는지는 보지 않기 때문입니다.

왜 평균 (mean)이 아니라 중앙값 (median)일까요? 평균은 겁쟁이기 때문입니다.
단 한 번의 전압 스파이크 (spike)만으로도 평균은 치솟고 대역폭은 넓어지며, 그다음 스파이크는 경고 없이 지나가게 됩니다. 도구가 스스로 마취되는 셈입니다.

중앙값은 하나의 이상치 (outlier)에 의해 움직이지 않습니다.
MAD는 그 강건함 (robustness)을 물려받습니다.
여기에 네 가지 넬슨 규칙 (Nelson Rules: 단일 스파이크, 3개 중 2개의 클러스터, 한쪽 방향으로 9개 지점, 6개 지점의 단조 추세)을 추가하면, 그것이 바로 공장에서 수십 년 동안 생산 라인을 감시하기 위해 사용해 온 **전형적인 통계적 공정 제어 (Statistical Process Control)**입니다.
저는 바퀴를 새로 발명하는 것이 아닙니다.
검증된 공정 제어 방식을 당신의 PC 전압 레일로 옮겨온 것입니다.

이것이 하나의 그림에 담긴 논문의 핵심입니다: 절대적인 사양 임계값 대 당신의 이력에 기반한 통계적 제어.

잠깐, "AI"라는 게 정확히 무슨 뜻인가요?

이 말을 명확히 하지 않으면, 이 글 전체가 마케팅용 헛소리와 함께 쓰레기통으로 직행할 것이기에 솔직히 말씀드리겠습니다:

여기서 "AI"란 기존 도구에 챗봇을 덧붙인 것을 의미하지 않습니다.

그것은 '하드웨어를 지능적으로 분석한다'는 식의 GPT를 붙인 것이고, 실제로는 그럴듯한 거짓말을 만들어냅니다.

아래에는 진짜 통계가 있습니다: 온라인 평균 및 분산 계산을 위한
Welford의 알고리즘 (단일 패스, 전체 기록을 RAM에 유지할 필요 없음), 전압에 대한 중앙값(median)과 MAD(Mean Absolute Deviation), 넬슨 규칙(Nelson Rules), 공정 제어(process control) 등이 있습니다.

이것들은 60년대와 90년대의 방법론으로, 지루하고 예측 가능하며, 바로 그것이 제가 신뢰하는 이유입니다. 통계는 환각을 꾸며내지 않습니다.

누군가 '모니터에 AI'라고 말할 때, 95%의 경우 'API를 붙여서 이제 비용만 더 들게 했다'는 의미입니다. 하지만 여기는 정반대입니다. 모델은 계정이나 어딘가로 전송되는 데이터 없이, 오직 사용자의 데이터 위에서 로컬로 학습합니다.

모든 것을 시작하게 하는 여섯 가지 라인

이 전체 컨텍스트 인식 시스템은 아주 작은 하나의 함수에서 시작됩니다. 실제 코드는 다음과 같습니다:

def classify(self, cpu_pct: float, gpu_pct: float) -> str:
    if gpu_pct >= 60:   return "gaming"
    if cpu_pct < 15:    return "idle"
...

다섯 가지 컨텍스트: _gaming(게임), idle(유휴), light(경부하), medium(중부하), heavy(고부하)입니다. 이것이 비밀입니다.

시스템이 컨텍스트를 알게 되면, 그 안에서 '정상'이 무엇을 의미하는지 학습합니다. 일반적인 정상 상태가 아닙니다. 지금 작동하고 있는 사용자 기계에 맞는 정상 상태입니다. 각 스냅샷은 다섯 개의 버킷 중 하나에 들어가고, 각 버킷은 사용자의 지난 14일간의 기록에 대해
Welford의 온라인 알고리즘을 사용하여 자체 학습 기준선(baseline)을 유지합니다.

모든 것에 대한 80°C 임계값은 게으른 방식입니다. 미드 타워에서 게임 중 72°C는 괜찮습니다. 하지만 슬림 노트북이 유휴 상태일 때 같은 72°C라면 무언가 잘못되었다는 의미입니다.

실제로 임계값을 뛰어넘는 곳

예지 보전(Predictive maintenance), 이것이 핵심 기능입니다. MAD와 넬슨 규칙으로 포착된 전압 드리프트는 배터리 수명이 다한 커패시터를 의미합니다. 몇 주에 걸친 체계적인 +3~5°C 상승은 서멀 그리스 교체가 필요하다는 것을 의미하며, CPU가 스로틀링(throttles)되기 전에 포착됩니다. RPM 대비 온도 효율이 떨어지는 것은 히트싱크 내부에 먼지가 있다는 뜻입니다. 문제가 되기 전에 문제를 포착합니다. 임계값은 정의상 이것을 할 수 없습니다. 이미 상황이 나빠질 때까지 기다릴 뿐입니다.

**

좋은 센서가 필요합니다, 그리고 Windows는 이 부분에서 당신을 정말 고통스럽게 만들 수 있습니다.
psutil.sensors_temperatures()는 Windows에서 빈 필드를 반환하며, 온도 정보가 전혀 나오지 않습니다. 끝입니다, 감사합니다.
따라서 무언가 배울 수 있는 데이터라도 얻기 위해 LibreHardwareMonitor와 WMI에 의존해야만 합니다. 저는 이 사실을 문서(documentation)를 통해서가 아니라, 전압 차트가 왜 비어 있는지 이해하기 전까지 저녁 시간을 통째로 날리며 직접 겪어보고 나서야 알게 되었습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0