IoT Thing(디바이스) 등록 및 인증서 발급 방법: 개별 프로비저닝 vs 대량 프로비저닝 (Fleet Provisioning)
안녕하세요. '소프트웨어 공장' 블로그에 오신 것을 환영합니다. 이번 포스팅에서는 AWS IoT Core에서 디바이스를 등록하고 인증서를 발급하는 방법 중 개별 프로비저닝과 대량 프로비저닝 (Fleet Provisioning)에 대해 알아보겠습니다. AWS IoT를 활용하는 IoT 시스템에서 디바이스는 AWS IoT와의 연결을 위해 반드시 등록하고 인증서를 발급받아야 합니다. 이러한 과정에서 개별 프로비저닝과 대량 프로비저닝은 각기 다른 방식으로 디바이스를 등록하고 인증서를 발급합니다. 이 글에서는 두 가지 방법을 비교하고, ESP32와 AWS IoT Device SDK를 활용한 예제 코드도 함께 제공하겠습니다.
1. 개별 프로비저닝 (Individual Provisioning)
개별 프로비저닝은 하나의 디바이스를 AWS IoT에 등록하고 인증서를 발급받는 전통적인 방법입니다. 이 방법은 소규모 디바이스에서 사용되며, 디바이스가 AWS IoT와 연결되기 전에 각 디바이스의 인증서와 키를 개별적으로 발급받아야 합니다. 이 방법은 다음과 같은 절차를 따릅니다.
1.1. 디바이스 등록
디바이스를 AWS IoT에 등록하려면 Thing
을 먼저 생성해야 합니다. Thing
은 AWS IoT에서 디바이스를 나타내는 엔터티로, 디바이스와 연결되는 메타데이터를 포함합니다. 디바이스 등록 후, 인증서를 발급받고 연결을 설정할 수 있습니다.
1.2. 인증서 발급
인증서 발급은 디바이스가 AWS IoT와 안전하게 연결될 수 있도록 해주는 중요한 단계입니다. 개별 프로비저닝에서는 각 디바이스마다 고유한 인증서가 발급되며, 이를 통해 디바이스는 안전하게 메시지를 송수신할 수 있습니다.
1.3. 개별 프로비저닝 예제 (ESP32 + AWS IoT SDK for Embedded C)
ESP32를 사용하여 AWS IoT와 연결하는 예제를 소개합니다. ESP32는 IoT 디바이스 개발에 널리 사용되는 마이크로컨트롤러로, AWS IoT Device SDK를 통해 AWS IoT와의 연결을 쉽게 설정할 수 있습니다. 이 예제에서는 디바이스를 등록하고 인증서를 발급받은 후, AWS IoT에 연결하는 방법을 보여드립니다.
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "aws_iot_config.h"
#include "aws_iot_mqtt_client_interface.h"
// AWS IoT 관련 설정
#define HOST_ADDRESS "your-endpoint.iot.us-west-2.amazonaws.com"
#define CLIENT_ID "esp32-client"
#define TOPIC "temperature/data"
#define PORT 8883
void aws_iot_task(void *param) {
IoT_Client_Init_Params mqttInitParams = IoT_Client_Init_Params_initializer;
IoT_Client_Connect_Params connectParams = IoT_Client_Connect_Params_initializer;
// AWS IoT 클라이언트 초기화
IoT_Error_t rc = aws_iot_mqtt_init(&mqttInitParams);
if (rc != SUCCESS) {
printf("AWS IoT MQTT 초기화 실패: %d\n", rc);
return;
}
// AWS IoT 서버와 연결
rc = aws_iot_mqtt_connect(&mqttInitParams, &connectParams);
if (rc != SUCCESS) {
printf("AWS IoT 연결 실패: %d\n", rc);
return;
}
// 온도 데이터를 MQTT로 전송
while (1) {
float temperature = read_temperature();
char payload[50];
snprintf(payload, sizeof(payload), "{\"temperature\": %.2f}", temperature);
rc = aws_iot_mqtt_publish(&mqttInitParams, TOPIC, payload);
if (rc != SUCCESS) {
printf("온도 데이터 전송 실패: %d\n", rc);
}
vTaskDelay(5000 / portTICK_PERIOD_MS); // 5초 간격으로 전송
}
}
void app_main() {
// AWS IoT와 연결하는 작업 시작
xTaskCreate(aws_iot_task, "AWS IoT Task", 8192, NULL, 5, NULL);
}
위 예제는 ESP32에서 AWS IoT와 연결하고, 온도 데이터를 일정 간격으로 전송하는 코드입니다. 여기서 중요한 부분은 aws_iot_mqtt_connect() 함수와 aws_iot_mqtt_publish() 함수입니다. 이 함수들은 각각 AWS IoT 서버와의 연결을 설정하고, 데이터를 MQTT를 통해 전송하는 역할을 합니다.
2. 대량 프로비저닝 (Fleet Provisioning)
대량 프로비저닝은 수많은 디바이스를 한 번에 AWS IoT에 등록하고 인증서를 발급받는 방법입니다. 이 방법은 대규모 IoT 시스템에서 매우 유용합니다. 예를 들어, 수천 개의 디바이스를 한 번에 AWS IoT에 등록하려는 경우 대량 프로비저닝을 사용하는 것이 효율적입니다.
2.1. 대량 프로비저닝의 특징
자동화된 디바이스 등록: 대량 프로비저닝을 사용하면 디바이스의 개별 등록과 인증서 발급 과정을 자동화할 수 있습니다. 이를 통해 디바이스의 등록 및 관리가 더 쉬워집니다.
프로비저닝 템플릿 사용: 대량 프로비저닝에서는 템플릿을 사용하여 디바이스를 등록하고 인증서를 발급받습니다. 이 템플릿을 통해 프로비저닝 과정이 자동화되며, 디바이스에 대한 세부 설정도 포함될 수 있습니다.
2.2. 대량 프로비저닝 예제 (AWS IoT Server 예제)
대량 프로비저닝을 설정하려면 먼저 AWS IoT에서 프로비저닝 템플릿을 생성해야 합니다. 그 후, 템플릿을 사용하여 여러 디바이스를 등록하고 인증서를 발급받을 수 있습니다. 아래는 Python을 이용하여 대량 프로비저닝을 처리하는 예제 코드입니다.
import boto3
import json
# AWS IoT 클라이언트 설정
client = boto3.client('iot')
# 프로비저닝 템플릿 이름
template_name = 'FleetProvisioningTemplate'
# 디바이스 프로비저닝 템플릿 생성
def create_provisioning_template():
try:
response = client.create_provisioning_template(
templateName=template_name,
description='Template for bulk provisioning devices',
provisioningRoleArn='arn:aws:iam::123456789012:role/ProvisioningRole',
enabled=True,
preProvisioningHook={
'lambdaFunction': 'arn:aws:lambda:us-west-2:123456789012:function:MyProvisioningLambda'
}
)
print("프로비저닝 템플릿 생성 성공:", response)
except Exception as e:
print("프로비저닝 템플릿 생성 실패:", str(e))
# 대량 프로비저닝 요청
def provision_devices():
try:
response = client.create_provisioning_claim(
templateName=template_name,
claimCertificateValidityInMinutes=60,
provisioningClaim={'claimType': 'BULK'}
)
print("디바이스 프로비저닝 요청 성공:", response)
except Exception as e:
print("디바이스 프로비저닝 요청 실패:", str(e))
# 템플릿 생성 및 디바이스 프로비저닝 실행
create_provisioning_template()
provision_devices()
위 코드에서는 AWS SDK for Python (Boto3)을 사용하여 AWS IoT에서 대량 프로비저닝 템플릿을 생성하고, 해당 템플릿을 통해 여러 디바이스를 한 번에 프로비저닝하는 방법을 보여줍니다. 이 코드에서는 프로비저닝을 위한 역할과 람다 함수도 설정할 수 있습니다.
3. 개별 프로비저닝 vs 대량 프로비저닝
3.1. 개별 프로비저닝의 장점
- 간단한 설정: 소규모 시스템에서는 개별 프로비저닝이 간단하고 직관적입니다.
- 수동 제어: 각 디바이스에 대해 개별적으로 설정을 제어할 수 있습니다.
3.2. 대량 프로비저닝의 장점
- 대규모 시스템에 적합: 수천 개의 디바이스를 한 번에 등록하고 관리할 수 있습니다.
- 자동화: 템플릿을 사용하여 디바이스 등록과 인증서 발급을 자동화할 수 있어 효율적입니다.
4. 결론
AWS IoT에서 디바이스를 등록하고 인증서를 발급하는 과정은 IoT 시스템의 핵심적인 부분입니다. 개별 프로비저닝과 대량 프로비저닝은 각각의 시스템 규모와 요구에 맞는 방법을 제공합니다. 작은 규모의 시스템에서는 개별 프로비저닝을, 대규모 시스템에서는 대량 프로비저닝을 사용하는 것이 효율적입니다.
이번 포스팅에서 제공한 ESP32와 AWS IoT Device SDK를 이용한 예제와 Python을 활용한 대량 프로비저닝 예제를 통해, AWS IoT와 디바이스를 어떻게 효과적으로 연결하고 관리할 수 있는지에 대해 알 수 있었습니다. 실습을 통해 두 가지 방법을 모두 익혀보시길 바랍니다.
'AWS IoT' 카테고리의 다른 글
AWS IoT Policy 설정: 디바이스와 서버 간의 권한 제어 (0) | 2025.03.30 |
---|---|
AWS IoT 디바이스 자동 등록: Just-in-Time Provisioning과 Bulk Provisioning (0) | 2025.03.29 |
AWS IoT Thing 등록 및 인증서 발급 방법: Provisioning 종류와 특징 (0) | 2025.03.27 |
IoT Thing(디바이스) 등록 및 인증서 발급 (0) | 2025.03.26 |
AWS IoT Core를 이용한 기본 설정 (0) | 2025.03.25 |