본문 바로가기

AWS

[AWS] IoT Core

 

IoT(사물인터넷)는 이제 우리의 일상에 깊이 스며들어 있습니다.

AWS IoT Core는 이러한 IoT 디바이스와 클라우드를 연결해주는 중요한 서비스입니다.

이번 글에서는 AWS IoT Core가 무엇인지, 어떤 방식으로 동작하는지,

그리고 실생활에서 어떻게 활용할 수 있는지 알아보겠습니다.

알고 싶지 않다.

 

목차

  1. AWS IoT Core란?
  2. AWS IoT Core 동작 흐름
  3. 용어 정리
  4. AWS IoT Core와 디바이스 연동 과정
  5. 전체 흐름 요약

 


AWS IoT Core란?

 

AWS IoT Core는 다양한 IoT 디바이스가 클라우드와

안전하게 데이터를 주고받을 수 있도록 지원하는 AWS의 관리형 서비스입니다.

이를 통해 IoT 디바이스는 데이터를 클라우드로 전송하거나, 클라우드에서 명령을 받아 처리할 수 있습니다.


AWS IoT Core 동작 흐름

1. 디바이스 연결

AWS IoT Core는 다양한 프로토콜(MQTT, HTTPS, WebSocket 등)을 통해 디바이스를 클라우드에 연결합니다.

모든 디바이스는 인증서를 사용해 안전하게 연결되며, TLS(Transport Layer Security)를 통해 데이터가 암호화됩니다.

(ex.스마트 전구가 클라우드와 연결되어 명령을 받을 준비를 합니다.)

 

2. 메시지 브로커

디바이스는 클라우드와 메시지를 주고받기 위해 MQTT 브로커를 사용합니다.

디바이스는 특정 "토픽(topic)"을 통해 데이터를 게시(Publish)하거나 구독(Subscribe)할 수 있습니다.

 

온도 센서 데이터 보내기 (Publish)

온도 센서가 현재 온도를 클라우드로 보냅니다.

{
  "topic": "/sensor/temperature",
  "message": {
    "deviceId": "sensor123",
    "temperature": 25.5,
    "unit": "C"
  }
}

 

명령 받기 (Subscribe)

클라우드가 전구에 불을 켜라는 명령을 보냅니다.

{
  "topic": "/device/light/control",
  "message": {
    "deviceId": "light001",
    "command": "turn_on"
  }
}
 

3. 장치 섀도우 (Device Shadow)

디바이스의 현재 상태를 JSON 문서로 클라우드에 저장하는 가상 객체입니다.

디바이스가 오프라인 상태에서도 클라우드와 상태를 동기화할 수 있습니다.

 

1) 전구의 현재 상태: "켜짐" (Cloud에 저장)

2) 클라우드에서 상태를 "꺼짐"으로 업데이트

3) 전구가 다시 온라인 상태가 되었을 때 "꺼짐" 상태로 동기화

 

4. 룰 엔진 (Rules Engine)

AWS IoT Core의 룰 엔진은 클라우드로 전송된 데이터를 분석하고, 필요에 따라 다른 AWS 서비스와 연계합니다.

(센서 데이터에서 온도가 30°C를 초과하면 AWS Lambda를 호출하여 알림을 보냅니다.)


용어 정리

AWS에서는 아래 그림이 있습니다르릉.

여기에 있는 용어를 간단히 정리할게요를레히히.

 

 

Thing

  • IoT 디바이스를 나타내는 AWS IoT Core 내의 논리적 객체입니다.
  • 디바이스와 관련된 메타데이터(이름, 속성 등)를 저장하고 관리합니다.
  • 디바이스 등록 시 Thing 객체를 생성하여 디바이스를 클라우드에서 관리할 수 있습니다.
  • Shadow (Device Shadow)디바이스의 상태를 JSON 문서 형태로 클라우드에 저장하는 가상 객체입니다.
  • 디바이스가 오프라인이어도 상태를 저장하고 동기화할 수 있습니다.
  • 클라우드에서 상태 변경을 요청하거나 디바이스와 클라우드 간 상태를 중계합니다.

Rule Engine

  • 디바이스에서 전송된 데이터를 처리하고 AWS 서비스로 전달합니다.
  • 데이터를 필터링하거나 변환하며, 특정 조건에 따라 DynamoDB, S3, Lambda 등과 연동할 수 있습니다.

Certificate (인증서)

  • X.509 인증서를 사용해 디바이스를 AWS IoT Core에 인증합니다.
  • 인증서를 통해 디바이스와 클라우드 간 안전한 연결이 가능합니다.
  • 디바이스가 IoT Core에 연결할 때 사용됩니다.

Policy (정책)

  • 디바이스나 사용자가 AWS 리소스에 접근할 권한을 정의하는 문서입니다.
  • MQTT 주제에 대한 게시 및 구독 권한, 데이터 접근 제한 등을 설정합니다.

