Real-Time Equipment Monitor

Overview

[μ„€λΉ„ μ‹€μ‹œκ°„ 가동 ν˜„ν™© λͺ¨λ‹ˆν„°λ§ 및 리포트 μ„œλΉ„μŠ€]μ—μ„œ Full Stack κ°œλ°œμ„ λ‹΄λ‹Ήν–ˆμŠ΅λ‹ˆλ‹€. FastAPI 기반 REST APIλ₯Ό 톡해 μ„Όμ„œ 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  μ‹œκ°ν™” κΈ°λŠ₯을 κ΅¬ν˜„ν–ˆμœΌλ©°, AWS Aurora의 쿼리 νŠœλ‹κ³Ό 인덱슀 μ΅œμ ν™”λ₯Ό 톡해 λŒ€μš©λŸ‰ 데이터 쑰회 μ„±λŠ₯을 κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€. AWS QuickSightλ₯Ό ν™œμš©ν•΄ μ‹€μ‹œκ°„ 운영 ν˜„ν™©μ„ μ‹œκ°ν™”ν•˜κ³ , μš΄μ˜μžκ°€ 곡μž₯ μƒνƒœλ₯Ό μ§κ΄€μ μœΌλ‘œ νŒŒμ•…ν•  수 μžˆλ„λ‘ λŒ€μ‹œλ³΄λ“œλ₯Ό κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€. Docker 기반 μ»¨ν…Œμ΄λ„ˆλ₯Ό AWS EC2에 λ°°ν¬ν•˜κ³ , React와 Highcharts.jsλ₯Ό μ‚¬μš©ν•΄ κ΄€λ¦¬μžμš© UIλ₯Ό κ°œλ°œν–ˆμŠ΅λ‹ˆλ‹€.


Timeline

Phase 1: PoC κ΅¬ν˜„

κΈ°μ‘΄ μ„œλΉ„μŠ€μ˜ μœ μ§€λ³΄μˆ˜ 어렀움 문제λ₯Ό ν•΄κ²°ν•˜κ³ , 고객사 λ§žμΆ€ν˜• μ»€μŠ€ν„°λ§ˆμ΄μ§•μ΄ μš©μ΄ν•œ μƒˆλ‘œμš΄ λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œ κ°œλ°œμ„ λͺ©ν‘œλ‘œ PoCλ₯Ό μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

FastAPI 기반 μ„Όμ„œ 데이터 μˆ˜μ§‘ REST APIλ₯Ό 섀계 및 κ΅¬ν˜„ν–ˆμœΌλ©°, AWS QuickSightλ₯Ό ν™œμš©ν•œ μ‹€μ‹œκ°„ 가동 ν˜„ν™© λŒ€μ‹œλ³΄λ“œ ν”„λ‘œν† νƒ€μž…μ„ κ΅¬μΆ•ν–ˆμŠ΅λ‹ˆλ‹€. 데이터 μˆ˜μ§‘λΆ€ν„° μ‹œκ°ν™”κΉŒμ§€ 전체 νŒŒμ΄ν”„λΌμΈμ˜ 기술적 타당성을 κ²€μ¦ν•˜κ³ , 고객 ν”„λ ˆμ  ν…Œμ΄μ…˜μ„ 톡해 MVP λ‹¨κ³„λ‘œμ˜ 진행을 ν™•μ •ν–ˆμŠ΅λ‹ˆλ‹€.

Phase 2: MVP ꡬ좕

PoC 검증 κ²°κ³Όλ₯Ό λ°”νƒ•μœΌλ‘œ μ‹€μ œ 운영 κ°€λŠ₯ν•œ MVP κ°œλ°œμ„ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

React 기반 κ΄€λ¦¬μžμš© λŒ€μ‹œλ³΄λ“œλ₯Ό κ°œλ°œν•˜κ³ , AWS Aurora의 쿼리 νŠœλ‹ 및 인덱슀 μ΅œμ ν™”λ₯Ό 톡해 λŒ€μš©λŸ‰ 데이터 쑰회 μ„±λŠ₯을 κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€. Docker 기반 μ»¨ν…Œμ΄λ„ˆν™”λ‘œ 배포 ν™˜κ²½μ„ κ΅¬μ„±ν•˜κ³ , AWS EC2에 μ„œλΉ„μŠ€λ₯Ό λ°°ν¬ν•˜μ—¬ μ•ˆμ •μ μΈ 운영 ν™˜κ²½μ„ λ§ˆλ ¨ν–ˆμŠ΅λ‹ˆλ‹€.


Key Features

1. μ‹€μ‹œκ°„ μ„€λΉ„ 가동 ν˜„ν™© λͺ¨λ‹ˆν„°λ§

