IoT Sensor Data Pipeline for Smart Factories
Overview
[IoT μΌμ λ°μ΄ν° νμ΄νλΌμΈ λ° μκ°ν λμ보λ μλΉμ€]μμ Data Engineerλ‘ μ°Έμ¬ν΄, μΌμ λ°μ΄ν° μμ§λΆν° μκ°νκΉμ§ End-to-End νμ΄νλΌμΈμ ꡬμΆνμ΅λλ€. Spring Boot κΈ°λ° REST APIλ‘ λ°μ΄ν°λ₯Ό μμ§/μ μ νκ³ Google BigQueryμ μ μ₯ν΄ μκ³μ΄ λ°μ΄ν° μ²λ¦¬ μ±λ₯μ μ΅μ ννμ΅λλ€. GitLab CIλ‘ λΉλ λ° λ°°ν¬λ₯Ό μλννκ³ , GKE(Google Kubernetes Engine)λ₯Ό νμ©ν΄ μμ μ μΈ μλΉμ€ μ΄μ νκ²½μ ꡬμ±νμ΅λλ€. μ΄μμκ° μ΄μ μ§νλ₯Ό μ€μκ°μΌλ‘ νμ ν μ μλλ‘ Google Data Studio κΈ°λ° λμ보λλ₯Ό ꡬμΆνμ΅λλ€.
Timeline
Phase 1: PoC ꡬν (Express.js)
μ΄κΈ°μλ Express.jsλ‘ λΉ λ₯΄κ² PoC(Proof of Concept)λ₯Ό κ°λ°νμ΅λλ€. IoT Gatewayμμ μ μ‘λλ μ¨λ μΌμ λ°μ΄ν°λ₯Ό λ°μ Google BigQueryμ μ μ₯νλ κΈ°λ³Έ REST APIλ₯Ό ꡬννκ³ , λ°μ΄ν° μμ§ νμ΄νλΌμΈμ κΈ°μ μ νλΉμ±μ κ²μ¦νμ΅λλ€.
Phase 2: Spring Boot 리ν©ν°λ§
PoC κ²μ¦ ν, νμ₯μ±κ³Ό μμ μ±μ μν΄ Spring Bootλ‘ μ λ©΄ 리ν©ν°λ§νμ΅λλ€. λ°μ΄ν° κ²μ¦ λ‘μ§, μλ¬ νΈλ€λ§, λ‘κΉ μ²΄κ³λ₯Ό κ°ννκ³ , BigQuery μ€ν€λ§λ₯Ό μ¬μ€κ³νμ¬ μκ³μ΄ λ°μ΄ν° μ²λ¦¬μ μ΅μ νλ ꡬ쑰λ₯Ό ꡬμΆνμ΅λλ€.
Phase 3: μκ°ν λ° λ°°ν¬
Google Data Studioλ₯Ό νμ©νμ¬ μ€μκ° μ¨λ λ°μ΄ν° μκ°ν λμ보λλ₯Ό ꡬμΆνμ΅λλ€. GitLab CIλ₯Ό ν΅ν CI/CD νμ΄νλΌμΈμ μ€κ³νκ³ , GKE(Google Kubernetes Engine)μ μλΉμ€λ₯Ό λ°°ν¬νμ¬ μμ μ μΈ μ΄μ νκ²½μ λ§λ ¨νμ΅λλ€. Auto-scaling μ€μ μΌλ‘ νΈλν½ λ³νμ λμν μ μλ ꡬ쑰λ₯Ό μμ±νμ΅λλ€.
Key Features
1. μ€μκ° μΌμ λ°μ΄ν° μμ§
IoT Gatewayμμ μ μ‘λλ μ¨λ μΌμ λ°μ΄ν°λ₯Ό μ€μκ°μΌλ‘ μμ§νκ³ κ²μ¦νλ REST APIλ₯Ό ꡬμΆνμ΅λλ€. λ°μ΄ν° νμ§μ 보μ₯νκΈ° μν κ²μ¦ λ‘μ§κ³Ό μλ¬ νΈλ€λ§μ ꡬννμ΅λλ€.
ν΅μ¬ κΈ°λ₯
REST APIλ₯Ό ν΅ν μΌμ λ°μ΄ν° μμ§
λ°μ΄ν° μ ν¨μ± κ²μ¦ (λ²μ, ν¬λ§·, λλ½κ°)
μλ¬ λ‘κΉ λ° λͺ¨λν°λ§
2. λ°μ΄ν° μ¨μ΄νμ°μ€ ꡬμΆ
Google BigQueryλ₯Ό νμ©νμ¬ λλμ μκ³μ΄ μΌμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ λΆμν μ μλ λ°μ΄ν° μ¨μ΄νμ°μ€λ₯Ό μ€κ³νμ΅λλ€.
ν΅μ¬ κΈ°λ₯
μκ³μ΄ λ°μ΄ν° μ΅μ ν μ€ν€λ§ μ€κ³
νν°μ λμ ν΅ν 쿼리 μ±λ₯ ν₯μ
λ°μ΄ν° λ³΄κ΄ μ μ± μ€μ
3. μ€μκ° λ°μ΄ν° μκ°ν
Google Data Studioλ₯Ό νμ©νμ¬ μ€μκ° μ¨λ λ°μ΄ν°λ₯Ό μκ°ννλ λμ보λλ₯Ό ꡬμΆνμ΅λλ€. μ€λΉλ³, μκ°λλ³ μ¨λ μΆμ΄λ₯Ό μ§κ΄μ μΌλ‘ νμ ν μ μλ νκ²½μ μ 곡ν©λλ€.
ν΅μ¬ κΈ°λ₯
μ€μκ° μ¨λ μ°¨νΈ λ° νΈλ λ λΆμ
μ€λΉλ³ μ¨λ λΉκ΅ λμ보λ
μ΄μ μ¨λ μλ¦Ό λ° λ¦¬ν¬νΈ
4. CI/CD νμ΄νλΌμΈ
GitLab CIμ GKEλ₯Ό νμ©νμ¬ μλνλ λΉλ, ν μ€νΈ, λ°°ν¬ νμ΄νλΌμΈμ ꡬμΆνμ΅λλ€.
ν΅μ¬ κΈ°λ₯
GitLab CIλ₯Ό ν΅ν μλ λΉλ λ° ν μ€νΈ
Docker μ΄λ―Έμ§ μλ λΉλ λ° GCR νΈμ
GKEμ μλ λ°°ν¬ λ° λ‘€λ§ μ λ°μ΄νΈ
Architecture


