Portfolio · Smart Factory Interface Monitoring

InterfaceWatchDogv1.4.0

제조 현장의 인터페이스 프로세스를 실시간 감시하고, 장애 발생 시 자동 재시작·알람으로 무중단 운영을 보장하는 Windows 모니터링 솔루션.

.NET 8.0 C# Windows Forms Windows Service SQL Server Serilog WMI xUnit Inno Setup AI-Assisted Dev
Role
기획·설계·개발 단독
Platform
.NET 8 / win-x64
Domain
MES / 스마트팩토리 I/F
Releases
5 릴리스 · 23 커밋
01 · Overview

프로젝트 개요

제조 라인의 시험기 데이터는 데이터 익스포트 프로세스(Interface A)설비 연동 프로세스(Interface B) 두 인터페이스를 거쳐 MES/DB로 연동됩니다. 이 프로세스가 조용히 죽으면 데이터 수집이 끊기지만, 현장에서는 한참 뒤에야 인지하게 됩니다. InterfaceWatchDog는 이 "조용한 장애"를 실시간으로 감지·복구하고 담당자에게 즉시 알리기 위해 설계한 상시 감시 프로그램입니다.

단순 프로세스 생존 체크를 넘어, TCP 포트 응답 확인, 프로세스 정밀 매칭, 자동 재시작, 산출물 파일 흐름 감시, DB 알람 기록까지 운영에 필요한 신뢰성 기능을 한 실행 파일에 담았고, 사용자 로그인 없이도 동작하도록 Windows 서비스트레이 앱 이원 구조로 구현했습니다.

02 · Problem & Solution

문제 정의와 해결

감시 도구의 핵심은 "오탐 없이 진짜 장애만 잡아내는가"입니다. 단순 감시 스크립트로는 걸러지지 않던 문제들을 구조적으로 해결했습니다.

현장에서 겪던 문제

  • 인터페이스 프로세스가 조용히 종료돼 데이터 수집이 중단, 뒤늦게 인지
  • 프로세스가 살아 있어도 실제로는 응답 불능(행) 상태인 경우 탐지 불가
  • 공용 런타임(예: javaw)을 공유해 동일 이름 프로세스가 여러 개라 대상 구분 곤란
  • 순간적인 CPU 부하로 인한 일시적 미감지가 곧바로 오탐(허위 알람)으로 이어짐
  • 장애 이력이 남지 않아 원인 추적·재발 분석이 어려움

설계로 해결한 방식

  • 프로세스 생존 + TCP 포트 헬스체크로 "살아있지만 죽은" 상태까지 탐지
  • 이름·실행경로·명령줄 인수를 조합한 ProcessMatcher로 대상만 정밀 식별
  • FailureGraceCount 디바운스로 N회 연속 미감지 시에만 알람 → 오탐 억제
  • 종료 감지 시 쿨다운·최대 재시도 제한을 둔 안전한 자동 재시작
  • 최종 실패 시 SYS_ALARM 테이블에 비동기 기록(중복 방지 + 복구 후 재발 시 신규 알람)
03 · Architecture

시스템 아키텍처

감시 엔진을 UI/서비스와 분리해, 부팅 시 자동 감시(서비스)와 대화형 제어·재시작(트레이 앱)을 역할별로 나눈 이원 구조. 설정은 파일 기반 핫리로드로 서비스 재시작 없이 반영됩니다.

WATCHED TARGETS Interface A process + TCP port check Interface B process + auto-restart CORE ENGINE WatchDogEngine 감시 루프 · 상태 머신 오케스트레이션 Process Monitor FileActivity Monitor Process Matcher Restart Tracker Actions LogWriter · ProcessRestarter · AlarmWriter ConfigManager config.json 핫리로드 · FileWatcher HOSTS Tray App 대시보드 · 재시작 Windows Service 부팅 시 자동 감시 OUTPUTS Tray 아이콘/알림 일별 로그 파일 SQL Server SYS_ALARM

이원 실행 구조 (Service + Tray)

Windows 서비스는 사용자 로그인 없이 부팅 시점부터 감시를 시작하고, 트레이 앱은 상태 대시보드와 실제 프로세스 재시작을 담당합니다. Session 0 격리로 서비스가 직접 프로세스를 띄울 수 없는 제약을 역할 분리로 우회한 설계입니다. 두 호스트가 동일한 WatchDogEngine과 설정 파일을 공유해 코드 중복 없이 동작합니다.

04 · Engineering Decisions

핵심 기술적 의사결정

"왜 이렇게 만들었는가"를 중심으로, 신뢰성과 운영 편의를 확보한 설계 포인트.

🎯

프로세스 정밀 매칭

이름·실행 경로·명령줄 인수를 조합해 공용 런타임을 공유하는 여러 프로세스 중 감시 대상만 식별.

Why · 오탐/미탐의 근본 원인인 대상 오인을 제거
🩺

TCP 포트 헬스체크

프로세스 생존뿐 아니라 포트 응답까지 확인해 "살아있지만 응답 없는" 행(hang) 상태를 탐지.

Why · 생존 체크만으로는 잡을 수 없는 실질 장애 커버

디바운스 그레이스

FailureGraceCount로 N회 연속 미감지 시에만 알람 발생, 순간 부하로 인한 허위 알람 억제.

Why · 알람 신뢰도 = 담당자 대응률과 직결
🔁

안전한 자동 재시작

