Share via


디지털 트윈과 트윈 그래프

이 문서에서는 Azure Digital Twins의 컨텍스트에서 Digital Twins가 무엇인지, Digital Twins 간의 관계가 트윈 그래프를 형성하는 방법에 대해 설명합니다. Azure Digital Twins 솔루션에서 환경의 엔터티는 디지털 트윈으로 표시됩니다. 디지털 트윈은 사용자 정의 모델중 하나의 인스턴스입니다. 이는 관계를 통해 다른 디지털 트윈에 연결하여 트윈 그래프를 형성할 수 있습니다. 이 트윈 그래프는 전체 환경에 대한 표현입니다.

"Azure Digital Twins"는 전체 Azure 서비스를 의미합니다. "Digital 트윈" 또는 "트윈"은 서비스 인스턴스 내의 개별 트윈 노드를 나타냅니다.

Digital Twins

Azure Digital Twins 인스턴스에서 디지털 트윈을 만들려면 먼저 서비스에 모델을 업로드해야 합니다. 모델은 특히 특정 트윈이 가질 수 있는 속성 및 관계 집합을 설명합니다. 모델에 정의된 정보 유형은 사용자 지정 모델을 참조하세요.

모델을 만들고 업로드한 후 클라이언트 앱에서 해당 형식의 인스턴스를 만들 수 있습니다. 이 인스턴스가 디지털 트윈입니다. 예를 들어, Floor의 모델을 만든 후 이 형식을 사용하는 하나 이상의 디지털 트윈을 만들 수 있습니다(예: GroundFloor라는 Floor 형식 트윈, Floor2라는 다른 트윈 등).

참고 항목

Azure Digital Twins의 디지털 트윈은 IoT Hub 의 디바이스 쌍과 다릅니다. IoT Hub 디바이스 쌍은 종종 디바이스 자체의 측면과 기능을 설명하는 데 중점을 두는 반면, Azure Digital Twins의 쌍은 디바이스 또는 많은 관련 디바이스에 대한 사용자 정의 인사이트를 저장할 수 있는 보다 개념적인 표현입니다.

IoT Hub의 디바이스는 여러 서비스에서 디바이스를 나타내는 엔드투엔드 솔루션의 일부로 Azure Digital Twins에 연결할 수 있습니다.

관계: 디지털 트윈의 그래프

트윈은 해당 관계에 따라 트윈으로 연결됩니다. 트윈이 가질 수 있는 관계는 해당 모델의 일부로 정의됩니다.

예를 들어 Floor 모델은 Room 형식의 트윈을 대상으로 하는 contains 관계를 정의할 수 있습니다. 이 정의를 사용하면 Azure Digital Twins를 사용하여 모든 Floor 트윈에서 모든 Room 트윈(Room 하위 유형의 트윈 포함)으로 contains 관계를 만들 수 있습니다.

이 프로세스의 결과는 그래프의 가장자리(해당 관계)를 통해 연결된 노드(디지털 트윈) 집합입니다.

시각화

Azure Digital Twins Explorer는 Azure Digital Twins 그래프의 데이터를 탐색하기 위한 시각적 도구입니다. 탐색기를 사용하여 모델, 쌍, 관계를 확인, 쿼리, 편집할 수 있습니다.

Azure Digital Twins Explorer 도구에 대한 자세한 내용은 Azure Digital Twins Explorer를 참조하세요. 해당 기능을 사용하는 방법에 대한 자세한 단계는 Azure Digital Twins Explorer 사용을 참조하세요.

시각화하면 다음과 같습니다.

Screenshot of Azure Digital Twins Explorer showing sample models and twins.

API로 만들기

이 섹션에서는 클라이언트 애플리케이션에서 디지털 트윈 및 관계를 만드는 방법을 보여 줍니다. DigitalTwins API를 사용하는 .NET SDK 예를 포함하여 이러한 각 개념 내에서 수행되는 작업에 대한 추가 컨텍스트를 제공합니다.

디지털 트윈 만들기

