Share via


자습서: 시뮬레이션된 디바이스를 사용하여 IoT 허브와의 연결 테스트

이 자습서에서는 Azure IoT Hub 포털 도구와 Azure CLI 명령을 사용하여 디바이스 연결을 테스트합니다. 또한 데스크톱 컴퓨터에서 실행되는 간단한 디바이스 시뮬레이터도 사용합니다.

Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • 디바이스 인증 확인
  • 디바이스-클라우드 연결 확인
  • 클라우드-디바이스 연결 확인
  • 디바이스 쌍 동기화 확인

필수 조건

  • 이 자습서에서는 Azure CLI를 사용하여 클라우드 리소스를 만듭니다. CLI 명령을 실행하는 방법에는 두 가지가 있습니다.

    참고 항목

    이 문서에서는 azure-iot라는 최신 버전의 Azure IoT 확장이 사용됩니다. 레거시 버전은 azure-cli-iot-ext라고 합니다. 한 번에 하나의 버전만 설치해야 합니다. az extension list 명령을 사용하여 현재 설치된 확장의 유효성을 검사할 수 있습니다.

    az extension remove --name azure-cli-iot-ext를 사용하여 레거시 버전의 확장을 제거합니다.

    az extension add --name azure-iot를 사용하여 새 버전의 확장을 추가합니다.

    설치한 확장을 확인하려면 az extension list를 사용합니다.

  • 이 자습서에서 실행하는 샘플 애플리케이션은 Node.js를 사용합니다. 개발 머신에 Node.js v10.x.x 이상이 필요합니다.

    • nodejs.org에서 여러 플랫폼에 대한 Node.js를 다운로드할 수 있습니다.

    • 다음 명령을 사용하여 개발 컴퓨터에서 Node.js의 현재 버전을 확인할 수 있습니다.

      node --version
      
  • Node.js용 Azure IoT 샘플에서 샘플 Node.js 프로젝트를 복제하거나 다운로드합니다.

  • 방화벽에서 포트 8883이 열려 있는지 확인합니다. 이 자습서의 디바이스 샘플은 포트 8883을 통해 통신하는 MQTT 프로토콜을 사용합니다. 이 포트는 일부 회사 및 교육용 네트워크 환경에서 차단될 수 있습니다. 이 문제를 해결하는 자세한 내용과 방법은 IoT Hub에 연결(MQTT)을 참조하세요.

IoT Hub 만들기

이 섹션에서는 Azure CLI를 사용하여 IoT 허브 및 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다. IoT 허브는 IoT 애플리케이션과 디바이스 간의 양방향 통신을 위한 중앙 메시지 허브 역할을 합니다.

Azure 구독에 IoT Hub가 이미 있는 경우 이 섹션을 건너뛸 수 있습니다.

IoT 허브 및 리소스 그룹을 만들려면 다음을 수행합니다.

  1. CLI 앱을 시작합니다. 이 문서의 나머지 부분에서 CLI 명령을 실행하려면 명령 구문을 복사하여 CLI 앱에 붙여넣고 변수 값을 편집한 다음, Enter를 누릅니다.

    • Cloud Shell을 사용하려면 CLI 명령에서 사용해 보기 단추를 선택하여 분할 브라우저 창에서 Cloud Shell을 시작합니다. 또는 별도의 브라우저 탭에서 Cloud Shell을 열 수 있습니다.
    • Azure CLI를 로컬에서 사용하고 있는 경우 CLI 콘솔 앱을 시작하고 Azure CLI에 로그인합니다.
  2. az extension add를 실행하여 azure-iot 확장을 현재 버전으로 설치하거나 업그레이드합니다.

    az extension add --upgrade --name azure-iot
    
  3. CLI 앱에서 az group create를 실행하여 리소스 그룹을 만듭니다. 다음 명령은 eastus 위치에 MyResourceGroup이라는 리소스 그룹을 만듭니다.

    참고 항목

    필요에 따라 다른 위치를 설정할 수 있습니다. 사용 가능한 위치를 보려면 az account list-locations를 실행합니다. 이 빠른 시작에서는 예제 명령에 표시된 대로 eastus를 사용합니다.

    az group create --name MyResourceGroup --location eastus
    
  4. az iot hub create 명령을 사용하여 IoT Hub를 만듭니다. IoT Hub를 만드는 데 몇 분 정도 걸릴 수 있습니다.

    YourIotHubName. IoT 허브에 대해 선택한 이름을 사용하여 다음 명령에서 이 자리 표시자와 주변 중괄호를 바꿉니다. IoT Hub 이름은 Azure에서 전역적으로 고유해야 합니다. 자리 표시자가 표시될 때마다 이 빠른 시작의 나머지 부분에서 IoT 허브 이름을 사용합니다.

    az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
    