쿨다운 대기 + 최대 재시도 제한. 연속 실패 시 Failed 전환 후 DB 알람으로 에스컬레이션.

Why · 무한 재시작 루프(리소스 폭주) 방지
🗄️

비동기 DB 알람 + 중복 방지

장애/재시작 최종 실패 시 SYS_ALARM에 비동기 기록. 동일 장애 중복 억제, 복구 후 재발 시 신규 알람.

Why · 이력 추적성 확보 + 알람 스팸 방지
♻️

설정 핫리로드

FileWatcher로 config.json 변경을 감지해 서비스 재시작 없이 즉시 반영.

Why · 무중단 운영 중 설정 변경 요구 대응
📄

PDF 흐름 감시

산출물 폴더의 유휴(신규 파일 없음)·백로그(미처리 누적) 임계치로 데이터 흐름 이상을 조기 포착.

Why · 프로세스는 정상이어도 파이프라인이 막히는 경우 대응
📦

단일 실행 파일 배포

Self-Contained + PublishSingleFile + ReadyToRun. .NET 런타임 설치 없이 현장 배포, Inno Setup 인스톨러 자동 빌드.

Why · 폐쇄망 제조 환경의 배포 마찰 최소화

상태 머신 (트레이 아이콘 색상)

정상
경고
재시작 중
장애 (Failed)
비활성
05 · AI-Assisted Development

AI를 활용한 개발

이 프로젝트는 AI 코딩 도구를 적극 활용해 설계·구현·문서화 전 과정을 가속했습니다. AI는 구현 속도를 끌어올리는 도구로 쓰되, 요구사항 정의·아키텍처 결정·품질 검증은 제조 인터페이스 운영 경험을 바탕으로 직접 주도했습니다.

🧭

설계는 사람이, 구현은 AI와 함께

이원 실행 구조, 상태 머신, 디바운스·쿨다운 정책 등 핵심 설계 판단은 직접 내리고, 보일러플레이트·반복 로직 구현과 리팩터링을 AI와 페어링해 진행했습니다.

Value · 판단은 유지하고 속도만 가져가는 협업 방식

개발 생산성 향상

Windows Forms UI, WMI 프로세스 조회, SqlClient 연동 등 익숙지 않은 API도 AI 도움으로 빠르게 프로토타이핑하고, 단독 개발로 5개 릴리스까지 완성했습니다.

Value · 학습 비용이 큰 영역의 진입 장벽 완화

AI 산출물 검증 습관

AI가 생성한 코드를 그대로 신뢰하지 않고, xUnit 테스트와 실제 현장 시나리오로 검증한 뒤 반영. 감시 로직의 오탐/미탐 케이스를 직접 설계해 확인했습니다.

Value · AI 결과의 정확성을 판별하는 엔지니어 역량
📝

문서화·자동화까지 확장

README, 설정 가이드, PowerShell 빌드/패치 스크립트, 인스톨러 구성까지 AI를 활용해 운영·배포 문서와 자동화를 함께 정비했습니다.

Value · 코드 외 산출물의 완성도까지 확보

AI는 결과물을 대신 만들어 주는 존재가 아니라, 더 빠르고 넓게 시도하게 해 주는 레버리지라고 봅니다. 어떤 문제를 풀지 정의하고, 나온 결과가 맞는지 판단하는 몫은 여전히 개발자에게 있다는 관점으로 이 프로젝트를 진행했습니다.

06 · Quality & Impact

품질 관리와 성과

감시 도구 자체의 신뢰성을 담보하기 위해 테스트·버전 관리·배포 자동화를 갖췄습니다.

5
정식 릴리스
93.5%
C# 코드 비중
2
실행 모드 (서비스·트레이)
0→1
수동 인지 → 자동 복구

엔지니어링 성숙도

xUnit + FluentAssertions + NSubstitute 기반 단위·통합 테스트로 감시 로직(매칭, 디바운스, 재시작 추적)을 검증했습니다. 계층을 Core(Actions/Models/Monitors) / UI / Service로 분리해 감시 엔진을 UI와 독립적으로 테스트 가능하게 설계했고, PowerShell 스크립트로 인스톨러 빌드패치 빌드를 자동화했습니다. Serilog 구조적 로깅으로 일별 로그를 남겨 현장 트러블슈팅 근거를 확보했습니다.

비즈니스 임팩트

인터페이스 장애를 사람이 뒤늦게 인지하던 방식에서 실시간 자동 감지·복구로 전환했습니다. 단순 재시작으로 회복 가능한 장애는 사람 개입 없이 처리되고, 회복 불가 장애만 DB 알람으로 에스컬레이션되어 담당자의 대응 부담과 데이터 유실 위험을 동시에 줄였습니다. MES/WMS/ERP 인터페이스 운영 경험(6년차)에서 나온 실제 운영 페인포인트를 제품화한 사례입니다.

07 · Tech Stack

기술 스택

Application

Runtime.NET 8.0 / win-x64
UIWindows Forms
BackgroundWindows Service
LanguageC#
배포Self-Contained SingleFile

Libraries & Tooling

DBMicrosoft.Data.SqlClient 7.0
LoggingSerilog 4.1 + Sinks.File
ProcessSystem.Management (WMI)
TestxUnit · FluentAssertions · NSubstitute
InstallerInno Setup 6 · PowerShell
08 · Takeaways

배운 점 & 확장 방향