스마트 IoT 환경 구축 통합 가이드

아키텍처, 데이터, AI의 융합: 7일간의 프로젝트 로드맵

1일차

시스템 아키텍처링: 범용 블루프린트

모든 스마트 환경에 적용 가능한 5계층 아키텍처를 설계하여 프로젝트의 확장성과 유지보수성을 확보합니다.

5. UI 계층: 웹 대시보드 (사용자 상호작용)
↑↓ HTTPS/API
4. 서비스 계층: Flask 서버 (비즈니스 로직, API, 보안)
↑↓ DB Connection / MQTT
3. 데이터 계층: MariaDB (영구 저장), MQTT 브로커 (실시간 중개)
MQTT Publish
2. 엣지 계층: 라즈베리파이 5 (데이터 수집)
↑↓ GPIO
1. 물리 계층: 센서 (데이터 생성), 액추에이터 (동작 수행)
2일차

데이터 모델링: 시스템의 뼈대 설계

시스템이 다룰 정보(엔티티)와 관계를 정의하고, 이를 SQL DDL(Data Definition Language)로 구체화하여 데이터베이스의 구조를 설계합니다.

-- 스마트 팜 예시: 장치 및 센서 데이터 테이블
CREATE TABLE FarmDevices (
    device_id INT AUTO_INCREMENT PRIMARY KEY,
    device_name VARCHAR(100) NOT NULL,
    device_type VARCHAR(50) NOT NULL,
    zone_id INT,
    FOREIGN KEY (zone_id) REFERENCES GreenhouseZones(zone_id)
);

CREATE TABLE SensorReadings (
    reading_id BIGINT AUTO_INCREMENT PRIMARY KEY,
    device_id INT NOT NULL,
    value FLOAT NOT NULL,
    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (device_id) REFERENCES FarmDevices(device_id)
);
3일차

하드웨어 제어

`gpiozero` 라이브러리를 사용하여 라즈베리파이의 GPIO를 제어하고, `DeviceManager` 클래스를 통해 하드웨어를 모듈화하여 관리합니다.

# sensors.py
from gpiozero import LED, Button
import adafruit_dht, board

class DeviceManager:
    def __init__(self):
        self.led = LED(18)
        self.button = Button(2)
        self.dht = adafruit_dht.DHT22(board.D4)
    
    def get_dht_reading(self):
        # ... 센서 값 읽기 로직 ...
        return {"temp": temp, "hum": hum}
4일차

백엔드 API 구축

Flask와 블루프린트를 사용하여 모듈화된 RESTful API 서버를 구축합니다. 이는 외부에서 시스템과 상호작용하는 공식적인 통로가 됩니다.

# app/routes.py
from flask import Blueprint, jsonify
api = Blueprint('api', __name__)

@api.route('/api/devices')
def get_devices():
    # ... DB에서 장치 목록 조회 ...
    return jsonify({'devices': output})
5일차

실시간 데이터 파이프라인

MQTT 프로토콜을 사용하여 센서 데이터를 실시간으로 전송하고, 별도의 로거 서비스를 통해 데이터베이스에 저장하는 '관심사 분리' 아키텍처를 구현합니다.

📡
Publisher
(센서 데이터 발행)
MQTT
📥
DB Logger
(메시지 수신)
SQL
💾
MariaDB
(영구 저장)
6일차

보안 & AI 융합

JWT로 API를 보호하고, OpenAI로 데이터에서 인사이트를 추출합니다.

JWT 인증 흐름

로그인 → JWT 발급 → API 요청 시 헤더에 토큰 포함

AI 분석 예시

"현재 온도는 28.5°C로 안정적이나, 습도가 85%로 높게 유지되고 있습니다. 환기 시스템 가동을 권장합니다."

7일차

통합 및 자동화

`cron`과 `systemd`를 사용하여 전체 시스템을 자동화하여 24시간 안정적으로 운영되는 시스템을 완성합니다.

# crontab -e
# 매 5분마다 센서 데이터 발행
*/5 * * * * python3 /path/to/publisher.py

# systemctl enable iot_logger.service
# 시스템 부팅 시 DB 로거 자동 실행