Azure IoT Hub-대규모 디바이스와 이벤트 처리 지원

손아현·2025년 7월 3일
2

MS DataSchool

목록 보기
4/8

이론


IoT란?

개념

  • 사물인터넷(IoT)은 센서, 디바이스 등 물리적 장치들이 인터넷을 통해 데이터를 주고받는 기술
  • Wi-Fi, 셀룰러, 저전력 블루투스 등 다양한 방식으로 네트워크에 연결됨
  • 실시간 데이터 송수신을 통해 지능적·자동화된 서비스 가능

핵심 구성 요소

  • 디바이스(센서, 카메라 등): 데이터를 수집하는 물리 장치
  • 네트워크: Wi-Fi, 셀룰러, LPWAN 등 연결 방식
  • 데이터: 센서 값, 상태, 영상, 이벤트 등 다양한 포맷
  • 클라우드 플랫폼: 저장, 분석, 제어 명령 전송 등을 처리

IoT 디바이스의 특징

  • IoT가 인터넷과 디바이스와 주고 받는 기술이라면
    이때, 데이터를 생성하고 수신하는 주체가 되는 장치들을 IoT 디바이스인 것!
  • 무인 임베디드 시스템: 센서/액추에이터 중심, 원격 운영
  • 제한된 전력/성능: 저전력, 저성능 환경에서도 동작해야 함
  • 네트워크 제약 존재: 저전력 네트워크(LPWA 등) 및 경량 프로토콜 필요

Azure IoT Hub란?

개념

  • Azure에서 IoT에 특화된 서비스가 바로 Azure IoT Hub!
  • 수백만 대 디바이스와 클라우드 간 양방향 통신을 제공하는 완전관리형 서비스 역할을 하는 것이다!

다양한 기능

1. 보안 및 디바이스 인증

  • 기기 인증 & 접근 제어
    각 기기마다 고유한 인증 수단(SAS 토큰 또는 X.509 인증서)을 부여해요.
    이걸로 "이 기기가 진짜 내 디바이스가 맞는지" 확인하고, 권한이 없는 접근은 막을 수 있어요.

2. 상태 관리 & 메시징

  • Device Twin: 디바이스 상태, 설정을 클라우드와 동기화
    • 기기의 설정, 상태 값을 클라우드에서 복제해 저장해두는 기술.
    • 온도 센서가 지금 어떤 온도인지, 어떤 설정이 되어 있는지 등을
      클라우드에서 바로 확인할 수 있어요!
  • Telemetry 메시지: 디바이스가 → 센서 데이터나 상태를 클라우드로 보내는 메시지 (단방향)
  • Cloud-to-Device 메시지: 클라우드에서 → 디바이스로 보내는 명령·알림 메시지 (단방향)
  • Direct Method: 클라우드에서 디바이스로 즉시 명령을 보내고 바로 응답받는 방식 (양방향)
구분방향설명예시
Device Twin⬅️⬆️ 클라우드 기준상태·설정 복제 저장설정값 유지, 펌웨어 확인
Telemetry디바이스 → 클라우드데이터 보고현재 온도, 위치 등 전송
C2D 메시지클라우드 → 디바이스명령·알림 전송알람, 설정 요청 등
Direct Method양방향즉시 명령 & 응답전원 끄기/켜기 등 실시간 제어

3. 데이터 활용 및 시각화

  • 실시간 데이터는 Stream Analytics → Power BI 등으로 전달 가능
  • 공장/건물/환경 등에서 상태를 실시간으로 시각화하고 이상 감지 가능
  • AI/자동화 시스템 연계 가능 (이상 온도 발생 시 알람 전송)

이론 끝~! 이제 실습하러 궈궈 (👉゚ヮ゚)👉

실습


1. (사전 준비) 소프트웨어 설치프트웨어 설치

https://github.com/azure/azure-iot-explorer/releases
나는 "Azure.IoT.Explorer.Preview.0.15.12.msi"로 설치했다.
설치하면 자동으로 열린다.

2. git clone

터미널을 열고, 원하는 디렉토리로 이동 후,

