⚙️ Signalcraft AI 시스템 개요
Signalcraft AI 시스템은 AI 기반 오디오 분석을 통해 산업용 컴프레서(압축기)의 이상 징후를 감지하고 고장을 예방하는 모니터링 플랫폼입니다. 이 시스템은 **Node.js (Express)**와 Python (Flask) 서버를 동시에 사용하는 듀얼 백엔드 아키텍처를 특징으로 하며, Nginx와 PM2를 통해 단일 EC2 인스턴스에서 효율적으로 운영됩니다.
🎯 시스템 목적 및 핵심 기능
이 시스템의 주요 목적은 상업용 냉동 장비와 같은 산업용 컴프레서의 오디오 신호를 지속적으로 분석하여, 장비 고장이 발생하기 전에 이상 징후를 감지하고 재고 손실과 가동 중단 시간을 줄이는 것입니다.
| 기능 | 설명 | 구현 |
| 🧠 AI 오디오 분석 | 앙상블 머신러닝 모델을 사용하여 컴프레서 오디오를 실시간으로 분석합니다. | ensemble_ai_service (Random Forest, SVM 등) |
| 🕒 24/7 모니터링 | ESP32 IoT 기기를 통해 센서 데이터를 중단 없이 수집하고 처리합니다. | sensor_monitoring_service |
| 📢 다채널 알림 | 이메일, SMS, 카카오 메시지, SSE를 통해 사용자에게 알림을 전송합니다. | notification_service, kakao_notification_bp |
| 👤 사용자 관리 | 카카오 소셜 로그인(OAuth)과 일반 이메일/비밀번호 로그인을 모두 지원합니다. | enhanced_auth_bp, kakaoRoutes |
| 📊 실시간 대시보드 | WebSocket/SSE를 통해 실시간 모니터링 데이터를 시각화합니다. | realtime_streaming_service |
| 📱 모바일 접근 | 원격 모니터링을 위한 모바일 앱 인터페이스를 제공합니다. | mobile_app_bp |
Sheets로 내보내기
🏗️ 시스템 아키텍처
Signalcraft는 듀얼 백엔드 아키텍처를 채택하여 각 기술 스택의 장점을 극대화했습니다.
- Node.js (Express): 비동기 I/O 처리 능력의 이점을 살려 인증, 세션 관리, 실시간 알림(SSE) 등 I/O 집약적인 작업을 처리합니다.
- Python (Flask): 강력한 머신러닝 생태계를 활용하여 AI 모델 추론, 데이터 분석 등 CPU 집약적인 작업을 담당합니다.
- Nginx: 외부의 모든 요청을 받는 단일 진입점(Entry Point) 역할을 하며, URL 패턴에 따라 요청을 적절한 백엔드 서버로 라우팅하는 리버스 프록시로 작동합니다.
- PM2: 두 백엔드 애플리케이션의 실행, 자동 재시작, 로깅 등 프로세스 생명주기를 관리합니다.
💻 기술 스택
| 구분 | 기술 | 목적 |
| 🌐 프론트엔드 | Vanilla JavaScript | 클라이언트 로직, 인증 및 UI 상태 관리 |
| Bootstrap 5 | 반응형 UI 디자인 프레임워크 | |
| SSE (Server-Sent Events) | 실시간 알림 수신 | |
| ⚙️ 백엔드 (Node.js) | Express.js | 웹 프레임워크 및 라우팅 |
| cookie-parser | 쿠키 파싱 미들웨어 | |
| 🧠 백엔드 (Python) | Flask | 웹 프레임워크 및 블루프린트 아키텍처 |
| scikit-learn, TensorFlow/Keras | 머신러닝 및 딥러닝 모델 실행 | |
| 🗃️ 데이터 저장소 | SQLite | 사용자, 세션, 센서 데이터 등 관계형 데이터 저장 |
| 파일 시스템 | ML 모델 파일(.pkl, .h5), 오디오 데이터 등 저장 | |
| 🚀 인프라 | Nginx | 웹 서버 및 리버스 프록시 |
| PM2 | 프로세스 관리자 | |
| AWS EC2 | 클라우드 서버 호스팅 (signalcraft.kr) | |
| GitHub Actions | CI/CD (지속적 통합/배포) 자동화 |
Sheets로 내보내기
🚪 애플리케이션 진입점 및 요청 라우팅
사용자 요청은 Nginx를 통해 URL 경로에 따라 적절한 백엔드 서버와 핸들러로 전달됩니다.
| 엔드포인트 | 백엔드 | 목적 |
| GET / | Node.js | 서비스 소개 페이지 제공 |
| POST /api/auth/login | Node.js + Flask | 사용자 로그인 처리 |
| GET /api/auth/verify | Node.js + Flask | 세션 유효성 검증 |
| POST /api/lightweight-analyze | Flask | 오디오 파일 AI 분석 요청 |
| POST /api/esp32/data | Flask | IoT 센서 데이터 수신 |
| GET /api/notifications/stream | Node.js | 실시간 알림 스트림 (SSE) |
Sheets로 내보내기
🧩 주요 구성 요소
- 클라이언트 애플리케이션 (static/app.js): 사용자의 로그인 상태를 확인하고, 그에 따라 UI를 동적으로 변경하며, 카카오 로그인과 같은 인증 흐름을 관리합니다.
- Express 서버 (server/app.js): 인증 세션과 쿠키를 관리하고, 실시간 SSE 연결을 처리하며, 정적 파일(HTML, CSS, JS)을 제공합니다.
- Flask 서버 (app.py): 11개 이상의 모듈(블루프린트)을 등록하여 기능별 라우팅을 관리하고, 서버 시작 시 AI 및 IoT 모니터링 서비스를 초기화합니다.
- 서비스 레이어: AI 분석(ensemble_ai_service), IoT 센서 폴링(sensor_monitoring_service), 실시간 스트리밍(realtime_streaming_service) 등 핵심 비즈니스 로직을 담당합니다.
☁️ 배포 인프라 및 자동화
시스템은 단일 EC2 인스턴스에서 운영되며, GitHub Actions를 통해 CI/CD 파이프라인이 완벽하게 자동화되어 있습니다.
- Push: 개발자가 main 브랜치에 코드를 푸시합니다.
- CI/CD Trigger: GitHub Actions 워크플로우가 자동으로 실행됩니다.
- Deploy: SSH를 통해 EC2 서버에 접속하여 최신 코드를 내려받습니다.
- Restart: PM2를 사용해 Node.js와 Python 서버를 무중단으로 재시작합니다.
- Health Check: 배포 후 curl, netstat 등의 명령어로 서버 상태를 자동으로 검증합니다.
또한 systemd 서비스를 통해 시스템 부팅 시 PM2가 자동으로 실행되도록 설정하여 안정성을 높였습니다.
🌊 주요 데이터 흐름
- 사용자 인증 흐름: 사용자가 로그인하면 Express 서버가 자격 증명을 확인하고 세션 토큰을 생성합니다. 클라이언트는 이 토큰을 localStorage에 저장하고, 이후 요청마다 토큰을 검증하여 로그인 상태를 유지합니다.
- AI 진단 흐름: 사용자가 웹에서 오디오를 녹음하여 /api/lightweight-analyze로 전송하면, Flask 서버의 ensemble_ai_service가 200개 이상의 오디오 특징을 추출하고 앙상블 모델로 분석하여 진단 결과를 반환합니다.
- IoT 센서 흐름: ESP32 기기가 주기적으로 센서 데이터를 /api/esp32/data로 전송합니다. Flask 서버는 데이터를 처리하고, 이상 징후가 감지되면 notification_service를 통해 Node.js 서버의 SSE 스트림으로 알림을 보내 클라이언트에게 실시간으로 전달합니다.
✨ 요약
Signalcraft AI 시스템은 다음과 같은 특징을 가진 안정적인 산업용 모니터링 플랫폼입니다.
- 듀얼 백엔드 아키텍처를 통해 I/O 작업과 ML 연산을 효과적으로 분리
- GitHub Actions 기반의 자동화된 CI/CD 파이프라인으로 빠르고 안정적인 배포
- PM2와 systemd를 활용한 견고한 프로세스 관리로 높은 가용성 보장
- 실시간 AI 분석과 IoT 연동을 통한 선제적 장비 고장 예방
- 웹과 모바일 클라이언트를 모두 지원하며, 현재 https://signalcraft.kr 에서 운영 중입니다.
'SIGNALCRAFT' 카테고리의 다른 글
| 2025-10-12 프로젝트 핵심 구조 공부 (0) | 2025.10.13 |
|---|---|
| 2025-10-11 프로젝트 핵심 구조 공부 (0) | 2025.10.12 |