Project Detail

iView

iView — On-site Control Console

React와 Node.js, MobX 조합으로 현장 대시보드를 설계하고, 펌웨어 업데이트, 센서 점검, 로그 모니터링까지 한 화면에서 처리되는 UX를 구현했습니다.

  • 센서 및 액추에이터 중앙 제어
  • 데이터 시각화
  • 펌웨어 업데이트

DDC 전면 디스플레이에서 센서, 액추에이터를 직접 제어하고 데이터를 시각화할 수 있도록 만든 현장용 웹앱입니다. 기계실 엔지니어가 노트북 없이도 즉시 점검과 조치를 수행하도록 돕습니다.

FIELD UX

현장 제어를 위한 UI

센서 위치 탐색, 부저 테스트, 장비 상태 확인을 직관적인 터치 UI로 제공해 기계실 엔지니어의 대응 속도를 높였습니다.

Sensor Control, Localization, Alerts
PIPELINE

데이터 수집 & 통합

Node.js, Express 백엔드와 WebSocket 통신으로 센서값과 로그를 실시간 스트리밍하고, 중앙 시스템과 연동했습니다.

WebSocket, MySQL, API Bridge
OPS

펌웨어 & 유지보수 자동화

펌웨어 파일 업로드, 공장 초기화, 헬스 체크 스크립트까지 제공해 현장 장비 관리 효율을 크게 향상시켰습니다.

Firmware Updates, Health Check, Reset
iView — 설정 상세
1 / 11

프로젝트 개요

DDC는 각종 센서값을 수집해 중앙 관리 서버로 보내는 역할을 하는 소형 장비입니다. 과거의 DDC는 현장에서 관리자가 CLI로만 제어해야 했기에 연결할 노트북이 반드시 필요했습니다. 따라서 관리가 필요한 기계실 곳곳을 항상 노트북을 소지한 채 돌아다녀야만 했습니다. 이러한 불편을 해결하기 위해 DDC 전면부에 디스플레이를 장착해 웹앱으로 GUI를 제공하여 관리자는 노트북 없이 즉시 현장 제어를 할 수 있는 환경을 만들었습니다. 이 새로운 DDC를 통해 각 센서의 위치는 어디인지 부저를 울려 확인할 수 있고, 새로 장착한 센서의 값은 정상적인지 모니터링 가능하며 펌웨어 업데이트 또한 가능합니다. 현재 일부 빌딩에 배치된 상태이며, 새로 시공되는 건물에 적용하고 있습니다.

기술 스택

개발에 활용한 언어는 JavaScript이며, Node.js, Express.js 그리고 MySQL를 활용해 서버를 구성했습니다. MySQL 스키마는 이미 정의되어 있던 과거 DDC의 데이터베이스에 추가적으로 몇 가지의 테이블을 추가했습니다. 프론트엔드는 React, Sass에 상태 관리는 Mobx로 진행했습니다. OS는 Ubuntu 18.04 LTS 입니다.

주요 책임 및 성과

  • 기계실 내 다양한 센서들의 값, 위치 및 로그를 실시간으로 제어 및 모니터링할 수 있는 프론트엔드 화면과 백엔드 기능 구현
  • 사용자 등록, 로그인, 비밀번호 변경, 세션 관리 기능 개발 (어드민/일반 사용자 등급 관리 포함)
  • 펌웨어 파일을 업로드하여 DDC 펌웨어를 업데이트하는 기능 구현
  • 공기조화기 제어 기능을 확장하고, 기존 자사 서비스와의 웹소켓 통신을 통한 통합 작업 수행
  • DDC 초기 상태로 복구할 수 있는 공장 초기화 기능 구현
  • 가용성 향상을 위해 헬스체크 쉘 스크립트 작성 및 적용

배운 점

React와 상태 관리에 대한 이해

첫 번째로 React로 화면 구성을 어떻게 해야 하고, 컴포넌트간 데이터 공유는 어떻게 해야하는지 직접 구현해보면서 알아갈 수 있었다는 것입니다. 클래스형 컴포넌트 내에서 ComponentDidMount, shouldComponentUpdate, componentWillUnmount 등의 함수 등을 통해 각 컴포넌트의 생명주기 내에서 데이터를 어떻게 다루고 보여줘야 하는지, Mobx를 통해 어떤 상태를 글로벌 영역으로 빼내 브라우저에 영속화 시켜야 하는지, 많은 데이터를 보여줘야 하는 페이지를 무한 스크롤 등을 통해 최적화 하는 방법 등 React를 활용한 프론트엔드 구현 전반에 걸쳐 알게 됐습니다.

백엔드 기술 전반에 관한 넓고 얕은 이해 및 구현

두 번째로 쿼리 작성, 테이블 생성, 파일 송수신, 웹소켓 통신, 로그인/로그아웃 및 사용자 세션 관리 등 서버의 전반적인 기능을 직접 구현해볼 수 있었다는 것입니다. MySQL과의 커넥션은 어떻게 맺고 쿼리는 어떻게 보내는지, 클라이언트와 웹소켓 커넥션은 어떻게 맺고 유지하는지, 사용자의 세션은 어떻게 관리해야 하는지, 로그인 처리를 어떻게 해야 하는지 등의 서버의 전반적인 기본 요구사항들을 직접 구현하면서 서버 개발 지식 함양에 많은 도움이 됐습니다.

아쉬웠던 점

코드 레벨 아키텍처에 대한 미숙함

프로젝트를 구현하면서 다소 아쉬웠던 점 중 하나는 프론트엔드와 백엔드 모두 Layer를 적절히 나누지 못했던 것입니다. 당시 Node.js에서 Layered Architecture를 어떻게 구성해야 하고, 의존 방향은 어떻게 흘러야 바람직한지, React 프로젝트는 어느 구조로 구성해야 적절한지 잘 알지 못했기 때문에 로직과 데이터는 정리되지 않은 채 다소 난잡하게 산재해 있었습니다. 그저 기능 개발에만 집중했기 때문에 기능 단위로 모듈을 구성했고, 계층을 나누지 않았기에 프로젝트 막바지에 유지보수에 약간의 어려움을 겪었습니다. 계층을 적절히 나누지 못한 것이 계속 마음 한 켠에 남아 AI Bidder, Nara Cloud-BMS 에는 Presentational & Container 패턴을, SMAT-mi Ver.2에는 MVVM 패턴을 적용시키는 계기가 되기도 했습니다.

Tech Stack

React, MobX UI와 Node.js 백엔드, WebSocket 스트림으로 현장 제어 경험을 한 화면에 담았습니다.

FRONTEND

On-site Dashboard

5

React, MobX 조합으로 디스플레이에서 구동되는 터치 UX와 실시간 센서 데이터를 시각화했습니다.

JavaScriptReactMobXSassWebSocket

BACKEND

Control Services

5

Express 기반 API와 MySQL 데이터 모델을 확장해 기존 DDC와의 연동 및 신규 제어 기능을 추가했습니다.

Node.jsExpressMySQLREST APISession Auth

OPS

Operations & Firmware

5

펌웨어 배포, 공장 초기화, 헬스 체크 자동화를 제공해 현장 장비 유지보수를 단순화했습니다.

Firmware OTAShell ScriptsUbuntu 18.04Log RotationHealth Check