git clone --branch v2 https://github.com/Azure/azure-iot-sdk-python

3. Azure 포털 접근

  • 리소스 그룹으로 접속! 이때, 새로 만들어도 되는데 rag 때 만들어둔 것으로 함
  • 접속해서 '만들기'클릭
  • IoT 검색, 만들기 클릭
  • 아래와 같이 설정 후 검토+만들기 , 만들기(배포)

4. 배포가 완료되면 리소스로 이동

  • 메뉴에서 '보안 설정 > 공유 엑세스 정책' 으로 이동해서

  • iothubowner를 클릭해서, "기본연결문자열"을 복사한다.

5. .env 파일 생성

5-1. .env에 들어갈 내용 복사하기!

  1. (사전 준비)로 설치한 "Azure IoT Explorer"에 접속해서 파란색 버튼 'Connect via IoT Hub'를 클릭해 이동한다.
  2. Add Connection을 클릭해서 아래와 같이 생성하고, 'Create' 저장!
  3. Primary connection string 복사!! (env의 value가 됨)

5-2. Vscode에서 .env 파일 생성

  1. 터미널에서 디렉토리로 접근해서 cd .\azure-iot-sdk-python\samples\pnp,
    해당 위치에서 code . 로 vscode를 연다

  2. 가상환경 생성
    & "$HOME\AppData\Local\Programs\Python\Python311\python.exe" -m venv .venv
    .venv\Scripts\activate

  3. 라이브러리 설치
    pip install python-dotenv
    pip install azure-iot-device

  4. pnp 파일 내 최상단에 .env 파일 만들기
    ⚠️ 이때, pnp 파일 내에 최상단에 오지 않으면, 이따 runtime error남!
    아까 복사한 primary connection string을 아래에 적용해서 .env 만들고 저장한다.

IOTHUB_DEVICE_CONNECTION_STRING = "{아까 복사한 primary connection string 값}"
IOTHUB_DEVICE_SECURITY_TYPE="connectionString"


6. temp_controller_with_thermostats.py 파일 수정

  1. # 추가 주석을 달아둔 부분들을 추가해준다.
  • 구체적으로 설명하자면,
    from dotenv import load_dotenv # 추가
    요거랑
    # 추가
    load_dotenv()
    logging.basicConfig(lvel = logging.ERROR)
    요게 추가되었다!
  1. 그리고 나서 python .\temp_controller_with_thermostats.py로 실행해본다!
    만약에 runtime error가 난다면, 앞서 설명했듯 env 파일 경로를 확인해보자!
    이렇게 최상단에 와야 한다
    ![](https://velog.velcdn.com/images/ah_yo_ninde_yo/post/3f859097-b982-4b64-819f-0594fca556a7/image.png

✔️ 잘 보내지는지 확인

두 가지 방법이 있다
1. (놓침)
2. stream analytics에서 확인
⇒ 2번째 방법으로 stream analytics도 가져올 수 있는지 확인해보자!

1. job 설정

실행 중인 job이 있다면, 작업 중지를 한다.
(나는 아래 이미지처럼 실행중이어서 중지해줬다)

2. 입력에 IoT Hub를 추가

  • 중지하고 조금 기다리면, 입력 추가 버튼이 활성화 된다.
    (중지되기까지 꽤 오래 기다려야 했음)
  • 중지가 됐으면, 입력 페이지로 가서,
  • 아래와 같이 만들어준다.

3. 쿼리 테스트 확인

  • 마지막으로 쿼리에서 데이터가 들어와지는지 쿼리 테스트로 확인해보자!
  • 기존에 있던 쿼리(이벤트 허브 내용(?))은 다 주석 처리해줬고, 아래 코드만 붙여넣었다.
    select temperature, EventEnqueuedUtcTime
        from [1dt028-iot-hub]
    where temperature is not null
    order by EventEnqueuedUtcTime
  • 그리고나서 쿼리 테스트를 실행하면, 이렇게 결과가 나온다!
    아래에 잘 불러와진 걸 볼 수 있따!

끝!!!!! (o゜▽゜)o☆

0개의 댓글