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

to navigate between lessons