다음은 DigitalTwins API를 사용하여 인스턴스화하는 동안 정의된 twinId가 있는 Room 형식의 트윈을 인스턴스화하는 클라이언트 코드의 코드 조각입니다.

트윈을 만들 때 트윈의 속성을 초기화하거나 나중에 설정할 수 있습니다. 초기화된 속성이 있는 트윈을 만들려면 필요한 초기화 값을 제공하는 JSON 문서를 만듭니다.

// Define a custom model type for the twin to be created

internal class CustomDigitalTwin
{
    [JsonPropertyName(DigitalTwinsJsonPropertyNames.DigitalTwinId)]
    public string Id { get; set; }

    [JsonPropertyName(DigitalTwinsJsonPropertyNames.DigitalTwinETag)]
    public string ETag { get; set; }

    [JsonPropertyName("temperature")]
    public double Temperature { get; set; }

    [JsonPropertyName("humidity")]
    public double Humidity{ get; set; }
}

// Initialize properties and create the twin
public class TwinOperationsCreateTwin
{
    public async Task CreateTwinAsync(DigitalTwinsClient client)
    {
        // Initialize the twin properties
        var myTwin = new CustomDigitalTwin
        {
            Temperature = 25.0,
            Humidity = 50.0,
        };

        // Create the twin
        const string twinId = "<twin-ID>";
        Response<CustomDigitalTwin> response = await client.CreateOrReplaceDigitalTwinAsync(twinId, myTwin);
        Console.WriteLine($"Temperature value: {response.Value.Temperature}");
    }
}

사전을 사용하는 대신, BasicDigitalTwin이라는 도우미 클래스를 사용하여 "트윈" 개체에 속성 필드를 더 직접 저장할 수도 있습니다. 도우미 클래스 및 사용 예에 대한 자세한 내용은 디지털 트윈 만들기를 참조하세요.

참고 항목

트윈 속성은 선택적으로 처리되므로 초기화할 필요가 없지만 트윈을 만들 때 트윈의 모든 구성 요소를 설정해야 합니다. 비어 있는 개체일 수 있지만 구성 요소 자체는 존재해야 합니다.

관계 만들기

다음은 DigitalTwins API를 사용하여 하나의 디지털 트윈(“원본” 트윈)에서 다른 디지털 트윈(“대상” 트윈)에 대한 관계를 빌드하는 예제 클라이언트 코드입니다.

public async Task CreateRelationship(DigitalTwinsClient client)
{
    var rel = new BasicRelationship
    {
        TargetId = "myTargetTwin",
        Name = "contains", // a relationship with this name must be defined in the model
        // Initialize properties
        Properties =
        {
            { "active", true },
        },
    };
    await client.CreateOrReplaceRelationshipAsync("mySourceTwin", "rel001", rel);
}

가져오기 작업 API를 사용하여 트윈 및 관계를 대량으로 만들기

작업 가져오기 API를 사용하여 단일 API 호출에서 많은 트윈 및 관계를 업로드할 수 있습니다. 이 API로 만들어진 트윈 및 관계는 해당 속성의 초기화를 선택적으로 포함할 수 있습니다. 이 API를 사용하는 자세한 지침과 예는 트윈에 대한 대량 가져오기 지침관계를 참조하세요.

그래프 요소 삭제

특정 트윈 및 관계를 삭제하려면 DigitalTwins DeleteDigitalTwins DeleteRelationship API(CLI 명령 및 SDK 호출로도 사용 가능)를 사용합니다.

인스턴스의 모든 모델, 트윈 및 관계를 한 번에 삭제하려면 작업 삭제 API를 사용합니다.

그래프 요소의 JSON 표현

디지털 트윈 데이터와 관계 데이터는 둘 다 JSON 형식으로 저장됩니다. 즉, Azure Digital Twins 인스턴스에서 트윈 그래프를 쿼리하면 생성된 디지털 트윈과 관계의 JSON 표현이 생성됩니다.

디지털 트윈 JSON 형식

JSON 개체로 표시되는 경우 디지털 트윈은 다음 필드를 표시합니다.