MQTT (Message Queuing Telemetry Transport)

  • IoT 디바이스 간 데이터를 교환하기 위한 경량 메시징 프로토콜입니다.
  • 디바이스가 데이터를 게시하거나 클라우드에서 명령을 구독하여 통신합니다.

 


AWS IoT Core에 디바이스 연동 과정 

AWS IoT Core에 디바이스를 등록 과정을 알아봅시다.

AWS 글에 있는 내용을 인용했습니다.

 

 

  1. HTTP 클라이언트는 Amazon API Gateway 인스턴스에 요청을 보냅니다. 이 인스턴스는 AWS Lambda 함수를 외부로 노출합니다.
  2. Amazon API Gateway는 요청을 AWS Lambda 함수로 전달합니다.
  3. AWS Lambda 함수는 MQTT 클라이언트 인스턴스를 생성합니다. 이 클라이언트는 AWS IoT Core 인스턴스와 HTTP 요청을 교환하기 위한 채널로 사용됩니다.
  4. MQTT 클라이언트가 AWS IoT Core 인스턴스에 연결되면, 요청을 AWS IoT Core의 특정 토픽으로 전달합니다. 이 토픽은 디바이스와 요청의 페이로드를 교환하기 위해 사용됩니다.
  5. AWS IoT Core가 AWS Lambda 함수에서 요청을 수신하면, 다음 단계에 따라 동기식 접근 방식이 시뮬레이션됩니다:
    1. AWS IoT Core는 MQTT 요청을 디바이스로 전달합니다.
    2. AWS Lambda 함수는 디바이스의 응답을 기다리며, 응답이 없으면 타임아웃으로 실패합니다.
    3. 디바이스는 요청을 읽고, 비즈니스 로직을 실행한 후 응답을 생성합니다.
    4. 디바이스는 확인 메시지와 선택적인 응답이 포함된 MQTT 페이로드를 AWS IoT Core로 다시 게시합니다.
  6. AWS Lambda 함수의 MQTT 클라이언트는 AWS IoT Core에서 MQTT 응답을 수신합니다.
  7. AWS Lambda 함수는 MQTT 응답에서 정보를 추출하여 Amazon API Gateway로 반환할 HTTP 응답을 생성합니다.
  8. Amazon API Gateway는 응답을 클라이언트로 전달합니다.
  9. 클라이언트는 디바이스가 생성한 응답 또는 AWS Lambda 함수에서 생성된 타임아웃 응답을 포함하는 HTTP 응답을 수신합니다.

 

 

 

구현 사양 (Implementation Specifications)

  1. Method: 대상 디바이스에서 실행할 작업을 지정합니다.
    (예: 디바이스를 켜거나 끄는 명령)
  2. Target: 작업을 실행할 대상 디바이스를 지정합니다.
    (예: ThingName 또는 디바이스 ID)
  3. Timeout: 명령 실행 및 응답을 기다리는 제한 시간을 설정합니다.

 

데이터 흐름

  1. HTTP 요청:
    HTTP 클라이언트가 HTTP API를 통해 명령 요청을 보냅니다. 요청에는 Method, Target, Timeout이 포함됩니다.
  2. AWS Lambda:
    • API Gateway에서 요청을 전달받아 처리합니다.
    • MQTT 클라이언트를 생성하여 AWS IoT Core와 연결합니다.
  3. MQTT를 통한 통신:
    • Lambda는 Outbound Topic을 통해 AWS IoT Core에 요청을 게시합니다.
    • AWS IoT Core는 해당 요청을 대상 디바이스로 전달합니다.
  4. 디바이스 응답:
    • 디바이스는 요청을 처리하고 결과를 생성합니다.
    • ACK Topic을 통해 결과를 AWS IoT Core로 반환합니다.
  5. 응답 처리:
    • AWS Lambda는 MQTT 클라이언트로 디바이스의 응답을 수신합니다.
    • 수신된 응답을 기반으로 HTTP 응답을 생성하여 API Gateway를 통해 클라이언트로 반환합니다.

 

토픽 구조 (Topic Structure)

  1. Outbound Topic:
    • 디바이스로 요청을 전달하기 위해 사용됩니다.
    • 예:
      {target}/{method}/{client_prefix}/req_id
      
  2. ACK Topic:
    • 디바이스가 처리한 결과를 반환하기 위해 사용됩니다.
    • 예:
      {client_prefix}/req_id/{target}/{method}/ack
      

 


 

직접 기기를 연결해서 후기로 돌아올 수 있기를... 

사실 관련 내용이 엄청 많기 때문에 속성으로만 본거라 부족한게 많아서 속상하네요.

더 열심히 해야겠습니다.