IoT μ„Όμ„œλ₯Ό 톡해 μˆ˜μ§‘λœ μ„€λΉ„ 가동 데이터λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ μ²˜λ¦¬ν•˜κ³  μ‹œκ°ν™”ν•˜λŠ” λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν–ˆμŠ΅λ‹ˆλ‹€. AWS QuickSight와 React λŒ€μ‹œλ³΄λ“œλ₯Ό 톡해 κ΄€λ¦¬μžκ°€ 곡μž₯ μƒνƒœλ₯Ό μ§κ΄€μ μœΌλ‘œ νŒŒμ•…ν•  수 μžˆλŠ” ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

핡심 κΈ°λŠ₯

  • 섀비별 가동λ₯  및 가동 μƒνƒœλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ 확인

  • μ‹œκ°„λŒ€λ³„ 가동 좔이 κ·Έλž˜ν”„ 및 νŠΈλ Œλ“œ 뢄석 제곡

  • 생산 μ§€μ—°λ₯ , 가동 쀑단 횟수 λ“± μ£Όμš” KPI μ‹œκ°ν™”

2. 주기별 운영 리포트 μžλ™ 생성

μˆ˜μ§‘λœ 데이터λ₯Ό 기반으둜 μ£Όκ°„/μ›”κ°„ 운영 리포트λ₯Ό μžλ™ μƒμ„±ν•©λ‹ˆλ‹€. 리포트λ₯Ό 톡해 곡μž₯ 운영 νš¨μœ¨μ„±μ„ λΆ„μ„ν•˜κ³ , κ°œμ„  포인트λ₯Ό λ„μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

핡심 μ§€ν‘œ

  • 섀비별 평균 가동λ₯ 

  • 비가동 μ‹œκ°„ 및 원인 뢄석

  • μƒμ‚°λŸ‰ λŒ€λΉ„ 가동λ₯  비ꡐ

  • (월별 νŠΈλ Œλ“œ 및 예츑 뢄석)

3. 고객사 λ§žμΆ€ν˜• λŒ€μ‹œλ³΄λ“œ

고객사별 μš”κ΅¬μ‚¬ν•­μ— 따라 λŒ€μ‹œλ³΄λ“œ λ ˆμ΄μ•„μ›ƒκ³Ό μ§€ν‘œλ₯Ό μœ μ—°ν•˜κ²Œ μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•  수 μžˆλŠ” ꡬ쑰λ₯Ό μ„€κ³„ν–ˆμŠ΅λ‹ˆλ‹€.

핡심 κΈ°λŠ₯

  • λŒ€μ‹œλ³΄λ“œ μœ„μ ― 동적 ꡬ성

  • 고객사별 KPI μ§€ν‘œ μ„€μ •

  • 필터링 및 데이터 λ²”μœ„ μ‘°μ • κΈ°λŠ₯


Architecture

PoC μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

MVP μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

전체 μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

데이터 μˆ˜μ§‘ 흐름


Contributions

1. μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§ λŒ€μ‹œλ³΄λ“œ ꡬ좕

  • AWS QuickSight λŒ€μ‹œλ³΄λ“œ

    • AWS QuickSightλ₯Ό ν™œμš©ν•˜μ—¬ μ„€λΉ„ 가동 ν˜„ν™© 데이터λ₯Ό μ‹œκ°ν™”ν•˜κ³  직관적인 λŒ€μ‹œλ³΄λ“œ 섀계 및 ꡬ좕

    • 데이터 필터링, λŒ€μ‹œλ³΄λ“œ λ ˆμ΄μ•„μ›ƒ μ΅œμ ν™”, μ£Όμš” μ§€ν‘œ KPI ν¬ν•¨ν•˜μ—¬ κ΄€λ¦¬μžκ°€ 가동 ν˜„ν™©μ„ μ‹ μ†νžˆ νŒŒμ•…ν•  수 μžˆλ„λ‘ 지원

  • React κ΄€λ¦¬μž λŒ€μ‹œλ³΄λ“œ

    • Highcharts.jsλ₯Ό ν™œμš©ν•œ μ‹€μ‹œκ°„ 차트 κ΅¬ν˜„

    • 섀비별 가동λ₯ , 생산 μ§€μ—°λ₯  λ“± 핡심 μ§€ν‘œ μ‹œκ°ν™”

2. λŒ€μš©λŸ‰ 데이터 쑰회 μ„±λŠ₯ μ΅œμ ν™”

  • 쿼리 νŠœλ‹

    • AWS Aurora(MySQL)μ—μ„œ λ³΅μž‘ν•œ 데이터 쑰회 쿼리λ₯Ό λΆ„μ„ν•˜κ³ , 쿼리 νŠœλ‹ 및 인덱슀 μ΅œμ ν™”λ₯Ό 톡해 쑰회 속도 κ°œμ„ 

    • λŒ€λŸ‰ μ„Όμ„œ λ°μ΄ν„°μ˜ 효율적인 μ €μž₯ 및 검색을 μœ„ν•œ λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆ 섀계

  • μ΅œμ ν™” 기법

    • 인덱슀 μΆ”κ°€: JOIN λΉ„μš© 감좕

    • λΆˆν•„μš”ν•œ JOIN 제거: 쿼리 ꡬ쑰 λ‹¨μˆœν™”

    • Prepared Statement ν™œμš©: 반볡 쿼리 캐싱

    • WHERE 쑰건 μ΅œμ ν™”: Full Table Scan β†’ Range Scan μ „ν™˜