디바이스 인증 확인

허브와 데이터를 교환하려면 먼저 디바이스에서 허브를 인증해야 합니다. 포털의 디바이스 관리 섹션에서 IoT 디바이스 도구를 사용하여 디바이스를 관리하고 사용되는 인증 키를 확인할 수 있습니다. 자습서의 이 섹션에서는 새 테스트 디바이스를 추가하고, 해당 키를 검색한 다음, 테스트 디바이스에서 허브에 연결할 수 있는지 확인합니다. 나중에 디바이스에서 오래된 키를 사용하려고 할 때 발생하는 상황을 관찰하기 위해 인증 키를 다시 설정합니다.

디바이스 등록

연결하기 전에 디바이스를 IoT Hub에 등록해야 합니다. 이 섹션에서는 Azure CLI를 사용하여 디바이스 ID를 만듭니다.

IoT Hub에 디바이스가 이미 등록된 경우 이 섹션을 건너뛸 수 있습니다.

디바이스 ID를 만들려면 다음을 수행합니다.

  1. CLI 셸에서 az iot hub device-identity create 명령을 실행합니다. 이 명령은 디바이스 ID를 만듭니다.

    your_iot_hub_name. 이 자리 표시자를 IoT 허브용으로 선택한 이름으로 바꿉니다.

    myDevice. 이 문서 전체에서 디바이스 ID에 대해 이 이름을 사용하거나 다른 디바이스 이름을 제공할 수 있습니다.

    az iot hub device-identity create --device-id myDevice --hub-name {your_iot_hub_name}
    
  2. Az iot hub device-identity connection-string show 명령을 실행합니다.

    az iot hub device-identity connection-string show --device-id myDevice --hub-name {your_iot_hub_name}
    

    연결 문자열 출력은 다음 형식입니다.

    HostName=<your IoT Hub name>.azure-devices.net;DeviceId=<your device id>;SharedAccessKey=<some value>
    
  3. 연결 문자열을 안전한 위치에 저장합니다.

참고 항목

CLI 앱을 열어 둡니다. 이후 단계에서 사용합니다.

테스트 디바이스 시뮬레이션

원격 분석을 IoT 허브로 보내는 디바이스를 시뮬레이션하려면, 앞에서 다운로드한 Node.js 시뮬레이션된 디바이스 애플리케이션을 실행합니다.

  1. 개발 컴퓨터의 터미널 창에서 다운로드한 Node.js 프로젝트 샘플의 루트 폴더로 이동합니다. 그런 다음, iot-hub\Tutorials\ConnectivityTests 폴더로 이동합니다.

  2. 터미널 창에서 다음 명령을 실행하여 필요한 라이브러리를 설치하고 시뮬레이션된 디바이스 애플리케이션을 실행합니다. 디바이스를 등록할 때 기록해 둔 디바이스 연결 문자열을 사용합니다.

    npm install
    node SimulatedDevice-1.js "{your_device_connection_string}"
    

    허브에 연결되면 터미널 창에 성공 메시지가 표시됩니다.

    Screenshot that shows the simulated device connecting.

이제 IoT 허브에서 생성된 디바이스 키를 사용하여 디바이스에서 성공적으로 인증되었습니다.

키 다시 설정

이 섹션에서는 디바이스 키를 다시 설정하고, 시뮬레이션된 디바이스에서 연결하려고 할 때 발생하는 오류를 관찰합니다.

  1. 디바이스의 기본 디바이스 키를 초기화하려면 az iot hub device-identity update 명령을 실행합니다.

    # Generate a new Base64 encoded key using the current date
    read key < <(date +%s | sha256sum | base64 | head -c 32)
    
    # Reset the primary device key for test device
    az iot hub device-identity update --device-id {your_device_id} --set authentication.symmetricKey.primaryKey=$key --hub-name {your_iot_hub_name}
    
  2. 개발 컴퓨터의 터미널 창에서 시뮬레이션된 디바이스 애플리케이션을 다시 실행합니다.

    npm install
    node SimulatedDevice-1.js "{your_device_connection_string}"
    

    이번에는 애플리케이션에서 연결하려고 하면 다음과 같은 인증 오류가 표시됩니다.

    Screenshot that shows the connection failing after the key reset.

