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)


Challenges

Express.jsμ—μ„œ Spring Boot둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜

[문제]

초기 PoCλŠ” Express.js둜 λΉ λ₯΄κ²Œ κ΅¬ν˜„ν–ˆμ§€λ§Œ, μ„œλΉ„μŠ€ ν™•μž₯κ³Ό μœ μ§€λ³΄μˆ˜λ₯Ό κ³ λ €ν–ˆμ„ λ•Œ ν•œκ³„κ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. νƒ€μž… μ•ˆμ •μ„±, μ—λŸ¬ 핸듀링, νŠΈλžœμž­μ…˜ 관리 λ“± ν”„λ‘œλ•μ…˜ 레벨의 μ•ˆμ •μ„±μ΄ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

[ν•΄κ²°]

Spring Boot둜 λ¦¬νŒ©ν„°λ§ κ²°μ •

  • Java의 κ°•λ ₯ν•œ νƒ€μž… μ‹œμŠ€ν…œ ν™œμš©

  • Spring의 ν’λΆ€ν•œ μ—μ½”μ‹œμŠ€ν…œ (Spring Data, Spring Security λ“±)

  • μ—”ν„°ν”„λΌμ΄μ¦ˆκΈ‰ μ•ˆμ •μ„± 및 ν™•μž₯μ„±

λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ κ³Όμ •

  1. Express.js API 뢄석 및 μš”κ΅¬μ‚¬ν•­ 정리

  2. Spring Boot ν”„λ‘œμ νŠΈ 초기 μ„€μ •

  3. REST API μž¬μ„€κ³„ 및 κ΅¬ν˜„

  4. 데이터 검증 둜직 κ°•ν™”

  5. μ—λŸ¬ 핸듀링 체계 ꡬ좕

  6. ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±

  7. μ„±λŠ₯ 비ꡐ 및 μ΅œμ ν™”

[κ²°κ³Ό]

νƒ€μž… μ•ˆμ •μ„±κ³Ό μ—λŸ¬ 핸듀링이 κ°•ν™”λ˜μ–΄ 데이터 ν’ˆμ§ˆμ΄ ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 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