3. μ„Όμ„œ 데이터 μˆ˜μ§‘ 및 API 개발

  • FastAPI REST API

    • μ‹€μ‹œκ°„ μ„Όμ„œ 데이터 μˆ˜μ§‘ 및 처리용 REST API 섀계 및 κ΅¬ν˜„

    • 데이터 처리 νŒŒμ΄ν”„λΌμΈμ„ λͺ¨λ“ˆν™”ν•˜μ—¬ μœ μ§€λ³΄μˆ˜μ„±μ„ κ°œμ„ ν•˜κ³ , λ‹€μ–‘ν•œ 데이터 포맷의 μš”κ΅¬μ‚¬ν•­μ— λŒ€μ‘ κ°€λŠ₯ν•œ μœ μ—°ν•œ ꡬ쑰 ꡬ좕

  • 데이터 νŒŒμ΄ν”„λΌμΈ

    • μ„Όμ„œ 데이터 μˆ˜μ§‘ β†’ μ •μ œ β†’ λ³€ν™˜ β†’ Aurora μ €μž₯

    • 비동기 처리둜 λŒ€λŸ‰ 데이터 μˆ˜μ§‘ μ„±λŠ₯ 확보


Tech Stack

  • Python

  • FastAPI

  • SQLAlchemy


Challenges

λŒ€μ‹œλ³΄λ“œ λ Œλ”λ§ 속도 μ €ν•˜ 문제

[문제 상황]

λŒ€μ‹œλ³΄λ“œ 초기 λ‘œλ”© μ‹œκ°„μ΄ 1λΆ„ 이상 μ†Œμš”λ˜μ–΄ μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§μ΄ μ–΄λ €μ› μŠ΅λ‹ˆλ‹€. λ°±μ—”λ“œ μ„œλ²„λŠ” 정상 μž‘λ™ν–ˆμœΌλ‚˜, λŒ€λŸ‰ μ„Όμ„œ λ°μ΄ν„°λ‘œ μΈν•œ DB 쑰회 지연이 μ£Όμš” μ›μΈμœΌλ‘œ νŒλ‹¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

[ν•΄κ²°]

쿼리 μ‹€ν–‰ κ³„νš 뢄석

  • EXPLAIN λͺ…λ Ήμ–΄λ‘œ 쿼리 μ‹€ν–‰ κ³„νšμ„ λΆ„μ„ν•˜μ—¬ 병λͺ© ꡬ간 νŒŒμ•…

  • Full Table Scan λ°œμƒ 확인

  • λΆˆν•„μš”ν•œ JOIN 및 λΉ„νš¨μœ¨μ μΈ 인덱슀 μ‚¬μš© 확인

μ΅œμ ν™” μž‘μ—…

  1. 인덱슀 μΆ”κ°€: 자주 μ‘°νšŒλ˜λŠ” 컬럼(μ„€λΉ„ ID, νƒ€μž„μŠ€νƒ¬ν”„)에 볡합 인덱슀 생성

  2. JOIN λ¦¬νŒ©ν† λ§: λΆˆν•„μš”ν•œ JOIN 제거 및 μ„œλΈŒμΏΌλ¦¬ μ΅œμ ν™”

  3. Range Scan 쑰건 μΆ”κ°€: WHERE 절 쑰건을 μ΅œμ ν™”ν•˜μ—¬ Full Scan β†’ Range Scan μ „ν™˜

  4. νŒŒν‹°μ…”λ‹ 적용: λ‚ μ§œ κΈ°μ€€ ν…Œμ΄λΈ” νŒŒν‹°μ…”λ‹μœΌλ‘œ 쑰회 λ²”μœ„ μΆ•μ†Œ

  5. Prepared Statement: 반볡 μ‹€ν–‰λ˜λŠ” 쿼리 캐싱

[κ²°κ³Ό]

쿼리 μ΅œμ ν™”λ₯Ό 톡해 λŒ€μ‹œλ³΄λ“œ λ‘œλ”© 속도λ₯Ό 1λΆ„ 이상 β†’ 1초 μ΄λ‚΄λ‘œ λ‹¨μΆ•ν•˜μ—¬ μ‹€μ‹œκ°„ 데이터 뢄석이 κ°€λŠ₯ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. 데이터가 λ§Žμ•„μ§ˆμˆ˜λ‘ 효율적인 μ €μž₯ 및 쑰회 ꡬ쑰 μ„€κ³„μ˜ μ€‘μš”μ„±μ„ μ²΄κ°ν–ˆμŠ΅λ‹ˆλ‹€.


Tech Blog

Last updated