필드 이름 설명
$dtId 디지털 트윈의 ID를 나타내는 사용자 제공 문자열
$etag 웹 서버에서 할당한 표준 HTTP 필드
$metadata.$model 이 디지털 트윈을 특징짓는 모델 인터페이스의 ID
$metadata.<property-name> 디지털 트윈의 속성에 대한 기타 메타데이터 정보
$metadata.<property-name>.lastUpdateTime Azure Digital Twins에서 속성 업데이트 메시지를 처리한 날짜/시간입니다.
$metadata.<property-name>.sourceTime 현실 세계에서 속성 업데이트가 관찰되었을 때 타임스탬프를 나타내는 선택적인 쓰기 가능한 속성입니다. 이 속성은 Azure Digital Twins API/SDK2022-05-31 버전을 사용해서만 작성할 수 있으며 값은 ISO 8601 날짜 및 시간 형식을 준수해야 합니다. 이 속성을 업데이트하는 방법에 대한 자세한 내용은 속성의 sourceTime 업데이트를 참조하세요.
<property-name> JSON의 속성 값(string, 숫자 형식 또는 개체)
$relationships 관계 컬렉션에 대한 경로 URL입니다. 디지털 트윈에 나가는 관계 가장자리가 없으면 이 필드가 없습니다.
<component-name> 구성 요소의 속성 값과 메타데이터를 포함하는 JSON 개체입니다(루트 개체와 유사함). 이 개체는 구성 요소에 속성이 없는 경우에도 존재합니다.
<component-name>.$metadata 루트 수준 $metadata와 비슷한 구성 요소에 대한 메타데이터 정보
<component-name>.<property-name> JSON의 구성 요소 속성 값(string, 숫자 형식 또는 개체)

JSON 개체로 형식이 지정된 디지털 트윈의 예는 다음과 같습니다. 이 트윈에는 Humidity와 Temperature라는 두 가지 속성과 Thermostat라는 구성 요소가 있습니다.

{
    "$dtId": "myRoomID",
    "$etag": "W/\"8e6d3e89-1166-4a1d-9a99-8accd8fef43f\"",
    "$metadata": {
        "$model": "dtmi:example:Room23;1",
        "Humidity": {
          "lastUpdateTime": "2021-11-30T18:47:53.7648958Z"
        },
        "Temperature": {
          "lastUpdateTime": "2021-11-30T18:47:53.7648958Z"
        }
    },
    "Humidity": 55,
    "Temperature": 35,
    "Thermostat": {
        "$metadata": {}
    }

관계 JSON 형식

JSON 개체로 표시되는 경우 디지털 트윈의 관계는 다음 필드를 표시합니다.

필드 이름 설명
$relationshipId 이 관계의 ID를 나타내는 사용자 제공 문자열입니다. 이 문자열은 원본 디지털 트윈의 컨텍스트에서 고유하며, 이는 sourceId + relationshipId가 Azure Digital Twins 인스턴스의 컨텍스트에서 고유한 것을 의미하기도 합니다.
$etag 웹 서버에서 할당한 표준 HTTP 필드
$sourceId 원본 디지털 트윈의 ID
$targetId 대상 디지털 트윈의 ID
$relationshipName 관계의 이름
<property-name> [선택 사항] 이 관계의 속성 값(JSON)(string, 숫자 형식 또는 개체)

JSON 개체로 형식이 지정된 관계의 예제는 다음과 같습니다.

{
  "$relationshipId": "relationship-01",
  "$etag": "W/\"506e8391-2b21-4ac9-bca3-53e6620f6a90\"",
  "$sourceId": "GroundFloor",
  "$targetId": "Cafe",
  "$relationshipName": "contains",
  "startDate": "2020-02-04"
}

다음 단계

Azure Digital Twin API를 사용하여 그래프 요소를 관리하는 방법을 참조하세요.

또는 정보에 대한 Azure Digital Twins 트윈 그래프를 쿼리하는 방법에 대해 알아봅니다.