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
React
JavaScript
Highcharts.js
AWS Aurora (MySQL)
AWS QuickSight
AWS EC2
AWS S3
Docker
Docker Compose
Challenges
λμ보λ λ λλ§ μλ μ ν λ¬Έμ
[λ¬Έμ μν©]
λμ보λ μ΄κΈ° λ‘λ© μκ°μ΄ 1λΆ μ΄μ μμλμ΄ μ€μκ° λͺ¨λν°λ§μ΄ μ΄λ €μ μ΅λλ€. λ°±μλ μλ²λ μ μ μλνμΌλ, λλ μΌμ λ°μ΄ν°λ‘ μΈν DB μ‘°ν μ§μ°μ΄ μ£Όμ μμΈμΌλ‘ νλ¨λμμ΅λλ€.
[ν΄κ²°]
쿼리 μ€ν κ³ν λΆμ
EXPLAINλͺ λ Ήμ΄λ‘ 쿼리 μ€ν κ³νμ λΆμνμ¬ λ³λͺ© κ΅¬κ° νμFull Table Scan λ°μ νμΈ
λΆνμν JOIN λ° λΉν¨μ¨μ μΈ μΈλ±μ€ μ¬μ© νμΈ
μ΅μ ν μμ
μΈλ±μ€ μΆκ°: μμ£Ό μ‘°νλλ 컬λΌ(μ€λΉ ID, νμμ€ν¬ν)μ λ³΅ν© μΈλ±μ€ μμ±
JOIN 리ν©ν λ§: λΆνμν JOIN μ κ±° λ° μλΈμΏΌλ¦¬ μ΅μ ν
Range Scan 쑰건 μΆκ°: WHERE μ 쑰건μ μ΅μ ννμ¬ Full Scan β Range Scan μ ν
νν°μ λ μ μ©: λ μ§ κΈ°μ€ ν μ΄λΈ νν°μ λμΌλ‘ μ‘°ν λ²μ μΆμ
Prepared Statement: λ°λ³΅ μ€νλλ 쿼리 μΊμ±
[κ²°κ³Ό]
쿼리 μ΅μ νλ₯Ό ν΅ν΄ λμ보λ λ‘λ© μλλ₯Ό 1λΆ μ΄μ β 1μ΄ μ΄λ΄λ‘ λ¨μΆνμ¬ μ€μκ° λ°μ΄ν° λΆμμ΄ κ°λ₯ν΄μ‘μ΅λλ€. λ°μ΄ν°κ° λ§μμ§μλ‘ ν¨μ¨μ μΈ μ μ₯ λ° μ‘°ν ꡬ쑰 μ€κ³μ μ€μμ±μ 체κ°νμ΅λλ€.
Tech Blog
Last updated