μ 체 μμ€ν μν€ν μ²
System Overview (Phase 2/3 - Production)
CI/CD νμ΄νλΌμΈ
Contributions
1. λ°μ΄ν° μ¨μ΄νμ°μ€ μ€κ³ λ° λ°μ΄ν° μκ°ν
BigQuery μ€ν€λ§ μ€κ³
μκ³μ΄ λ°μ΄ν°μ μ΅μ νλ ν μ΄λΈ ꡬ쑰 μ€κ³
νμμ€ν¬ν κΈ°μ€ νν°μ λμΌλ‘ 쿼리 μ±λ₯ ν₯μ
μ€λΉ ID, μΌμ νμ λ³ ν΄λ¬μ€ν°λ§
Google Data Studio λμ보λ
μ€μκ° μ¨λ μΆμ΄ μ°¨νΈ κ΅¬ν
μ€λΉλ³ μ¨λ λΉκ΅ λμ보λ
μ΄μ μ¨λ κ°μ§ μλ¦Ό μ€μ
μ¬μ©μ λ§μΆ€ν νν°λ§ κΈ°λ₯
2. Spring Boot κΈ°λ° λ°μ΄ν° μ²λ¦¬ API κ°λ°
REST API μ€κ³
IoT μΌμ λ°μ΄ν° μμ§ μλν¬μΈνΈ
λ°μ΄ν° κ²μ¦ λ° λ³ν λ‘μ§
BigQuery μ½μ API ν΅ν©
λ°μ΄ν° κ²μ¦ λ‘μ§
μ¨λ λ²μ κ²μ¦ (-50Β°C ~ 200Β°C)
νμ νλ κ²μ¦
λ°μ΄ν° ν¬λ§· κ²μ¦
μ€λ³΅ λ°μ΄ν° νν°λ§
μλ¬ νΈλ€λ§
κΈλ‘λ² μμΈ νΈλ€λ¬ ꡬν
컀μ€ν μλ¬ μ½λ λ° λ©μμ§
μμΈ λ‘κΉ (Logback)
3. GKE λ° GitLab CIλ₯Ό νμ©ν λ°°ν¬ λ° μ΄μ μλν
GitLab CI/CD νμ΄νλΌμΈ μμ
.gitlab-ci.yml
GKE λ°°ν¬ μ€μ μμ
Kubernetes Deployment
Tech Stack
Java 11
Spring Boot 2.5
Spring Web (REST API)
Google BigQuery
Google Data Studio
Docker
GKE (Google Kubernetes Engine)
GCR (Google Container Registry)
GitLab
GitLab CI
Challenges
Express.jsμμ Spring Bootλ‘ λ§μ΄κ·Έλ μ΄μ
[λ¬Έμ ]
μ΄κΈ° PoCλ Express.jsλ‘ λΉ λ₯΄κ² ꡬννμ§λ§, μλΉμ€ νμ₯κ³Ό μ μ§λ³΄μλ₯Ό κ³ λ €νμ λ νκ³κ° μμμ΅λλ€. νμ μμ μ±, μλ¬ νΈλ€λ§, νΈλμμ κ΄λ¦¬ λ± νλ‘λμ λ 벨μ μμ μ±μ΄ νμνμ΅λλ€.
[ν΄κ²°]
Spring Bootλ‘ λ¦¬ν©ν°λ§ κ²°μ
Javaμ κ°λ ₯ν νμ μμ€ν νμ©
Springμ νλΆν μμ½μμ€ν (Spring Data, Spring Security λ±)
μν°νλΌμ΄μ¦κΈ μμ μ± λ° νμ₯μ±
λ§μ΄κ·Έλ μ΄μ κ³Όμ
Express.js API λΆμ λ° μꡬμ¬ν μ 리
Spring Boot νλ‘μ νΈ μ΄κΈ° μ€μ
REST API μ¬μ€κ³ λ° κ΅¬ν
λ°μ΄ν° κ²μ¦ λ‘μ§ κ°ν
μλ¬ νΈλ€λ§ μ²΄κ³ κ΅¬μΆ
ν μ€νΈ μ½λ μμ±
μ±λ₯ λΉκ΅ λ° μ΅μ ν
[κ²°κ³Ό]
νμ μμ μ±κ³Ό μλ¬ νΈλ€λ§μ΄ κ°νλμ΄ λ°μ΄ν° νμ§μ΄ ν₯μλμμ΅λλ€. Springμ λ€μν κΈ°λ₯(μμ‘΄μ± μ£Όμ , AOP, νΈλμμ κ΄λ¦¬ λ±)μ νμ©νμ¬ μ μ§λ³΄μκ° μ©μ΄ν ꡬ쑰λ₯Ό ꡬμΆνμ΅λλ€.
GitLab CIμ GKEλ₯Ό νμ©ν CI/CD νμ΄νλΌμΈ ꡬμΆ
[λ¬Έμ μν©]
μλ λ°°ν¬λ μκ°μ΄ μ€λ κ±Έλ¦¬κ³ μ€μ κ°λ₯μ±μ΄ λμμ΅λλ€. λΉ λ₯Έ κΈ°λ₯ λ°°ν¬μ μμ μ μΈ μ΄μμ μν΄ μλνλ CI/CD νμ΄νλΌμΈμ΄ νμνμ΅λλ€.
[ν΄κ²°]
GitLab CI νμ΄νλΌμΈ μ€κ³
Build β Test β Docker β Deploy 4λ¨κ³ νμ΄νλΌμΈ
κ° λ¨κ³λ³ μ€ν¨ μ μλ μ€λ¨
Artifact κ΄λ¦¬λ‘ λΉλ κ²°κ³Όλ¬Ό 보κ΄
GKE λ°°ν¬ μλν
kubectlμ νμ©ν μ΄λ―Έμ§ μ λ°μ΄νΈ
Rolling Updateλ‘ λ¬΄μ€λ¨ λ°°ν¬
HPA(Horizontal Pod Autoscaler)λ‘ Auto-scaling μ€μ
λͺ¨λν°λ§ λ° λ‘€λ°±
λ°°ν¬ μν λͺ¨λν°λ§ (kubectl rollout status)
λ¬Έμ λ°μ μ μ΄μ λ²μ μΌλ‘ μλ λ‘€λ°±
[κ²°κ³Ό]
μλνλ CI/CD νμ΄νλΌμΈμΌλ‘ λ°°ν¬ μκ°μ΄ 30λΆ β 5λΆμΌλ‘ λ¨μΆλμμ΅λλ€. μ½λ νΈμ ν μλμΌλ‘ λΉλ, ν μ€νΈ, λ°°ν¬κ° μ§νλμ΄ κ°λ° μμ°μ±μ ν₯μμμΌ°μ΅λλ€.
Last updated