01. IoT ๊ฐ์
01. IoT ๊ฐ์¶
ํ์ต ๋ชฉํ¶
- IoT(์ฌ๋ฌผ์ธํฐ๋ท)์ ์ ์์ ํต์ฌ ๊ฐ๋ ์ดํด
- IoT ์์คํ ์ํคํ ์ฒ์ ๊ตฌ์ฑ ์์ ํ์
- ์ฃ์ง ์ปดํจํ ๊ณผ ํด๋ผ์ฐ๋ ์ปดํจํ ์ ์ฐจ์ด ์ดํด
- ์ฃผ์ IoT ํ๋กํ ์ฝ ๊ฐ์ ํ์ต
- IoT ๋ณด์ ๊ณ ๋ ค์ฌํญ ์ธ์
1. IoT๋ ๋ฌด์์ธ๊ฐ?¶
1.1 ์ ์¶
IoT(Internet of Things, ์ฌ๋ฌผ์ธํฐ๋ท)๋ ์ผ์, ์ํํธ์จ์ด, ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๊ฐ์ถ ๋ฌผ๋ฆฌ์ ์ฅ์น๋ค์ด ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๊ตํํ๋ ์์คํ ์ ๋๋ค.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ IoT ์ํ๊ณ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โ
โ โ ์ผ์ โ โ ๊ฒ์ดํธ โ โ ํด๋ผ์ฐ๋ โ โ ์ฌ์ฉ์ โ โ
โ โ ๋๋ฐ์ด์คโโโโโถโ ์จ์ด โโโโโถโ ์๋ฒ โโโโโถโ ์ฑ โ โ
โ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โ
โ โ โ โ โ โ
โ ์จ๋, ์ต๋ ๋ฐ์ดํฐ ์ง๊ณ ์ ์ฅ, ๋ถ์ ์๊ฐํ, โ
โ ์์ง์ ๊ฐ์ง ํ๋กํ ์ฝ ๋ณํ ML/AI ์ฒ๋ฆฌ ์ ์ด ๋ช
๋ น โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1.2 IoT์ ํต์ฌ ์์¶
| ์์ | ์ค๋ช | ์์ |
|---|---|---|
| Things | ์ผ์/์ก์ถ์์ดํฐ๊ฐ ์ฅ์ฐฉ๋ ๋ฌผ๋ฆฌ์ ์ฅ์น | ์จ๋ ์ผ์, ์ค๋งํธ ์กฐ๋ช |
| Connectivity | ์ฅ์น ๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ์ํ ๋คํธ์ํฌ | WiFi, BLE, LoRa, 5G |
| Data Processing | ์์ง๋ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ ๋ฐ ๋ถ์ | ์ฃ์ง ์ฒ๋ฆฌ, ํด๋ผ์ฐ๋ ๋ถ์ |
| User Interface | ์ฌ์ฉ์์ ์์คํ ๊ฐ ์ํธ์์ฉ | ๋ชจ๋ฐ์ผ ์ฑ, ์น ๋์๋ณด๋ |
1.3 IoT ํ์ฉ ๋ถ์ผ¶
# IoT ํ์ฉ ๋ถ์ผ ์์
iot_applications = {
"์ค๋งํธํ": ["์จ๋ ์กฐ์ ", "์กฐ๋ช
์ ์ด", "๋ณด์ ์นด๋ฉ๋ผ", "์์ฑ ๋น์"],
"์ค๋งํธ์ํฐ": ["๊ตํต ๊ด๋ฆฌ", "๊ฐ๋ก๋ฑ ์ ์ด", "์ฐ๋ ๊ธฐํต ๋ชจ๋ํฐ๋ง"],
"์ฐ์
IoT": ["์์ธก ์ ๋น", "์์ฐ ์ถ์ ", "ํ์ง ๊ด๋ฆฌ"],
"ํฌ์ค์ผ์ด": ["์จ์ด๋ฌ๋ธ ๊ธฐ๊ธฐ", "์๊ฒฉ ๋ชจ๋ํฐ๋ง", "์ฝ๋ฌผ ๊ด๋ฆฌ"],
"๋์
": ["ํ ์ ์ผ์", "์๋ ๊ด๊ฐ", "๋๋ก ๋ชจ๋ํฐ๋ง"],
}
for sector, applications in iot_applications.items():
print(f"\n{sector}:")
for app in applications:
print(f" - {app}")
2. IoT ์์คํ ์ํคํ ์ฒ¶
2.1 3๊ณ์ธต ์ํคํ ์ฒ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3๊ณ์ธต IoT ์ํคํ
์ฒ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ์์ฉ ๊ณ์ธต (Application Layer) โ โ
โ โ โข ๋ฐ์ดํฐ ์๊ฐํ โ โ
โ โ โข ๋น์ฆ๋์ค ๋ก์ง โ โ
โ โ โข ์ฌ์ฉ์ ์ธํฐํ์ด์ค โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โฒ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ๋คํธ์ํฌ ๊ณ์ธต (Network Layer) โ โ
โ โ โข ๋ฐ์ดํฐ ์ ์ก โ โ
โ โ โข ํ๋กํ ์ฝ ๋ณํ โ โ
โ โ โข ๊ฒ์ดํธ์จ์ด โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โฒ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ์ธ์ ๊ณ์ธต (Perception Layer) โ โ
โ โ โข ์ผ์ โ โ
โ โ โข ์ก์ถ์์ดํฐ โ โ
โ โ โข ์๋ฒ ๋๋ ์์คํ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2.2 ๊ณ์ธต๋ณ ์ญํ ¶
# IoT ์ํคํ
์ฒ ๊ณ์ธต ์ ์
class IoTArchitecture:
"""IoT 3๊ณ์ธต ์ํคํ
์ฒ ๋ชจ๋ธ"""
layers = {
"perception": {
"name": "์ธ์ ๊ณ์ธต",
"components": ["์ผ์", "์ก์ถ์์ดํฐ", "RFID", "GPS"],
"function": "๋ฌผ๋ฆฌ์ ํ๊ฒฝ์์ ๋ฐ์ดํฐ ์์ง ๋ฐ ๋์ ์ํ",
"devices": ["Raspberry Pi", "Arduino", "ESP32"]
},
"network": {
"name": "๋คํธ์ํฌ ๊ณ์ธต",
"components": ["๊ฒ์ดํธ์จ์ด", "๋ผ์ฐํฐ", "ํ๋กํ ์ฝ ๋ณํ๊ธฐ"],
"function": "๋ฐ์ดํฐ ์ ์ก ๋ฐ ๋ผ์ฐํ
",
"protocols": ["WiFi", "BLE", "LoRa", "Zigbee", "MQTT", "HTTP"]
},
"application": {
"name": "์์ฉ ๊ณ์ธต",
"components": ["ํด๋ผ์ฐ๋ ์๋ฒ", "๋ฐ์ดํฐ๋ฒ ์ด์ค", "๋ถ์ ์์ง"],
"function": "๋ฐ์ดํฐ ์ ์ฅ, ๋ถ์, ์๊ฐํ",
"services": ["AWS IoT", "Azure IoT", "Google Cloud IoT"]
}
}
@classmethod
def describe_layer(cls, layer_name: str):
layer = cls.layers.get(layer_name)
if layer:
print(f"๊ณ์ธต: {layer['name']}")
print(f"๊ธฐ๋ฅ: {layer['function']}")
print(f"๊ตฌ์ฑ ์์: {', '.join(layer['components'])}")
# ์ฌ์ฉ ์
IoTArchitecture.describe_layer("perception")
3. ์ฃ์ง vs ํด๋ผ์ฐ๋ ์ปดํจํ ¶
3.1 ๊ฐ๋ ๋น๊ต¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์ฃ์ง vs ํด๋ผ์ฐ๋ ์ปดํจํ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ์ผ์ โ โ ํด๋ผ์ฐ๋ โ โ
โ โ ๋๋ฐ์ด์ค โ โ ์๋ฒ โ โ
โ โโโโโโโโฌโโโโโโโ โโโโโโโโโโโโฌโโโโโโโโโโโ โ
โ โ โ โ
โ โผ โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโ โ โ
โ โ ์ฃ์ง โโโโโโโถโ ๋คํธ์ํฌ โโโโโโโโโโโโโโโโ โ
โ โ ๋๋ฐ์ด์ค โ โโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโ โ
โ โ โ
โ ๋ก์ปฌ ์ฒ๋ฆฌ ์ํ โ
โ - ํํฐ๋ง โ
โ - ์ง๊ณ โ
โ - ๊ฐ๋จํ ๋ถ์ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
3.2 ๋น๊ตํ¶
| ํน์ฑ | ์ฃ์ง ์ปดํจํ | ํด๋ผ์ฐ๋ ์ปดํจํ |
|---|---|---|
| ์ฒ๋ฆฌ ์์น | ๋ฐ์ดํฐ ์์ค ๊ทผ์ฒ | ์๊ฒฉ ๋ฐ์ดํฐ์ผํฐ |
| ์ง์ฐ ์๊ฐ | ๋งค์ฐ ๋ฎ์ (< 10ms) | ๋์ (100ms+) |
| ๋์ญํญ | ๋ฎ์ ์๊ตฌ๋ | ๋์ ์๊ตฌ๋ |
| ์คํ๋ผ์ธ | ๋์ ๊ฐ๋ฅ | ์ฐ๊ฒฐ ํ์ |
| ๋น์ฉ | ์ด๊ธฐ ํฌ์ ๋์ | ์ด์ ๋น์ฉ ์ฆ๊ฐ |
| ์ฒ๋ฆฌ ๋ฅ๋ ฅ | ์ ํ์ | ๋ฌด์ ํ ํ์ฅ |
| ์์ | ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด | AWS, GCP, Azure |
3.3 ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ¶
# ์ฃ์ง-ํด๋ผ์ฐ๋ ํ์ด๋ธ๋ฆฌ๋ ์ํคํ
์ฒ ์์
class HybridIoTSystem:
"""์ฃ์ง์ ํด๋ผ์ฐ๋๋ฅผ ๊ฒฐํฉํ IoT ์์คํ
"""
def __init__(self):
self.edge_buffer = []
self.cloud_threshold = 100 # 100๊ฐ ๋ฐ์ดํฐ๋ง๋ค ํด๋ผ์ฐ๋ ์ ์ก
def process_at_edge(self, sensor_data: dict) -> dict:
"""์ฃ์ง์์ ์ฆ์ ์ฒ๋ฆฌํ ์์
"""
# 1. ์ด์์น ๊ฐ์ง (์ฆ๊ฐ ๋์ ํ์)
if sensor_data.get("temperature", 0) > 50:
self.trigger_local_alarm()
# 2. ๋ฐ์ดํฐ ํํฐ๋ง/์ ์
cleaned_data = self.filter_noise(sensor_data)
# 3. ๋ก์ปฌ ์ ์ฅ ๋ฐ ์ง๊ณ
self.edge_buffer.append(cleaned_data)
return cleaned_data
def should_send_to_cloud(self) -> bool:
"""ํด๋ผ์ฐ๋ ์ ์ก ์กฐ๊ฑด ํ์ธ"""
return len(self.edge_buffer) >= self.cloud_threshold
def send_to_cloud(self):
"""์ง๊ณ๋ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ฐ๋๋ก ์ ์ก"""
if self.should_send_to_cloud():
aggregated = self.aggregate_data(self.edge_buffer)
# cloud_client.publish(aggregated)
self.edge_buffer.clear()
return aggregated
def filter_noise(self, data: dict) -> dict:
"""๋
ธ์ด์ฆ ์ ๊ฑฐ (์ฃ์ง ์ฒ๋ฆฌ)"""
return {k: v for k, v in data.items() if v is not None}
def aggregate_data(self, buffer: list) -> dict:
"""๋ฐ์ดํฐ ์ง๊ณ"""
if not buffer:
return {}
temps = [d.get("temperature", 0) for d in buffer]
return {
"avg_temperature": sum(temps) / len(temps),
"max_temperature": max(temps),
"min_temperature": min(temps),
"count": len(buffer)
}
def trigger_local_alarm(self):
"""๋ก์ปฌ ์๋ ํธ๋ฆฌ๊ฑฐ (์ ์ง์ฐ ์๋ต)"""
print("WARNING: High temperature detected!")
4. IoT ํ๋กํ ์ฝ ๊ฐ์¶
4.1 ํ๋กํ ์ฝ ์คํ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ IoT ํ๋กํ ์ฝ ์คํ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโโ โ
โ โ HTTP โ MQTT โ CoAP โ AMQP โ WebSocket โ โ
โ โ โ โ โ โ โ โ
โ โโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโโค โ
โ โ TCP / UDP โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ
โ โ IP โ โ
โ โโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโโค โ
โ โ WiFi โ BLE โ LoRa โ Zigbee โ Cellular โ โ
โ โ 802.11 โ 802.15.1โ โ 802.15.4โ 4G/5G โ โ
โ โโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
4.2 ์ฃผ์ ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ ์ฝ¶
MQTT (Message Queuing Telemetry Transport)¶
# MQTT ํ๋กํ ์ฝ ํน์ฑ
mqtt_characteristics = {
"type": "Pub/Sub ๋ฉ์์ง",
"transport": "TCP",
"port": 1883, # TLS: 8883
"qos_levels": [0, 1, 2], # At most once, At least once, Exactly once
"use_cases": ["์ผ์ ๋ฐ์ดํฐ", "์ค์๊ฐ ๋ชจ๋ํฐ๋ง", "์๋ฆผ"],
"advantages": ["๊ฒฝ๋", "์ ๋์ญํญ", "์ ๋ขฐ์ฑ ์ต์
"],
"broker": ["Mosquitto", "HiveMQ", "EMQX"]
}
# MQTT ํ ํฝ ๊ตฌ์กฐ ์์
topics = [
"home/living-room/temperature",
"home/living-room/humidity",
"home/+/temperature", # + : ๋จ์ผ ๋ ๋ฒจ ์์ผ๋์นด๋
"home/#" # # : ๋ค์ค ๋ ๋ฒจ ์์ผ๋์นด๋
]
HTTP/REST¶
# REST API IoT ํจํด
rest_patterns = {
"GET /sensors": "๋ชจ๋ ์ผ์ ๋ชฉ๋ก ์กฐํ",
"GET /sensors/{id}": "ํน์ ์ผ์ ์ ๋ณด ์กฐํ",
"GET /sensors/{id}/data": "์ผ์ ๋ฐ์ดํฐ ์กฐํ",
"POST /sensors/{id}/data": "์ ์ผ์ ๋ฐ์ดํฐ ์ ์ก",
"PUT /devices/{id}/config": "๋๋ฐ์ด์ค ์ค์ ๋ณ๊ฒฝ",
}
# RESTful IoT ์์ฒญ ์์
import requests
def get_sensor_data(sensor_id: str, api_base: str = "http://iot-server:8080"):
"""์ผ์ ๋ฐ์ดํฐ ์กฐํ"""
response = requests.get(f"{api_base}/sensors/{sensor_id}/data")
return response.json()
def post_sensor_reading(sensor_id: str, data: dict, api_base: str = "http://iot-server:8080"):
"""์ผ์ ๋ฐ์ดํฐ ์ ์ก"""
response = requests.post(
f"{api_base}/sensors/{sensor_id}/data",
json=data,
headers={"Content-Type": "application/json"}
)
return response.status_code == 201
CoAP (Constrained Application Protocol)¶
# CoAP ํ๋กํ ์ฝ ํน์ฑ
coap_characteristics = {
"type": "RESTful (UDP ๊ธฐ๋ฐ)",
"transport": "UDP",
"port": 5683, # DTLS: 5684
"features": ["๊ฒฝ๋ HTTP ๋์", "๋ฉํฐ์บ์คํธ ์ง์", "๋น๋๊ธฐ ๋ฉ์์ง"],
"use_cases": ["์ ์ ๋ ฅ ๋๋ฐ์ด์ค", "์ ํ๋ ๋คํธ์ํฌ"],
"message_types": ["CON", "NON", "ACK", "RST"]
}
4.3 ํ๋กํ ์ฝ ์ ํ ๊ฐ์ด๋¶
| ์๊ตฌ์ฌํญ | ๊ถ์ฅ ํ๋กํ ์ฝ |
|---|---|
| ์ค์๊ฐ ์๋ฐฉํฅ ํต์ | MQTT, WebSocket |
| ์ ์ ๋ ฅ ๋๋ฐ์ด์ค | CoAP, MQTT-SN |
| ๊ธฐ์กด ์น ์ธํ๋ผ ํ์ฉ | HTTP/REST |
| ๋๊ท๋ชจ ๋ฉ์์ง ์ฒ๋ฆฌ | AMQP, Kafka |
| ๋จ์ ๋ฐ์ดํฐ ์์ง | MQTT |
5. IoT ๋ณด์ ๊ณ ๋ ค์ฌํญ¶
5.1 ๋ณด์ ์ํ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ IoT ๋ณด์ ์ํ ์ ํ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ ๋๋ฐ์ด์ค โ โ ๋คํธ์ํฌ โ โ ํด๋ผ์ฐ๋ โ โ
โ โ ๊ณต๊ฒฉ โ โ ๊ณต๊ฒฉ โ โ ๊ณต๊ฒฉ โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ โ โ โ
โ โข ๋ฌผ๋ฆฌ์ ์ ๊ทผ โข ์ค๊ฐ์ ๊ณต๊ฒฉ โข ์ธ์ฆ ์ฐํ โ
โ โข ํ์จ์ด ์ถ์ถ โข ๋์ฒญ โข API ์ทจ์ฝ์ โ
โ โข ์ฌ์ด๋์ฑ๋ โข ์คํธํ โข ๋ฐ์ดํฐ ์ ์ถ โ
โ โข ๊ธฐ๋ณธ ์๊ฒฉ์ฆ๋ช
โข DDoS โข ๊ถํ ์์น โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
5.2 ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก¶
# IoT ๋ณด์ ์ฒดํฌ๋ฆฌ์คํธ
security_checklist = {
"device_security": [
"๊ธฐ๋ณธ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ",
"ํ์จ์ด ์ ๊ธฐ ์
๋ฐ์ดํธ",
"๋ถํ์ํ ํฌํธ/์๋น์ค ๋นํ์ฑํ",
"Secure Boot ํ์ฑํ",
"๋ฌผ๋ฆฌ์ ์ ๊ทผ ์ ํ"
],
"network_security": [
"TLS/DTLS ์ํธํ ์ฌ์ฉ",
"๋คํธ์ํฌ ๋ถ๋ฆฌ (VLAN)",
"๋ฐฉํ๋ฒฝ ์ค์ ",
"VPN ์ฌ์ฉ ๊ณ ๋ ค"
],
"data_security": [
"์ ์ก ์ค ์ํธํ (TLS)",
"์ ์ฅ ์ ์ํธํ (AES)",
"์ต์ ๊ถํ ์์น",
"์ ๊ธฐ์ ๋ฐฑ์
"
],
"authentication": [
"๊ฐ๋ ฅํ ์ธ์ฆ ๋ฉ์ปค๋์ฆ",
"์ธ์ฆ์ ๊ธฐ๋ฐ ์ธ์ฆ",
"ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ (JWT)",
"API ํค ๊ด๋ฆฌ"
]
}
# TLS๋ฅผ ์ฌ์ฉํ MQTT ์ฐ๊ฒฐ ์์
import ssl
def create_secure_mqtt_context():
"""๋ณด์ MQTT ์ฐ๊ฒฐ์ ์ํ SSL ์ปจํ
์คํธ ์์ฑ"""
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(
certfile="client-cert.pem",
keyfile="client-key.pem"
)
context.load_verify_locations("ca-cert.pem")
context.verify_mode = ssl.CERT_REQUIRED
return context
5.3 ๋ฐ์ดํฐ ์ํธํ ์์¶
from cryptography.fernet import Fernet
import json
class SecureDataHandler:
"""IoT ๋ฐ์ดํฐ ์ํธํ ์ฒ๋ฆฌ"""
def __init__(self, key: bytes = None):
self.key = key or Fernet.generate_key()
self.cipher = Fernet(self.key)
def encrypt_data(self, data: dict) -> bytes:
"""์ผ์ ๋ฐ์ดํฐ ์ํธํ"""
json_data = json.dumps(data).encode()
return self.cipher.encrypt(json_data)
def decrypt_data(self, encrypted: bytes) -> dict:
"""์ํธํ๋ ๋ฐ์ดํฐ ๋ณตํธํ"""
decrypted = self.cipher.decrypt(encrypted)
return json.loads(decrypted.decode())
# ์ฌ์ฉ ์
handler = SecureDataHandler()
sensor_data = {"temperature": 25.5, "humidity": 60}
encrypted = handler.encrypt_data(sensor_data)
print(f"์ํธํ๋ ๋ฐ์ดํฐ: {encrypted[:50]}...")
decrypted = handler.decrypt_data(encrypted)
print(f"๋ณตํธํ๋ ๋ฐ์ดํฐ: {decrypted}")
6. IoT ๊ฐ๋ฐ ํ๊ฒฝ¶
6.1 ํ๋์จ์ด ํ๋ซํผ¶
| ํ๋ซํผ | CPU | RAM | ํน์ง | ์ฉ๋ |
|---|---|---|---|---|
| Raspberry Pi 4 | ARM Cortex-A72 | 1-8GB | Full Linux OS | ๊ฒ์ดํธ์จ์ด, ์ฃ์ง AI |
| Raspberry Pi Pico | RP2040 | 264KB | ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ | ์ผ์ ๋ ธ๋ |
| ESP32 | Xtensa LX6 | 520KB | WiFi/BLE ๋ด์ฅ | IoT ์ผ์ |
| Arduino | ATmega/ARM | 2-256KB | ๋จ์, ์ ์ ๋ ฅ | ํ๋กํ ํ์ดํ |
6.2 ๊ฐ๋ฐ ๋๊ตฌ¶
# ๊ถ์ฅ ๊ฐ๋ฐ ํ๊ฒฝ
dev_environment = {
"ide": ["VS Code + Remote SSH", "Thonny", "PyCharm"],
"languages": ["Python 3.9+", "MicroPython", "C/C++"],
"debugging": ["print debugging", "logging", "remote debugger"],
"testing": ["pytest", "unittest", "hardware simulation"],
"version_control": ["Git"],
"ci_cd": ["GitHub Actions", "GitLab CI"]
}
์ฐ์ต ๋ฌธ์ ¶
๋ฌธ์ 1: IoT ์์คํ ์ค๊ณ¶
์ค๋งํธ ์ฃผ์ฐจ์ฅ ์์คํ ์ ์ค๊ณํ์ธ์. ๋ค์์ ํฌํจํด์ผ ํฉ๋๋ค: - ํ์ํ ์ผ์ ์ข ๋ฅ - ํต์ ํ๋กํ ์ฝ ์ ํ (์ด์ ํฌํจ) - ์ฃ์ง vs ํด๋ผ์ฐ๋ ์ฒ๋ฆฌ ๋ถ๋ฐฐ
๋ฌธ์ 2: ํ๋กํ ์ฝ ์ ํ¶
๋ค์ ์๋๋ฆฌ์ค์ ์ ํฉํ ํ๋กํ ์ฝ์ ์ ํํ๊ณ ์ด์ ๋ฅผ ์ค๋ช ํ์ธ์: 1. ๋ฐฐํฐ๋ฆฌ๋ก ๋์ํ๋ ์๊ฒฉ ์จ๋ ์ผ์ 2. ์ค์๊ฐ ๋ณด์ ์นด๋ฉ๋ผ ์์ ์คํธ๋ฆฌ๋ฐ 3. ์ค๋งํธ ์กฐ๋ช ์ ์ด ์์คํ
๋ฌธ์ 3: ๋ณด์ ๋ถ์¶
๊ฐ์ ์ฉ ์ค๋งํธ ๋์ด๋ฝ์ ์ ์ฌ์ ๋ณด์ ์ทจ์ฝ์ 3๊ฐ์ง๋ฅผ ๋์ดํ๊ณ , ๊ฐ๊ฐ์ ๋ํ ๋์ ๋ฐฉ์์ ์ ์ํ์ธ์.
๋ค์ ๋จ๊ณ¶
- 02_Raspberry_Pi_Setup.md: ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ์ค์ ์ผ๋ก ์ค์ต ํ๊ฒฝ ๊ตฌ์ถ
- 06_MQTT_Protocol.md: MQTT ํ๋กํ ์ฝ ์ฌํ ํ์ต
- 12_Cloud_IoT_Integration.md: ํด๋ผ์ฐ๋ IoT ์๋น์ค ์ฐ๋
์ต์ข ์ ๋ฐ์ดํธ: 2026-02-01