SAS(공유 액세스 서명) 토큰 생성

디바이스에서 IoT Hub 디바이스 SDK 중 하나를 사용하는 경우 SDK 라이브러리 코드에서 허브를 인증하는 데 사용되는 SAS 토큰을 생성합니다. SAS 토큰은 허브 이름, 디바이스 이름 및 디바이스 키로부터 생성됩니다.

클라우드 프로토콜 게이트웨이 또는 사용자 지정 인증 체계의 일부와 같은 몇 가지 시나리오에서는 SAS 토큰을 직접 생성해야 할 수도 있습니다. SAS 생성 코드 문제를 해결하려면 테스트 중에 사용할 알려진 SAS 토큰을 생성하는 것이 유용합니다.

참고 항목

SimulatedDevice-2.js 샘플에는 SDK를 포함 및 포함하지 않고 SAS 토큰을 생성하는 예가 포함되어 있습니다.

  1. CLI를 사용하여 알려진 양호한 SAS 토큰을 생성하려면 az iot hub genereate-sas-token 명령을 실행합니다.

    az iot hub generate-sas-token --device-id {your_device_id} --hub-name {your_iot_hub_name}
    
  2. 생성된 SAS 토큰의 전체 텍스트를 복사합니다. SAS 토큰은 다음 예와 같습니다. SharedAccessSignature sr=tutorials-iot-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111

  3. 개발 컴퓨터의 터미널 창에서 다운로드한 Node.js 프로젝트 샘플의 루트 폴더로 이동합니다. 그런 다음, iot-hub\Tutorials\ConnectivityTests 폴더로 이동합니다.

  4. 터미널 창에서 다음 명령을 실행하여 필요한 라이브러리를 설치하고 시뮬레이션된 디바이스 애플리케이션을 실행합니다.

    npm install
    node SimulatedDevice-2.js "{Your SAS token}"
    

    터미널 창은 SAS 토큰을 사용하여 허브에 연결되면 성공 메시지를 표시합니다.

    Screenshot that shows a successful connection using a SAS token.

이제 CLI 명령으로 생성된 테스트 SAS 토큰을 사용하여 디바이스에서 성공적으로 인증되었습니다. SimulatedDevice-2.js 파일에는 코드에서 SAS 토큰을 생성하는 방법을 보여 주는 샘플 코드가 포함되어 있습니다.

프로토콜

디바이스에서는 다음 프로토콜 중 하나를 사용하여 IoT 허브에 연결할 수 있습니다.

프로토콜 아웃바운드 포트
MQTT 8883
WebSocket을 통한 MQTT 443
AMQP 5671
Websocket 통한 AMQP 443
HTTPS 443

아웃바운드 포트가 방화벽으로 차단되면 다음과 같이 디바이스에서 연결할 수 없습니다.

Screenshot that shows a connection error when the outbound port is blocked.

디바이스-클라우드 연결 확인

디바이스가 연결되면 원격 분석을 IoT Hub로 보낼 수 있습니다. 이 섹션에서는 디바이스에서 보낸 원격 분석이 허브에 도달하는지 확인할 수 있는 방법을 보여 줍니다.

디바이스-클라우드 메시지 보내기

  1. 이전 섹션에서 디바이스에 대한 연결 문자열을 초기화했으므로 az iot hub device-identity connection-string show 명령을 사용하여 업데이트된 연결 문자열을 검색합니다.

    az iot hub device-identity connection-string show --device-id {your_device_id} --output table --hub-name {your_iot_hub_name}
    
  2. 메시지를 보내는 시뮬레이션된 디바이스를 실행하려면 다운로드한 코드의 iot-hub\Tutorials\ConnectivityTests 폴더로 이동합니다.

  3. 터미널 창에서 다음 명령을 실행하여 필요한 라이브러리를 설치하고 시뮬레이션된 디바이스 애플리케이션을 실행합니다.

    npm install
    node SimulatedDevice-3.js "{your_device_connection_string}"
    

    터미널 창에서 허브로 원격 분석을 보내면 다음과 같은 정보가 표시됩니다.

    Screenshot that shows the simulated device sending messages.

수신 메시지 모니터링

