아키텍처, 데이터, AI의 융합: 7일간의 프로젝트 로드맵
모든 스마트 환경에 적용 가능한 5계층 아키텍처를 설계하여 프로젝트의 확장성과 유지보수성을 확보합니다.
시스템이 다룰 정보(엔티티)와 관계를 정의하고, 이를 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)
);
`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}
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})
MQTT 프로토콜을 사용하여 센서 데이터를 실시간으로 전송하고, 별도의 로거 서비스를 통해 데이터베이스에 저장하는 '관심사 분리' 아키텍처를 구현합니다.
JWT로 API를 보호하고, OpenAI로 데이터에서 인사이트를 추출합니다.
로그인 → JWT 발급 → API 요청 시 헤더에 토큰 포함
"현재 온도는 28.5°C로 안정적이나, 습도가 85%로 높게 유지되고 있습니다. 환기 시스템 가동을 권장합니다."
`cron`과 `systemd`를 사용하여 전체 시스템을 자동화하여 24시간 안정적으로 운영되는 시스템을 완성합니다.
# crontab -e
# 매 5분마다 센서 데이터 발행
*/5 * * * * python3 /path/to/publisher.py
# systemctl enable iot_logger.service
# 시스템 부팅 시 DB 로거 자동 실행