

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 데이터 모델 코드 생성기
<a name="managedintegrations-sdk-device-codegen"></a>

데이터 모델에 코드 생성기를 사용하는 방법을 알아봅니다. 생성된 코드를 사용하여 클라우드와 디바이스 간에 교환되는 데이터 모델을 직렬화하고 역직렬화할 수 있습니다.

프로젝트 리포지토리에는 C 코드 데이터 모델 핸들러를 생성하기 위한 코드 생성 도구가 포함되어 있습니다. 다음 주제에서는 코드 생성기와 워크플로를 설명합니다.

**Topics**
+ [코드 생성 프로세스](#managedintegrations-sdk-codegen-intro)
+ [환경 설정](managedintegrations-sdk-codegen-env.md)
+ [디바이스에 대한 코드 생성](managedintegrations-sdk-codegen-generate.md)

## 코드 생성 프로세스
<a name="managedintegrations-sdk-codegen-intro"></a>

코드 생성기는 Zigbee Cluster Library(ZCL) Advanced Platform의 Matter Data Model(.matter 파일) AWS구현, 사전 처리를 처리하는 Python 플러그인, 코드 구조를 정의하는 Jinja2 템플릿이라는 세 가지 기본 입력에서 C 소스 파일을 생성합니다. 생성 중에 Python 플러그인은 전역 유형 정의를 추가하고, 종속성을 기반으로 데이터 유형을 구성하고, 템플릿 렌더링을 위한 정보의 형식을 지정하여 .matter 파일을 처리합니다.

다음 이미지는 C 소스 파일을 생성하는 코드 생성기를 설명합니다.

![디바이스 SDK 코드 생성기 종료 및 작동 방식.](http://docs.aws.amazon.com/ko_kr/iot-mi/latest/devguide/images/iot-managedintegrations-sdk-codegen.png)


End 디바이스 SDK에는 [https://github.com/project-chip/connectedhomeip/tree/master](https://github.com/project-chip/connectedhomeip/tree/master) 프로젝트[https://github.com/project-chip/connectedhomeip/blob/master/scripts/codegen.py](https://github.com/project-chip/connectedhomeip/blob/master/scripts/codegen.py)에서와 함께 작동하는 Python 플러그인과 Jinja2 템플릿이 포함되어 있습니다. 이 조합은 .matter 파일 입력을 기반으로 각 클러스터에 대해 여러 C 파일을 생성합니다.

**Topics**
+ [Python 플러그인](#managedintegrations-sdk-codegen-plugin)
+ [Jinja2 템플릿](#managedintegrations-sdk-codegen-jinja)
+ [(선택 사항) 사용자 지정 스키마](#managedintegrations-sdk-codegen-schema)

### Python 플러그인
<a name="managedintegrations-sdk-codegen-plugin"></a>

코드 생성기인는 `codegen.py`.matter 파일을 구문 분석하고 정보를 Python 객체로 플러그인에 전송합니다. 플러그인 파일은이 데이터를 `iotmi_data_model.py` 사전 처리하고 제공된 템플릿으로 소스를 렌더링합니다. 사전 처리에는 다음이 포함됩니다.

1. 글로벌 유형`codegen.py`과 같이에서 사용할 수 없는 정보 추가

1. 데이터 유형에 대한 토폴로지 정렬을 수행하여 올바른 정의 순서 설정
**참고**  
토폴로지 정렬은 종속 유형이 원래 순서에 관계없이 종속성 뒤에 정의되도록 합니다.

### Jinja2 템플릿
<a name="managedintegrations-sdk-codegen-jinja"></a>

엔드 디바이스 SDK는 데이터 모델 핸들러 및 하위 수준 C-함수에 맞게 조정된 Jinja2 템플릿을 제공합니다.


**Jinja2 템플릿**  

| 템플릿 | 생성된 소스 | 설명 | 
| --- | --- | --- | 
| cluster.h.jinja | iotmi\_device\_<cluster>.h | 하위 수준 C 함수 헤더 파일을 생성합니다. | 
| cluster.c.jinja | iotmi\_device\_<cluster>.c | 데이터 모델 핸들러를 사용하여 콜백 함수 포인터를 구현하고 등록합니다. | 
| cluster\_type\_helpers.h.jinja | iotmi\_device\_type\_helpers\_<cluster>.h | 데이터 유형에 대한 함수 프로토타입을 정의합니다. | 
| cluster\_type\_helpers.c.jinja | iotmi\_device\_type\_helpers\_<cluster>.c | 클러스터별 열거, 비트맵, 목록 및 구조에 대한 데이터 형식 함수 프로토타입을 생성합니다. | 
| iot\_device\_dm\_types.h.jinja | iotmi\_device\_dm\_types.h | 글로벌 데이터 형식에 대한 C 데이터 형식을 정의합니다. | 
| iot\_device\_type\_helpers\_global.h.jinja | iotmi\_device\_type\_helpers\_global.h | 글로벌 작업에 대한 C 데이터 형식을 정의합니다. | 
| iot\_device\_type\_helpers\_global.c.jinja | iotmi\_device\_type\_helpers\_global.c | 부울, 정수, 부동 소수점, 문자열, 비트맵, 목록 및 구조를 포함한 표준 데이터 형식을 선언합니다. | 

### (선택 사항) 사용자 지정 스키마
<a name="managedintegrations-sdk-codegen-schema"></a>

 End Device SDK는 표준화된 코드 생성 프로세스를 사용자 지정 스키마와 결합합니다. 이를 통해 디바이스 및 디바이스 소프트웨어에 대한 Matter Data Model을 확장할 수 있습니다. 사용자 지정 스키마는 디바이스 device-to-cloud 통신을 위한 디바이스 기능을 설명하는 데 도움이 될 수 있습니다.

 형식, 구조 및 요구 사항을 포함하여 관리형 통합 데이터 모델에 대한 자세한 내용은 섹션을 참조하세요[관리형 통합 데이터 모델](managedintegrations-data-model.md).

 `codegen.py` 도구를 사용하여 다음과 같이 사용자 지정 스키마에 대한 C 소스 파일을 생성합니다.

**참고**  
 각 사용자 지정 클러스터에는 다음 세 파일에 대해 동일한 **클러스터 ID**가 필요합니다.
+  클라우드에서 새 사용자 지정 클러스터를 생성하기 위한 기능 보고를 위한 클러스터 표현을 제공하는 `JSON` 형식으로 사용자 지정 스키마를 생성합니다. 샘플 파일은에 있습니다`codegen/custom_schemas/custom.SimpleLighting@1.0`.
+  사용자 지정 스키마와 동일한 정보가 포함된 `XML` 형식으로 ZCL(Zigbee Cluster Library) 정의 파일을 생성합니다. ZAP 도구를 사용하여 ZCL XML에서 Matter IDL 파일을 생성합니다. 샘플 파일은에 있습니다`codegen/zcl/custom.SimpleLighting.xml`.
+  ZAP 도구의 출력은 `Matter IDL File (.matter)`이며 사용자 지정 스키마에 해당하는 Matter 클러스터를 정의합니다. End device SDK용 C 소스 파일을 생성하는 `codegen.py` 도구의 입력입니다. 샘플 파일은에 있습니다`codegen/matter_files/custom-light.matter`.

 사용자 지정 관리형 통합 데이터 모델을 코드 생성 워크플로에 통합하는 방법에 대한 자세한 지침은 섹션을 참조하세요[디바이스에 대한 코드 생성](managedintegrations-sdk-codegen-generate.md).