포털에서 메트릭을 사용하여 원격 분석 메시지가 IoT Hub에 도달하는지 확인할 수 있습니다.

  1. Azure Portal리소스 드롭다운에서 IoT 허브를 선택합니다.

  2. 탐색 메뉴의 모니터링 섹션에서 메트릭을 선택합니다.

  3. 메트릭으로 전송된 원격 분석 메시지를 선택하고 시간 범위를 지난 1시간으로 설정합니다. 차트에 시뮬레이션된 디바이스에서 보낸 메시지의 집계 수가 표시됩니다.

    Screenshot showing left pane metrics.

시뮬레이션된 디바이스를 시작한 후에 메트릭을 사용할 수 있게 하는 데 몇 분 정도 걸립니다.

클라우드-디바이스 연결 확인

이 섹션에서는 디바이스에 대한 테스트 직접 메서드를 호출하여 클라우드-디바이스 연결을 확인하는 방법을 보여줍니다. 개발 컴퓨터에서 시뮬레이션된 디바이스를 실행하여 허브로부터의 직접 메서드 호출을 수신 대기합니다.

  1. 터미널 창에서 다음 명령을 사용하여 시뮬레이션된 디바이스 애플리케이션을 실행합니다.

    node SimulatedDevice-3.js "{your_device_connection_string}"
    
  2. 별도의 창에서 az iot hub invoke-device-method 명령을 사용하여 디바이스에서 직접 메서드를 호출합니다.

    az iot hub invoke-device-method --device-id {your_device_id} --method-name TestMethod --timeout 10 --method-payload '{"key":"value"}' --hub-name {your_iot_hub_name}
    

    시뮬레이션된 디바이스에서 직접 메서드 호출을 받으면 콘솔에 메시지가 출력됩니다.

    Screenshot that shows the device confirming that the direct method was received.

    시뮬레이션된 디바이스에서 직접 메서드 호출을 성공적으로 받으면 승인을 허브로 다시 보냅니다.

    Screenshot showing that the device returns a direct method acknowledgment.

쌍 동기화 확인

디바이스에서 쌍을 사용하여 디바이스와 허브 간의 상태를 동기화합니다. 이 섹션에서는 CLI 명령을 사용하여 desired 속성을 디바이스로 보내고 디바이스에서 보낸 reported 속성을 읽습니다.

이 섹션에서 사용하는 시뮬레이션된 디바이스에서는 시작할 때마다 reported 속성을 허브로 보내고, desired 속성을 받을 때마다 이 속성을 콘솔에 출력합니다.

  1. 터미널 창에서 다음 명령을 사용하여 시뮬레이션된 디바이스 애플리케이션을 실행합니다.

    node SimulatedDevice-3.js "{your_device_connection_string}"
    
  2. 별도의 창에서 az iot hub device-twin show 명령을 실행하여 허브가 디바이스에서 보고된 속성을 수신했는지 확인합니다.

    az iot hub device-twin show --device-id {your_device_id} --hub-name {your_iot_hub_name}
    

    명령의 출력에서 reported 속성 섹션의 devicelaststarted 속성을 볼 수 있습니다. 이 속성은 시뮬레이션된 디바이스를 마지막으로 시작한 날짜와 시간을 표시합니다.

    Screenshot showing the reported properties of a device.

  3. 허브가 원하는 속성 값을 디바이스로 보낼 수 있는지 확인하려면 az iot hub device-twin update 명령을 사용합니다.

    az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id {your_device_id} --hub-name {your_iot_hub_name}
    

    시뮬레이션된 디바이스에서 허브로부터 desired 속성 업데이트를 받으면 메시지가 출력됩니다.

    Screenshot that shows the device confirming that the desired properties update was received.

desired 속성 변경 내용을 받는 것 외에도, 시뮬레이션된 디바이스에서는 시작할 때 desired 속성을 자동으로 확인합니다.

리소스 정리

더 이상 IoT Hub가 필요하지 않으면 포털에서 IoT Hub와 리소스 그룹을 삭제합니다. 이렇게 하려면 IoT Hub가 포함된 리소스 그룹을 선택하고 삭제를 선택합니다.

다음 단계

이 자습서에서는 디바이스 키 확인, 디바이스-클라우드 연결 확인, 클라우드-디바이스 연결 확인 및 디바이스 쌍 동기화 확인을 수행하는 방법을 살펴보았습니다. IoT 허브를 모니터링하는 방법에 대한 자세한 내용은 IoT Hub 모니터링에 대한 방법 문서를 참조하세요.