

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

# AWS IoT Greengrass 개발 도구
<a name="greengrass-development-tools"></a>

 AWS IoT Greengrass 개발 도구를 사용하여 사용자 지정 Greengrass 구성 요소를 생성, 테스트, 빌드, 게시 및 배포합니다.
+ **[Greengrass 개발 키트 CLI](greengrass-development-kit-cli.md)**

  로컬 AWS IoT Greengrass 개발 환경에서 개발 키트 명령줄 인터페이스(GDK CLI)를 사용하여 [Greengrass 소프트웨어 카탈로그](greengrass-software-catalog.md)의 템플릿 및 커뮤니티 구성 요소에서 구성 요소를 생성합니다. GDK CLI를 사용하여 구성 요소를 빌드하고 서비스에 구성 요소를의 AWS IoT Greengrass 프라이빗 구성 요소로 게시할 수 있습니다 AWS 계정.
+ **[Greengrass 명령줄 인터페이스](gg-cli.md)**

  Greengrass 코어 디바이스에서 Greengrass 명령줄 인터페이스(Greengrass CLI)를 사용하여 Greengrass 구성 요소를 배포 및 디버깅합니다. Greengrass CLI는 코어 디바이스에 배포하여 로컬 배포를 생성하고, 설치된 구성 요소에 대한 세부 정보를 보고, 로그 파일을 탐색할 수 있는 구성 요소입니다.
+ **[로컬 디버그 콘솔](local-debug-console-component.md)**

  Greengrass 코어 디바이스의 로컬 디버그 콘솔을 사용하여 로컬 대시보드 웹 인터페이스를 통해 Greengrass 구성 요소를 배포 및 디버깅합니다. 로컬 디버그 콘솔은 코어 디바이스에 배포하여 로컬 배포를 생성하고 설치된 구성 요소에 대한 세부 정보를 볼 수 있는 구성 요소입니다.

AWS IoT Greengrass 는 사용자 지정 Greengrass 구성 요소에 사용할 수 있는 다음과 같은 SDKs도 제공합니다.
+ 프로세스 간 통신(IPC) 라이브러리가 포함된 AWS IoT Device SDK 및 AWS IoT Greengrass 구성 요소 SDK. 자세한 내용은 [AWS IoT Device SDK 를 사용하여 Greengrass nucleus, 기타 구성 요소 및와 통신합니다. AWS IoT CoreGreengrass nucleus, 기타 구성 요소 및와 통신 AWS IoT Core](interprocess-communication.md) 단원을 참조하십시오.
+ 데이터 스트림을 AWS 클라우드로 전송하는 데 사용할 수 있는 스트림 관리자 SDK. 자세한 내용은 [Greengrass 코어 디바이스에서 데이터 스트림 관리](manage-data-streams.md) 단원을 참조하십시오.

**Topics**
+ [AWS IoT Greengrass 개발 키트 명령줄 인터페이스](greengrass-development-kit-cli.md)
+ [Greengrass 명령줄 인터페이스](gg-cli.md)
+ [AWS IoT Greengrass 테스트 프레임워크 사용](gg-testing-framework.md)

# AWS IoT Greengrass 개발 키트 명령줄 인터페이스
<a name="greengrass-development-kit-cli"></a>

AWS IoT Greengrass 개발 키트 CLI(GDK CLI)는 [사용자 지정 Greengrass 구성 요소](develop-greengrass-components.md)를 개발하는 데 도움이 되는 기능을 제공합니다. GDK CLI를 사용하여 사용자 지정 구성 요소를 생성, 빌드 및 게시할 수 있습니다. GDK CLI를 사용하여 구성 요소 리포지토리를 생성할 때 [Greengrass 소프트웨어 카탈로그](greengrass-software-catalog.md)의 템플릿 또는 커뮤니티 구성 요소에서 시작할 수 있습니다. 이후 파일을 ZIP 아카이브로 패키징하거나, Maven 또는 Gradle 빌드 스크립트를 사용하거나, 사용자 지정 빌드 명령을 실행하는 빌드 시스템을 선택할 수 있습니다. 구성 요소를 생성한 후 GDK CLI를 사용하여 AWS IoT Greengrass 서비스에 게시할 수 있으므로 AWS IoT Greengrass 콘솔 또는 API를 사용하여 Greengrass 코어 디바이스에 구성 요소를 배포할 수 있습니다.

GDK CLI 없이 Greengrass 구성 요소를 개발할 때는 구성 요소의 새 버전을 생성할 때마다 [구성 요소 레시피 파일](component-recipe-reference.md)에서 버전 및 아티팩트 URI를 업데이트해야 합니다. GDK CLI를 사용하면 구성 요소의 새 버전을 게시할 때마다 버전 및 아티팩트 URI가 자동으로 업데이트될 수 있습니다.

GDK CLI는 오픈 소스로 GitHub에서 사용할 수 있습니다. 구성 요소 개발 요구 사항에 맞춰 GDK CLI를 사용자 지정 및 확장할 수 있습니다. GitHub 리포지토리에서 문제를 열고 요청을 가져오는 것이 좋습니다. GDK CLI 소스를 찾을 수 있는 링크: [https://github.com/aws-greengrass/aws-greengrass-gdk-cli](https://github.com/aws-greengrass/aws-greengrass-gdk-cli).

## 사전 조건
<a name="gdk-cli-prerequisites"></a>

Greengrass 개발 키트 CLI를 설치 및 사용하려면 다음이 필요합니다.
+ AWS 계정. 없으면 [설정 AWS 계정](setting-up.md#set-up-aws-account) 단원을 참조하세요.
+ 인터넷에 연결된 Windows, macOS 또는 Unix 계열 개발 컴퓨터.
+ GDK CLI 버전 1.1.0 이상의 경우 [Python](https://www.python.org/downloads/) 3.6 이상이 개발 컴퓨터에 설치되어야 합니다.

  GDK CLI 버전 1.0.0의 경우 [Python](https://www.python.org/downloads/) 3.8 이상이 개발 컴퓨터에 설치되어야 합니다.
+ 개발 컴퓨터에 설치된 [Git](https://git-scm.com/).
+ <a name="development-component-aws-cli-prerequisite"></a>자격 증명을 사용하여 개발 컴퓨터에 AWS Command Line Interface(AWS CLI)가 설치되어 있어야 합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [AWS CLI 설치, 업데이트, 제거](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 및 [AWS CLI 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) 단원을 참조하세요.
**참고**  
Raspberry Pi 또는 다른 32비트 ARM 디바이스를 사용하는 경우 AWS CLI V1을 설치합니다. AWS CLI 32비트 ARM 디바이스에서는 V2를 사용할 수 없습니다. 자세한 내용은 [AWS CLI 버전 1 설치, 업데이트 및 제거](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) 섹션을 참조하세요.
+ GDK CLI를 사용하여 AWS IoT Greengrass 서비스에 구성 요소를 게시하려면 다음 권한이 있어야 합니다.
  + `s3:CreateBucket`
  + `s3:GetBucketLocation`
  + `s3:PutObject`
  + `greengrass:CreateComponentVersion`
  + `greengrass:ListComponentVersions`
+ GDK CLI를 사용하여 아티팩트가 로컬 파일 시스템이 아닌 S3 버킷에 있는 구성 요소를 빌드하려면 다음 권한이 있어야 합니다.
  + `s3:ListBucket`

  이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.

## Changelog
<a name="gdk-cli-changelog"></a>

다음 표에서는 GDK CLI의 각 버전에서 변경된 사항에 대해 설명합니다. 자세한 내용은 GitHub의 [GDK CLI Releases 페이지](https://github.com/aws-greengrass/aws-greengrass-gdk-cli/releases)를 참조하세요.


|  **버전**:   |  **변경 사항**  | 
| --- | --- | 
|  1.6.2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
|  1.6.1  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.6.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
|  1.5.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.4.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.3.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.2.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.2.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.2.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.2.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
|  1.1.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
|  1.0.0  |  초기 버전입니다.  | 

# AWS IoT Greengrass 개발 키트 명령줄 인터페이스 설치 또는 업데이트
<a name="install-greengrass-development-kit-cli"></a>

AWS IoT Greengrass 개발 키트 명령줄 인터페이스(GDK CLI)는 Python을 기반으로 빌드되므로 `pip`를 사용하여 개발 컴퓨터에 설치할 수 있습니다.

**작은 정보**  
GDK CLI를 [venv](https://docs.python.org/3/library/venv.html#module-venv) 와 같은 Python 가상 환경에 설치할 수도 있습니다. 자세한 내용은 *Python 3 설명서*의 [가상 환경 및 패키지](https://docs.python.org/3/tutorial/venv.html)를 참조하세요.

**GDK CLI 설치 또는 업데이트**

1. 다음 명령을 실행하여 [GitHub 리포지토리](https://github.com/aws-greengrass/aws-greengrass-gdk-cli)에서 최신 버전의 GDK CLI를 설치합니다.

   ```
   python3 -m pip install -U git+https://github.com/aws-greengrass/aws-greengrass-gdk-cli.git@v1.6.2
   ```
**참고**  
GDK CLI의 특정 버전을 설치하려면 *versionTag*를 설치할 버전 태그로 바꿉니다. [GitHub 리포지토리](https://github.com/aws-greengrass/aws-greengrass-gdk-cli/tags)에서 GDK CLI의 버전 태그를 볼 수 있습니다.  

   ```
   python3 -m pip install -U git+https://github.com/aws-greengrass/aws-greengrass-gdk-cli.git@versionTag
   ```

1. <a name="gdk-cli-verify-installation"></a>다음 명령을 실행하여 GDK CLI가 성공적으로 설치되었는지 확인합니다.

   ```
   gdk --help
   ```

   `gdk` 명령을 찾을 수 없는 경우 해당 폴더를 PATH에 추가합니다.
   + Linux 디바이스에서 PATH에 `/home/MyUser/.local/bin`을 추가하고 *MyUser*를 사용자 이름으로 바꿉니다.
   + Windows 디바이스에서 PATH에 `PythonPath\\Scripts`를 추가하고 *PythonPath*를 디바이스의 Python 폴더 경로로 바꿉니다.

이제 GDK CLI를 사용하여 Greengrass 구성 요소를 생성, 빌드 및 게시할 수 있습니다. GDK CLI 사용 방법에 대한 자세한 내용은 [AWS IoT Greengrass 개발 키트 명령줄 인터페이스 명령](greengrass-development-kit-cli-commands.md) 섹션을 참조하세요.

# AWS IoT Greengrass 개발 키트 명령줄 인터페이스 명령
<a name="greengrass-development-kit-cli-commands"></a>

AWS IoT Greengrass 개발 키트 명령줄 인터페이스(GDK CLI)는 개발 컴퓨터에 Greengrass 구성 요소를 생성, 빌드 및 게시하는 데 사용할 수 있는 명령줄 인터페이스를 제공합니다. GDK CLI 명령은 다음 형식을 사용합니다.

```
gdk <command> <subcommand> [arguments]
```

[GDK CLI를 설치](install-greengrass-development-kit-cli.md)하면 설치 관리자가 PATH에 `gdk`를 추가하여 명령줄에서 GDK CLI를 실행할 수 있습니다.

모든 명령에서 다음 인수를 사용할 수 있습니다.
+ `-h` 또는 `--help`를 사용하면 GDK CLI 명령에 대한 정보를 확인합니다.
+ `-v` 또는 `--version`을 사용하여 설치된 GDK CLI 버전을 확인합니다.
+ `-d` 또는 `--debug`를 사용하면 GDK CLI 디버깅에 사용할 수 있는 세부 로그가 출력됩니다.

이 섹션에서는 GDK CLI 명령을 설명하고 각 명령의 예제를 제공합니다. 각 명령의 개요에는 인수와 용도가 표시됩니다. 선택적 인수는 대괄호에 표시됩니다.

**Topics**
+ [구성 요소](greengrass-development-kit-cli-component.md)
+ [config](greengrass-development-kit-cli-config.md)
+ [test-e2e](greengrass-development-kit-cli-test.md)

# 구성 요소
<a name="greengrass-development-kit-cli-component"></a>

`component` 개발 키트 명령줄 인터페이스(GDK CLI)의 AWS IoT Greengrass 명령을 사용하여 사용자 지정 Greengrass 구성 요소를 생성, 빌드 및 게시합니다.

**Topics**
+ [init](#greengrass-development-kit-cli-component-init)
+ [빌드](#greengrass-development-kit-cli-component-build)
+ [publish](#greengrass-development-kit-cli-component-publish)
+ [list](#greengrass-development-kit-cli-component-list)

## init
<a name="greengrass-development-kit-cli-component-init"></a>

구성 요소 템플릿 또는 커뮤니티 구성 요소에서 Greengrass 구성 요소 폴더를 초기화합니다.

<a name="gdk-cli-component-templates-community-components"></a>GDK CLI는 [Greengrass 소프트웨어 카탈로그](greengrass-software-catalog.md)에서 커뮤니티 구성 요소를 검색하고 [AWS IoT Greengrass GitHub의 구성 요소 템플릿 리포지토리](https://github.com/aws-greengrass/aws-greengrass-component-templates)에서 구성 요소 템플릿을 검색합니다.

**참고**  
<a name="gdk-cli-component-init-empty-folder-requirement"></a>GDK CLI v1.0.0을 사용하는 경우 빈 폴더에서 이 명령을 실행해야 합니다. GDK CLI는 템플릿 또는 커뮤니티 구성 요소를 현재 폴더에 다운로드합니다.  
<a name="gdk-cli-component-init-empty-folder-requirement-gdk-cli-v1.1.0"></a>GDK CLI v1.1.0 이상을 사용하는 경우 `--name` 인수를 지정하여 GDK CLI가 템플릿 또는 커뮤니티 구성 요소를 다운로드하는 폴더를 지정할 수 있습니다. 이 인수를 사용하는 경우 존재하지 않는 폴더를 지정해야 합니다. GDK CLI가 폴더를 생성합니다. 이 인수를 지정하지 않으면 GDK CLI에서 현재 폴더를 사용하고, 이 폴더는 비어 있어야 합니다.  
구성 요소가 [zip 빌드 시스템](gdk-cli-configuration-file.md#gdk-cli-configuration-file-build-system)을 사용하는 경우 GDK CLI는 구성 요소의 폴더에 있는 특정 파일을 구성 요소 폴더와 이름이 동일한 zip 파일로 압축합니다. 예를 들어 구성 요소 폴더의 이름이 `HelloWorld`인 경우 GDK CLI는 `HelloWorld.zip`이라는 파일을 생성합니다. 구성 요소 레시피에서 zip 아티팩트 이름은 구성 요소 폴더의 이름과 일치해야 합니다. Windows 디바이스에서 GDK CLI 버전 1.0.0을 사용하는 경우 구성 요소 폴더 및 zip 파일 이름에는 소문자만 포함되어야 합니다.  
zip 빌드 시스템을 사용하는 템플릿 또는 커뮤니티 구성 요소를 템플릿 또는 구성 요소와 이름이 다른 폴더로 초기화하는 경우 구성 요소 레시피에서 zip 아티팩트 이름을 변경해야 합니다. zip 파일 이름이 구성 요소 폴더의 이름과 일치하도록 `Artifacts` 및 `Lifecycle` 정의를 업데이트합니다. 다음 예제에서는 `Artifacts` 및 `Lifecycle` 정의의 zip 파일 이름이 강조 표시됩니다.  

```
{
  ...
  "Manifests": [
    {
      "Platform": {
        "os": "all"
      },
      "Artifacts": [
        {
          "URI": "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip",
          "Unarchive": "ZIP"
        }
      ],
      "Lifecycle": {
        "Run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
      }
    }
  ]
}
```

```
---
...
Manifests:
  - Platform:
      os: all
    Artifacts:
      - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip"
        Unarchive: ZIP
    Lifecycle:
      Run: "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
```

**시놉시스**  

```
$ gdk component init
    [--language]
    [--template]
    [--repository]
    [--name]
```

**인수(구성 요소 템플릿에서 초기화)**  
+ `-l`, `--language` - 지정한 템플릿에 사용할 프로그래밍 언어입니다.

  `--repository` 또는 `--language`와 `--template`을 지정해야 합니다.
+ `-t`, `--template` - 로컬 구성 요소 프로젝트에 사용할 구성 요소 템플릿입니다. 사용 가능한 템플릿을 보려면 [list](#greengrass-development-kit-cli-component-list) 명령을 사용합니다.

  `--repository` 또는 `--language`와 `--template`을 지정해야 합니다.
+ `-n`, `--name` – (선택 사항) GDK CLI가 구성 요소를 초기화하는 로컬 폴더의 이름입니다. 존재하지 않는 폴더를 지정해야 합니다. GDK CLI가 폴더를 생성합니다.

  이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.

**인수(커뮤니티 구성 요소에서 초기화)**  
+ `-r`, `--repository` - 로컬 폴더에서 확인할 커뮤니티 구성 요소입니다. 사용 가능한 커뮤니티 구성 요소를 보려면 [list](#greengrass-development-kit-cli-component-list) 명령을 사용합니다.

  `--repository` 또는 `--language`와 `--template`을 지정해야 합니다.
+ `-n`, `--name` – (선택 사항) GDK CLI가 구성 요소를 초기화하는 로컬 폴더의 이름입니다. 존재하지 않는 폴더를 지정해야 합니다. GDK CLI가 폴더를 생성합니다.

  이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.

**출력**:  
다음 예제는 Python Hello World 템플릿에서 구성 요소 폴더를 초기화하기 위해 이 명령을 실행할 때 생성된 출력을 보여줍니다.  

```
$ gdk component init -l python -t HelloWorld
[2021-11-29 12:51:40] INFO - Initializing the project directory with a python component template - 'HelloWorld'.
[2021-11-29 12:51:40] INFO - Fetching the component template 'HelloWorld-python' from Greengrass Software Catalog.
```
다음 예제는 커뮤니티 구성 요소에서 구성 요소 폴더를 초기화하기 위해 이 명령을 실행할 때 생성된 출력을 보여줍니다.  

```
$ gdk component init -r aws-greengrass-labs-database-influxdb
[2022-01-24 15:44:33] INFO - Initializing the project directory with a component from repository catalog - 'aws-greengrass-labs-database-influxdb'.
[2022-01-24 15:44:33] INFO - Fetching the component repository 'aws-greengrass-labs-database-influxdb' from Greengrass Software Catalog.
```

## 빌드
<a name="greengrass-development-kit-cli-component-build"></a>

구성 요소의 소스를 AWS IoT Greengrass 서비스에 게시할 수 있는 레시피와 아티팩트로 빌드합니다. GDK CLI는 [GDK CLI 구성 파일](gdk-cli-configuration-file.md)인 `gdk-config.json`에서 지정한 빌드 시스템을 실행합니다. `gdk-config.json` 파일이 있는 곳과 동일한 폴더에서 이 명령을 실행해야 합니다.

이 명령을 실행하면 GDK CLI는 구성 요소 폴더의 `greengrass-build` 폴더에 레시피와 아티팩트를 생성합니다. GDK CLI는 레시피를 `greengrass-build/recipes` 폴더에 저장하고 아티팩트를 `greengrass-build/artifacts/componentName/componentVersion` 폴더에 저장합니다.

GDK CLI v1.1.0 이상을 사용하는 경우 구성 요소 레시피는 S3 버킷에는 있지만 로컬 구성 요소 빌드 폴더에 없는 아티팩트를 지정할 수 있습니다. 이 기능을 사용하면 기계 학습 모델과 같은 큰 아티팩트가 포함된 구성 요소를 개발할 때 대역폭 사용량을 줄일 수 있습니다.

구성 요소를 빌드한 후 다음 중 하나를 수행하여 Greengrass 코어 디바이스에서 테스트할 수 있습니다.
+ AWS IoT Greengrass 코어 소프트웨어를 실행하는 디바이스가 아닌 다른 디바이스에서 개발하는 경우 구성 요소를 게시하여 Greengrass 코어 디바이스에 배포해야 합니다. AWS IoT Greengrass 서비스에 구성 요소를 게시하고 Greengrass 코어 디바이스에 배포합니다. 자세한 내용은 [publish](#greengrass-development-kit-cli-component-build) 명령과 [배포 만들기](create-deployments.md) 섹션을 참조하세요.
+ AWS IoT Greengrass 코어 소프트웨어를 실행하는 것과 동일한 디바이스에서 개발하는 경우 구성 요소를 AWS IoT Greengrass 서비스에 게시하여 배포하거나 로컬 배포를 생성하여 구성 요소를 설치하고 실행할 수 있습니다. 로컬 배포를 생성하려면 Greengrass CLI를 사용합니다. 자세한 내용은 [Greengrass 명령줄 인터페이스](gg-cli.md) 및 [로컬 배포를 사용한 AWS IoT Greengrass 구성 요소 테스트](test-components.md)(을)를 참조하세요. 로컬 배포를 생성할 때 `greengrass-build/recipes`를 레시피 폴더로 지정하고 `greengrass-build/artifacts`를 아티팩트 폴더로 지정합니다.

**시놉시스**  

```
$ gdk component build
```

**인수**:  
없음

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ gdk component build
[2021-11-29 13:18:49] INFO - Getting project configuration from gdk-config.json
[2021-11-29 13:18:49] INFO - Found component recipe file 'recipe.yaml' in the  project directory.
[2021-11-29 13:18:49] INFO - Building the component 'com.example.PythonHelloWorld' with the given project configuration.
[2021-11-29 13:18:49] INFO - Using 'zip' build system to build the component.
[2021-11-29 13:18:49] WARNING - This component is identified as using 'zip' build system. If this is incorrect, please exit and specify custom build command in the 'gdk-config.json'.
[2021-11-29 13:18:49] INFO - Zipping source code files of the component.
[2021-11-29 13:18:49] INFO - Copying over the build artifacts to the greengrass component artifacts build folder.
[2021-11-29 13:18:49] INFO - Updating artifact URIs in the recipe.
[2021-11-29 13:18:49] INFO - Creating component recipe in 'C:\Users\MyUser\Documents\greengrass-components\python\HelloWorld\greengrass-build\recipes'.
```

## publish
<a name="greengrass-development-kit-cli-component-publish"></a>

이 구성 요소를 AWS IoT Greengrass 서비스에 게시합니다. 이 명령은 빌드 아티팩트를 S3 버킷에 업로드하고, 레시피에서 아티팩트 URI를 업데이트하고, 레시피에서 새 버전의 구성 요소를 생성합니다. GDK CLI는 [GDK CLI 구성 파일](gdk-cli-configuration-file.md)인 `gdk-config.json`에서 지정한 S3 버킷 및 AWS 리전을 사용합니다. `gdk-config.json` 파일이 있는 곳과 동일한 폴더에서 이 명령을 실행해야 합니다.

<a name="gdk-cli-s3-bucket-name-formation"></a>GDK CLI v1.1.0 이상을 사용하는 경우 `--bucket` 인수를 지정하여 GDK CLI가 구성 요소의 아티팩트를 업로드하는 S3 버킷을 지정할 수 있습니다. <a name="gdk-cli-s3-bucket-name-formation-format"></a>이 인수를 지정하지 않으면 GDK CLI가 이름이 `bucket-region-accountId`인 S3 버킷에 업로드합니다. 여기서 *bucket*과 *region*은 `gdk-config.json`에서 지정하는 값이고, *accountId*는 AWS 계정 ID입니다. GDK CLI는 버킷이 없는 경우 버킷을 생성합니다.

GDK CLI v1.2.0 이상을 사용하는 경우 `--region` 파라미터를 사용하여 GDK CLI 구성 파일에 지정된 AWS 리전을 재정의할 수 있습니다. `--options` 파라미터를 사용하여 추가 옵션을 지정할 수도 있습니다. 사용 가능한 옵션의 목록은 [Greengrass 개발 키트 CLI 구성 파일](gdk-cli-configuration-file.md) 섹션을 참조하세요.

이 명령을 실행하면 GDK CLI는 레시피에 지정한 버전으로 구성 요소를 게시합니다. `NEXT_PATCH`를 지정하면 GDK CLI는 아직 존재하지 않는 다음 패치 버전을 사용합니다. 의미 체계 버전은 *메이저*.*마이너*.*패치* 번호 시스템을 사용합니다. 자세한 내용은 [의미 체계 버전 사양](https://semver.org/)을 참조하세요.

**참고**  
GDK CLI v1.1.0 이상을 사용하는 경우 이 명령을 실행하면 GDK CLI가 구성 요소 빌드 여부를 확인합니다. 구성 요소가 빌드되지 않으면 GDK CLI는 구성 요소를 게시하기 전에 [구성 요소를 빌드](#greengrass-development-kit-cli-component-build)합니다.

**시놉시스**  

```
$ gdk component publish
    [--bucket] [--region] [--options]
```

**인수**:  
+ `-b`, `--bucket` – (선택 사항) GDK CLI가 구성 요소 아티팩트를 게시하는 S3 버킷의 이름을 지정합니다.

   <a name="gdk-cli-s3-bucket-name-formation-format"></a>이 인수를 지정하지 않으면 GDK CLI가 이름이 `bucket-region-accountId`인 S3 버킷에 업로드합니다. 여기서 *bucket*과 *region*은 `gdk-config.json`에서 지정하는 값이고, *accountId*는 AWS 계정 ID입니다. GDK CLI는 버킷이 없는 경우 버킷을 생성합니다.

  GDK CLI는 버킷이 없는 경우 버킷을 생성합니다.

  이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.
+ `-r`, `--region` – (선택 사항) 구성 요소가 생성될 때 AWS 리전의 이름을 지정합니다. 이 인수는 GDK CLI 구성의 리전 이름을 재정의합니다.

  이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.
+ `-o`, `--options` (선택 사항) 구성 요소 게시를 위한 옵션 목록을 지정합니다. 인수는 유효한 JSON 문자열이거나 게시 옵션이 포함된 JSON 파일의 파일 경로여야 합니다. 이 인수는 GDK CLI 구성의 옵션을 재정의합니다.

  이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ gdk component publish
[2021-11-29 13:45:29] INFO - Getting project configuration from gdk-config.json
[2021-11-29 13:45:29] INFO - Found component recipe file 'recipe.yaml' in the  project directory.
[2021-11-29 13:45:29] INFO - Found credentials in shared credentials file: ~/.aws/credentials
[2021-11-29 13:45:30] INFO - Publishing the component 'com.example.PythonHelloWorld' with the given project configuration.
[2021-11-29 13:45:30] INFO - No private version of the component 'com.example.PythonHelloWorld' exist in the account. Using '1.0.0' as the next version to create.
[2021-11-29 13:45:30] INFO - Uploading the component built artifacts to s3 bucket.
[2021-11-29 13:45:30] INFO - Uploading component artifacts to S3 bucket: {bucket}. If this is your first time using this bucket, add the 's3:GetObject' permission to each core device's token exchange role to allow it to download the component artifacts. For more information, see https://docs.aws.amazon.com/greengrass/v2/developerguide/device-service-role.html.
[2021-11-29 13:45:30] INFO - Not creating an artifacts bucket as it already exists.
[2021-11-29 13:45:30] INFO - Updating the component recipe com.example.PythonHelloWorld-1.0.0.
[2021-11-29 13:45:30] INFO - Creating a new greengrass component com.example.PythonHelloWorld-1.0.0
[2021-11-29 13:45:30] INFO - Created private version '1.0.0' of the component in the account.'com.example.PythonHelloWorld'.
```

## list
<a name="greengrass-development-kit-cli-component-list"></a>

사용 가능한 구성 요소 템플릿 및 커뮤니티 구성 요소 목록을 검색합니다.

<a name="gdk-cli-component-templates-community-components"></a>GDK CLI는 [Greengrass 소프트웨어 카탈로그](greengrass-software-catalog.md)에서 커뮤니티 구성 요소를 검색하고 [AWS IoT Greengrass GitHub의 구성 요소 템플릿 리포지토리](https://github.com/aws-greengrass/aws-greengrass-component-templates)에서 구성 요소 템플릿을 검색합니다.

이 명령의 출력을 [init](#greengrass-development-kit-cli-component-init) 명령에 전달하여 템플릿 및 커뮤니티 구성 요소에서 구성 요소 리포지토리를 초기화할 수 있습니다.

**시놉시스**  

```
$ gdk component list
    [--template]
    [--repository]
```

**인수**:  
+ `-t`, `--template` – (선택 사항) 이 인수를 지정하면 사용 가능한 구성 요소 템플릿이 나열됩니다. 이 명령은 `name-language` 형식으로 각 템플릿의 이름과 언어를 출력합니다. 예를 들어 `HelloWorld-python`에서 템플릿 이름은 `HelloWorld`이고 언어는 `python`입니다.
+ `-r`, `--repository` – (선택 사항) 이 인수를 지정하면 사용 가능한 커뮤니티 구성 요소 리포지토리가 나열됩니다.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ gdk component list --template
[2021-11-29 12:29:04] INFO - Listing all the available component templates from Greengrass Software Catalog.
[2021-11-29 12:29:04] INFO - Found '2' component templates to display.
1. HelloWorld-python
2. HelloWorld-java
```

# config
<a name="greengrass-development-kit-cli-config"></a>

AWS IoT Greengrass 개발 키트 명령줄 인터페이스(GDK CLI)의 `config` 명령을 사용하여 구성 파일인 `gdk-config.json`에서 GDK에 대한 구성을 수정합니다.

**Topics**
+ [업데이트](#greengrass-development-kit-cli-config-update)

## 업데이트
<a name="greengrass-development-kit-cli-config-update"></a>

기존 GDK 구성 파일 내의 필드를 수정하는 대화형 프롬프트를 시작합니다.

**시놉시스**  

```
$ gdk config update
    [--component]
```

**인수**:  
+ `-c`, `--component` - `gdk-config.json` 파일의 구성 요소 관련 필드를 업데이트합니다. 이 인수는 유일한 옵션이므로 필수 사항입니다.

**출력**:  
다음 예제는 이 명령을 실행하여 구성 요소를 구성할 때 생성되는 출력을 보여줍니다.  

```
$ gdk config update --component
Current value of the REQUIRED component_name is (default: com.example.PythonHelloWorld): 
Current value of the REQUIRED author is (default: author): 
Current value of the REQUIRED version is (default: NEXT_PATCH): 
Do you want to change the build configurations? (y/n) 
Do you want to change the publish configurations? (y/n)
[2023-09-26 10:19:48] INFO - Config file has been updated. Exiting...
```

# test-e2e
<a name="greengrass-development-kit-cli-test"></a>

AWS IoT Greengrass 개발 키트 명령줄 인터페이스(GDK CLI)의 `test-e2e` 명령을 사용하여 GDK 프로젝트에서 종단 간 테스트 모듈을 초기화, 빌드 및 실행합니다.

**Topics**
+ [init](#greengrass-development-kit-cli-test-init)
+ [빌드](#greengrass-development-kit-cli-test-build)
+ [실행](#greengrass-development-kit-cli-test-run)

## init
<a name="greengrass-development-kit-cli-test-init"></a>

GTF(Greengrass Testing Framework)를 사용하는 테스트 모듈로 기존 GDK CLI 프로젝트를 초기화합니다.

기본적으로 GDK CLI는 [AWS IoT Greengrass GitHub의 구성 요소 템플릿 리포지토리](https://github.com/aws-greengrass/aws-greengrass-component-templates)에서 Maven 모듈 템플릿을 검색합니다. 이 Maven 모듈은 `aws-greengrass-testing-standalone` JAR 파일에 대한 종속성과 함께 제공됩니다.

이 명령은 GDK 프로젝트 내에 `gg-e2e-tests`라는 새 디렉터리를 생성합니다. 테스트 모듈 디렉터리가 이미 있고 비어 있지 않은 경우 아무 작업도 실시하지 않고 명령이 종료됩니다. 이 `gg-e2e-tests` 폴더에는 Maven 프로젝트에 구조화된 Cucumber 기능과 단계 정의가 포함되어 있습니다.

기본적으로 이 명령은 GTF의 최신 릴리스 버전을 사용하려고 합니다.

**시놉시스**  

```
$ gdk test-e2e init
    [--gtf-version]
```

**인수**:  
+ `-ov`, `--gtf-version` – (선택 사항) GDK 프로젝트의 종단 간 테스트 모듈에 사용할 GTF 버전입니다. 이 값은 [releases](https://github.com/aws-greengrass/aws-greengrass-testing/releases)의 GTF 버전 중 하나여야 합니다. 이 인수는 GDK CLI 구성의 `gtf_version`을 재정의합니다.

**출력**:  
다음 예제는 이 명령을 실행하여 테스트 모듈로 GDK 프로젝트를 초기화할 때 생성되는 출력을 보여줍니다.  

```
$ gdk test-e2e init
[2023-12-06 12:20:28] INFO - Using the GTF version provided in the GDK test config 1.2.0
[2023-12-06 12:20:28] INFO - Downloading the E2E testing template from GitHub into gg-e2e-tests directory...
```

## 빌드
<a name="greengrass-development-kit-cli-test-build"></a>

**참고**  
종단 간 테스트 모듈을 빌드하기 전에 **gdk component build**를 실행하여 구성 요소를 빌드해야 합니다.

종단 간 테스트 모듈을 구축합니다. GDK CLI는 `test-e2e` 속성 아래에서 [GDK CLI 구성 파일](gdk-cli-configuration-file.md)인 `gdk-config.json`에 지정한 빌드 시스템을 사용하여 테스트 모듈을 빌드합니다. `gdk-config.json` 파일이 있는 곳과 동일한 폴더에서 이 명령을 실행해야 합니다.

기본적으로 GDK CLI는 Maven 빌드 시스템을 사용하여 테스트 모듈을 빌드합니다. `gdk test-e2e build` 명령을 실행하려면 [Maven](https://maven.apache.org/)이 필요합니다.

테스트 기능 파일에 `GDK_COMPONENT_NAME` 및 `GDK_COMPONENT_RECIPE_FILE`과 같이 보간할 변수가 있는 경우 테스트 모듈을 빌드하기 전에 **gdk-component-build**를 실행하여 구성 요소를 빌드해야 합니다.

이 명령을 실행하면 GDK CLI는 GDK 프로젝트 구성에서 모든 변수를 보간하고 `gg-e2e-tests` 모듈을 빌드하여 최종 테스트 JAR 파일을 생성합니다.

**시놉시스**  

```
$ gdk test-e2e build
```

**인수**:  
없음

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ gdk test-e2e build
[2023-07-20 15:36:48] INFO - Updating feature file: file:///path/to//HelloWorld/greengrass-build/gg-e2e-tests/src/main/resources/greengrass/features/component.feature
[2023-07-20 15:36:48] INFO - Creating the E2E testing recipe file:///path/to/HelloWorld/greengrass-build/recipes/e2e_test_recipe.yaml
[2023-07-20 15:36:48] INFO - Building the E2E testing module
[2023-07-20 15:36:48] INFO - Running the build command 'mvn package'
.........
```

## 실행
<a name="greengrass-development-kit-cli-test-run"></a>

GDK 구성 파일의 테스트 옵션을 사용하여 테스트 모듈을 실행합니다.

**참고**  
종단 간 테스트를 실행하기 전에 **gdk test-e2e build**를 실행하여 테스트 모듈을 빌드해야 합니다.

**시놉시스**  

```
$ gdk test-e2e run
    [--gtf-options]
```

**인수**:  
+ `-oo`, `--gtf-options` – (선택 사항) 종단 간 테스트를 실행하기 위한 옵션 목록을 지정합니다. 인수는 유효한 JSON 문자열이거나 GTF 옵션이 포함된 JSON 파일의 파일 경로여야 합니다. 구성 파일에 제공된 옵션은 명령 인수에 제공된 옵션과 병합됩니다. 두 곳 모두에 옵션이 있는 경우 인수의 옵션이 구성 파일의 옵션보다 우선합니다.

  이 명령에 `tags` 옵션이 지정되지 않은 경우 GDK는 태그에 `Sample`을 사용합니다. `ggc-archive`가 지정되지 않으면 GDK는 최신 버전의 Greengrass nucleus 아카이브를 다운로드합니다.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ gdk test-e2e run
[2023-07-20 16:35:53] INFO - Downloading latest nucleus archive from url https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-latest.zip
[2023-07-20 16:35:57] INFO - Running test jar with command java -jar /path/to/greengrass-build/gg-e2e-tests/target/uat-features-1.0.0.jar —ggc-archive=/path/to/aws-greengrass-gdk-cli/HelloWorld/greengrass-build/greengrass-nucleus-latest.zip —tags=Sample

16:35:59.693 [] [] [] [INFO] com.aws.greengrass.testing.modules.GreengrassContextModule - Extracting /path/to/workplace/aws-greengrass-gdk-cli/HelloWorld/greengrass-build/greengrass-nucleus-latest.zip into /var/folders/7g/ltzcb_3s77nbtmkzfb6brwv40000gr/T/gg-testing-7718418114158172636/greengrass
16:36:00.534 [gtf-1.1.0-SNAPSHOT] [] [] [INFO] com.aws.greengrass.testing.features.LoggerSteps - GTF Version is gtf-1.1.0-SNAPSHOT
.......
```

# Greengrass 개발 키트 CLI 구성 파일
<a name="gdk-cli-configuration-file"></a>

AWS IoT Greengrass 개발 키트 명령줄 인터페이스(GDK CLI)는 `gdk-config.json` 구성 파일로부터 읽어 구성 요소를 빌드 및 게시합니다. 이 구성 파일은 구성 요소 리포지토리의 루트에 있어야 합니다. GDK CLI [init 명령](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-init)을 사용하여 이 구성 파일로 구성 요소 리포지토리를 초기화할 수 있습니다.

**Topics**
+ [GDK CLI 구성 파일 형식](#gdk-config-format)
+ [GDK CLI 구성 파일 예제](#gdk-config-examples)

## GDK CLI 구성 파일 형식
<a name="gdk-config-format"></a>

구성 요소에 대한 GDK CLI 구성 파일을 정의할 때 다음 정보를 JSON 형식으로 지정합니다.

`gdk_version`  
이 구성 요소와 호환되는 GDK CLI의 최소 버전입니다. 이 값은 [releases](https://github.com/aws-greengrass/aws-greengrass-gdk-cli/releases)의 GDK CLI 버전 중 하나여야 합니다.

`component`  
이 구성 요소의 구성입니다.    
`componentName`    
`author`  
구성 요소의 작성자 또는 게시자입니다.  
`version`  
구성 요소의 버전입니다. 다음 중 하나를 지정하세요.  <a name="gdk-cli-configuration-file-component-version-options"></a>
+ `NEXT_PATCH` – 이 옵션을 선택하면 구성 요소를 게시할 때 GDK CLI에서 버전이 설정됩니다. GDK CLI에서는 AWS IoT Greengrass 서비스 쿼리를 통해 구성 요소의 최신 게시 버전이 식별됩니다. 그런 다음에 버전이 해당 버전 이후의 다음 패치 버전으로 설정됩니다. 이전에 구성 요소를 게시하지 않았으면 GDK CLI에서는 `1.0.0` 버전이 사용됩니다.

  이 옵션을 선택하면 [Greengrass CLI](greengrass-cli-component.md)를 사용하여 AWS IoT Greengrass 코어 소프트웨어를 실행하는 로컬 개발 컴퓨터에 구성 요소를 로컬로 배포하고 테스트할 수 없습니다. 로컬 배포를 활성화하려면 대신 의미 체계 버전을 지정해야 합니다.
+ 의미 체계 버전(예: **1.0.0**). 의미 체계 버전에서는 *major*.*minor*.*patch* 번호 매기기 시스템이 사용됩니다. 자세한 내용은 [의미 체계 버전 사양](https://semver.org/)을 참조하세요.

  구성 요소를 배포하고 테스트하려는 Greengrass 코어 디바이스에서 구성 요소를 개발하는 경우 이 옵션을 선택합니다. [Greengrass CLI](greengrass-cli-component.md)를 사용하여 로컬 배포를 생성하려면 특정 버전으로 구성 요소를 빌드해야 합니다.  
`build`  
이 구성 요소의 소스를 아티팩트에 빌드하는 데 사용할 구성입니다. 이 객체에는 다음 정보가 포함되어 있어야 합니다.    
  `build_system`   
사용할 빌드 시스템입니다. 다음 옵션 중 하나를 선택합니다.  <a name="gdk-cli-configuration-file-component-build-system-options"></a>
+ `zip` - 구성 요소의 폴더를 ZIP 파일로 패키징하여 구성 요소의 유일한 아티팩트로 정의합니다. 다음 유형의 구성 요소에 대해 이 옵션을 선택합니다.
  + Python 또는 JavaScript와 같이 해석된 프로그래밍 언어가 사용되는 구성 요소.
  + 기계 학습 모델 또는 기타 리소스와 같이 코드 이외의 파일이 패키징되는 구성 요소.

  GDK CLI에서는 구성 요소의 폴더를 이름이 동일한 zip 파일로 압축됩니다. 예를 들어, 구성 요소 폴더의 이름이 `HelloWorld`라면 GDK CLI에서는 `HelloWorld.zip`이라는 파일이 생성됩니다.
**참고**  
Windows 디바이스에서 GDK CLI 버전 1.0.0을 사용하는 경우 구성 요소 폴더 및 zip 파일 이름에는 소문자만 포함되어야 합니다.

  GDK CLI에서는 구성 요소의 폴더가 zip 파일로 압축하면 다음 파일을 건너뜁니다.
  + `gdk-config.json` 파일
  + 레시피 파일(`recipe.json` 또는 `recipe.yaml`)
  + 빌드 폴더(예: `greengrass-build`)
+ `maven` - `mvn clean package` 명령을 실행하여 구성 요소의 소스를 아티팩트에 빌드합니다. Java 구성 요소와 같이 [Maven](https://maven.apache.org/)을 사용하는 구성 요소의 경우 이 옵션을 선택합니다.

  Windows 디바이스에서 이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.
+ `gradle` - `gradle build` 명령을 실행하여 구성 요소의 소스를 아티팩트에 빌드합니다. [Gradle](https://gradle.org/)을 사용하는 구성 요소의 경우 이 옵션을 선택합니다. 이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.

  `gradle` 빌드 시스템에서는 빌드 파일로 Kotlin DSL이 지원됩니다. 이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.
+ `gradlew` - `gradlew` 명령을 실행하여 구성 요소의 소스를 아티팩트에 빌드합니다. [Gradle Wrapper](https://docs.gradle.org/current/userguide/gradle_wrapper.html)를 사용하는 구성 요소의 경우 이 옵션을 선택합니다.

  이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.
+ `custom` - 사용자 지정 명령을 실행하여 구성 요소의 소스를 레시피 및 아티팩트에 빌드합니다. `custom_build_command` 파라미터에서 사용자 지정 명령을 지정합니다.  
`custom_build_command`  
(선택 사항) 사용자 지정 빌드 시스템에 대해 실행할 사용자 지정 빌드 명령입니다. `build_system`에 `custom`을 지정한 경우 이 파라미터를 지정해야 합니다.  
이 명령으로 구성 요소 폴더 내의 다음 폴더에 레시피와 아티팩트를 생성될 것입니다. GDK CLI는 [구성 요소 빌드 명령](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-build)을 실행할 때 이러한 폴더를 생성합니다.  
+ 레시피 폴더: `greengrass-build/recipes`
+ 아티팩트 폴더: `greengrass-build/artifacts/componentName/componentVersion`

  *componentName*을 구성 요소 이름으로 바꾸고 *componentVersion*을 구성 요소 버전 또는 `NEXT_PATCH`로 바꿉니다.
단일 문자열 또는 문자열 목록을 지정할 수 있으며, 여기서 각 문자열은 명령의 단어입니다. 예를 들어 C\$1\$1 구성 요소에 대한 사용자 지정 빌드 명령을 실행하려면 **cmake --build build --config Release** 또는 **["cmake", "--build", "build", "--config", "Release"]**를 지정할 수 있습니다.  
사용자 지정 빌드 시스템의 예제를 보려면 [GitHub의 aws.greengrass.labs.LocalWebServer community component](https://github.com/awslabs/aws-greengrass-labs-local-web-server)를 참조하세요.  
`options`  
(선택 사항) 구성 요소 빌드 프로세스 중에 사용되는 추가 구성 옵션입니다.  
이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.    
`excludes`  
zip 파일을 빌드할 때 구성 요소 디렉터리에서 제외할 파일을 정의하는 glob 패턴 목록입니다. `build_system`이 `zip`인 경우에만 유효합니다.  
GDK CLI 버전 1.4.0 이하에서는 제외 목록의 항목과 일치하는 모든 파일이 구성 요소의 모든 하위 디렉터리에서 제외됩니다. GDK CLI 버전 1.5.0 이상에서 동일한 동작을 하려면 제외 목록의 기존 항목 `**/` 기호를 추가합니다. 예를 들어 `*.txt`는 디렉터리에서 텍스트 파일을 제외하고, `**/*.txt`는 모든 디렉터리 및 하위 디렉터리에서 텍스트 파일을 제외합니다.  
GDK CLI 버전 1.5.0 이상에서는 `excludes`가 GDK 구성 파일에 정의되어 있을 때 구성 요소 빌드 도중 경고가 표시될 수 있습니다. 이 경고를 비활성화하려면 환경 변수 `GDK_EXCLUDES_WARN_IGNORE`를 `true`로 설정합니다.
GDK CLI는 항상 zip 파일에서 다음 파일을 제외합니다.  
+ `gdk-config.json` 파일
+ 레시피 파일(`recipe.json` 또는 `recipe.yaml`)
+ 빌드 폴더(예: `greengrass-build`)
다음 파일은 기본적으로 제외됩니다. 하지만 `excludes` 옵션으로 제외되는 파일을 제어할 수 있습니다.  
+ 접두사 “test”로 시작하는 모든 폴더(`test*`)
+ 숨겨진 모든 파일
+ `node_modules` 폴더
`excludes` 옵션을 지정하면 GDK CLI는 `excludes` 옵션으로 설정한 파일만 제외합니다. `excludes` 옵션을 지정하지 않으면 GDK CLI는 이전에 언급한 기본 파일 및 폴더를 제외합니다.  
`zip_name`  
빌드 프로세스 중에 zip 아티팩트를 생성할 때 사용할 zip 파일 이름입니다. `build_system`이 `zip`인 경우에만 유효합니다. `build_system`이 비어 있으면 구성 요소 이름이 zip 파일 이름에 사용됩니다.  
`publish`  
이 구성 요소를 AWS IoT Greengrass 서비스에 게시하는 데 사용할 구성입니다.  
<a name="gdk-cli-s3-bucket-name-formation"></a>GDK CLI v1.1.0 이상을 사용하는 경우 `--bucket` 인수를 지정하여 GDK CLI가 구성 요소의 아티팩트를 업로드하는 S3 버킷을 지정할 수 있습니다. <a name="gdk-cli-s3-bucket-name-formation-format"></a>이 인수를 지정하지 않으면 GDK CLI가 이름이 `bucket-region-accountId`인 S3 버킷에 업로드합니다. 여기서 *bucket*과 *region*은 `gdk-config.json`에서 지정하는 값이고, *accountId*는 AWS 계정 ID입니다. GDK CLI는 버킷이 없는 경우 버킷을 생성합니다.  
이 객체에는 다음 정보가 포함되어 있어야 합니다.    
`bucket`  
구성 요소 아티팩트를 호스팅하는 데 사용할 S3 버킷 이름입니다.  
`region`  
GDK CLI가 이 구성 요소를 게시하는 AWS 리전입니다.  
GDK CLI v1.3.0 이상을 사용하는 경우 이 속성은 선택 사항입니다.  
`options`  
(선택 사항) 구성 요소 버전 생성 중에 사용되는 추가 구성 옵션입니다.  
이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.    
`file_upload_args`  
메타데이터 및 암호화 메커니즘과 같이 버킷에 파일을 업로드하는 동안 Amazon S3로 전송된 인수가 포함된 JSON 구조입니다. 허용되는 인수 목록은 *Boto3 설명서*의 [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/customizations/s3.html#boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/customizations/s3.html#boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS) 클래스를 참조하세요.

`test-e2e`  
(선택 사항) 구성 요소의 엔드 투 엔드 테스트에 사용할 구성입니다. 이 기능은 GDK CLI v1.3.0 이상에서 사용할 수 있습니다.    
`build`  
`build_system` - 사용할 빌드 시스템입니다. 기본값은 `maven`입니다. 다음 옵션 중 하나를 선택합니다.  
+ `maven` – `mvn package` 명령을 실행하여 테스트 모듈을 빌드합니다. 이 옵션을 선택하면 [Maven](https://maven.apache.org/)을 사용하는 테스트 모듈을 빌드합니다.
+ `gradle` – `gradle build` 명령을 실행하여 테스트 모듈을 빌드합니다. [Gradle](https://gradle.org/)을 사용하는 테스트 모듈에 이 옵션을 선택합니다.  
`gtf_version`  
(선택 사항) GTF(Greengrass Testing Framework)로 GDK 프로젝트를 초기화할 때 엔드 투 엔드 테스트 모듈의 종속성으로 사용할 GTF의 버전입니다. 이 값은 [releases](https://github.com/aws-greengrass/aws-greengrass-testing/releases)의 GTF 버전 중 하나여야 합니다. 기본 버전은 GTF 1.1.0입니다.  
`gtf_options`  
(선택 사항) 구성 요소의 엔드 투 엔드 테스트 중에 사용되는 추가 구성 옵션입니다.  
<a name="gtf_options"></a>다음 목록에는 GTF 버전 1.1.0에서 사용할 수 있는 옵션이 있습니다.  
+ `additional-plugins` – (선택 사항) 추가 Cucumber 플러그인
+ `aws-region` - AWS 서비스에 대한 특정 리전 엔드포인트를 대상으로 합니다. 기본값은 AWS SDK에서 검색되는 내용입니다.
+ `credentials-path` - 선택적 AWS 프로필 자격 증명 경로입니다. 기본값은 호스트 환경에서 검색된 자격 증명입니다.
+ `credentials-path-rotation` - AWS 자격 증명의 선택적 교체 기간입니다. 기본값은 15분 또는 `PT15M`입니다.
+ `csr-path` - CSR에서 사용되어 디바이스 인증서가 생성되는 경로입니다.
+ `device-mode` - 테스트 중인 대상 디바이스입니다. 기본값은 로컬 디바이스입니다.
+ `env-stage` – Greengrass의 배포 환경을 대상으로 합니다. 기본값은 프로덕션입니다.
+ `existing-device-cert-arn` - Greengrass의 디바이스 인증서로 사용하려는 기존 인증서의 arn입니다.
+ `feature-path` – 추가 특성 파일이 포함된 파일 또는 디렉터리입니다. 기본적으로 추가 특성 파일은 사용되지 않습니다.
+ `gg-cli-version` – Greengrass CLI의 버전을 재정의합니다. 기본값은 `ggc.version`에 있는 값입니다.
+ `gg-component-bucket` - Greengrass 구성 요소가 보관되는 기존 Amazon S3 버킷의 이름입니다.
+ `gg-component-overrides` – Greengrass 구성 요소 재정의 목록입니다.
+ `gg-persist` - 테스트 실행 후 유지할 테스트 요소 목록입니다. 기본 동작은 아무것도 유지하지 않는 것입니다. 허용되는 값은 `aws.resources`, `installed.software` 및 `generated.files`입니다.
+ `gg-runtime` - 테스트가 테스트 리소스와 상호 작용하는 방식에 영향을 미치는 값의 목록입니다. 이러한 값은 `gg.persist` 파라미터를 대체합니다. 기본값이 비어 있는 경우 설치된 Greengrass 런타임을 포함하여 모든 테스트 리소스가 테스트 사례로 관리된다고 가정합니다. 허용되는 값은 `aws.resources`, `installed.software` 및 `generated.files`입니다.
+ `ggc-archive` – 보관된 Greengrass nucleus 구성 요소의 경로입니다.
+ `ggc-install-root` – Greengrass nucleus 구성 요소를 설치하는 디렉터리입니다. 기본값은 test.temp.path 및 테스트 실행 폴더입니다.
+ `ggc-log-level` – 테스트 실행에 대한 Greengrass nucleus 로그 수준을 설정합니다. 기본값은 ‘INFO’입니다.
+ `ggc-tes-rolename` – AWS IoT Greengrass 코어가 AWS 서비스에 액세스하기 위해 맡을 IAM 역할입니다. 지정된 이름의 역할이 없는 경우 역할이 생성되고 기본 액세스 정책이 생성됩니다.
+ `ggc-trusted-plugins` – Greengrass에 추가되어야 하는 신뢰할 수 있는 플러그인의 경로(호스트)를 쉼표로 구분한 목록입니다. DUT 자체의 경로를 제공하려면 경로에 'dut:' 접두사를 붙입니다.
+ `ggc-user-name` – Greengrass nucleus의 user:group posixUser 값입니다. 기본값은 로그인한 현재 사용자 이름입니다.
+ `ggc-version` - 실행 중인 Greengrass nucleus 구성 요소의 버전을 재정의합니다. 기본값은 ggc.archive에 있는 값입니다.
+ `log-level` – 테스트 실행의 로그 수준입니다. 기본값은 ‘INFO’입니다.
+ `parallel-config` - 배치 인덱스 및 배치 수 세트입니다(JSON 문자열). 배치 인덱스의 기본값은 0이고 배치 수는 1입니다.
+ `proxy-url` - 이 URL을 통해 트래픽을 라우팅하도록 모든 테스트를 구성합니다.
+ `tags` – 특성 태그만 실행합니다. '&' 문자와 교차할 수 있습니다.
+ `test-id-prefix` - AWS 리소스 이름 및 태그를 포함하여 모든 테스트별 리소스에 적용되는 일반 접두사입니다. 기본값은 ‘gg’ 접두사입니다.
+ `test-log-path` - 전체 테스트 실행의 결과를 포함하는 디렉터리입니다. 기본값은 ‘testResults’입니다.
+ `test-results-json` - 결과로 나오는 Cucumber JSON 보고서가 디스크에 기록되는지 여부를 결정하는 플래그입니다. 기본값은 true입니다.
+ `test-results-log` - 콘솔 출력이 디스크에 기록되는지 여부를 결정하는 플래그입니다. 기본값은 false입니다.
+ `test-results-xml` - 결과로 나오는 JUnit XML 보고서가 디스크에 기록되는지 여부를 결정하는 플래그입니다. 기본값은 true입니다.
+ `test-temp-path` - 로컬 테스트 아티팩트를 생성하는 디렉터리입니다. 기본적으로 gg 테스트 접두사가 붙은 무작위 임시 디렉터리로 설정됩니다.
+ `timeout-multiplier` - 모든 테스트 제한 시간에 제공되는 승수입니다. 기본값은 1.0.

## GDK CLI 구성 파일 예제
<a name="gdk-config-examples"></a>

다음 GDK CLI 구성 파일 예제를 참조하면 Greengrass 구성 요소 환경을 구성하는 데 도움이 됩니다.

### Hello World(Python)
<a name="gdk-config-example-hello-world-python"></a>

다음 GDK CLI 구성 파일은 Python 스크립트를 실행하는 Hello World 구성 요소를 지원합니다. 이 구성 파일은 `zip` 빌드 시스템을 사용하여 구성 요소의 Python 스크립트를 GDK CLI를 통해 아티팩트로 업로드하는 ZIP 파일로 패키징합니다.

```
{
  "component": {
    "com.example.PythonHelloWorld": {
      "author": "Amazon",
      "version": "NEXT_PATCH",
      "build": {
        "build_system" : "zip",
        "options": {
           "excludes": [".*"]
        }
      },
      "publish": {
        "bucket": "greengrass-component-artifacts",
        "region": "us-west-2",
        "options": {
           "file_upload_args": {
              "Metadata": {
                 "some-key": "some-value"
              }
           }
        }
      }
    },
  "test-e2e":{
    "build":{
        "build_system": "maven"
    },
    "gtf_version": "1.1.0",
    "gtf_options": { 
         "tags": "Sample"
     }
  },
  "gdk_version": "1.6.1"
  }
}
```

### Hello World(Java)
<a name="gdk-config-example-hello-world-java"></a>

다음 GDK CLI 구성 파일은 Java 애플리케이션을 실행하는 Hello World 구성 요소를 지원합니다. 이 구성 파일은 `maven` 빌드 시스템을 사용하여 구성 요소의 Java 소스 코드를 GDK CLI를 통해 아티팩트로 업로드하는 JAR 파일로 패키징합니다.

```
{
  "component": {
    "com.example.JavaHelloWorld": {
      "author": "Amazon",
      "version": "NEXT_PATCH",
      "build": {
        "build_system" : "maven"
      },
      "publish": {
        "bucket": "greengrass-component-artifacts",
        "region": "us-west-2",
        "options": {
           "file_upload_args": {
              "Metadata": {
                 "some-key": "some-value"
              }
           }
        }
      }
  },
  "test-e2e":{
    "build":{
        "build_system": "maven"
    },
    "gtf_version": "1.1.0",
    "gtf_options": { 
         "tags": "Sample"
     }
  },
  "gdk_version": "1.6.1"
  }
}
```

### 커뮤니티 구성 요소
<a name="gdk-config-community-component-examples"></a>

[Greengrass 소프트웨어 카탈로그](greengrass-software-catalog.md)의 여러 커뮤니티 구성 요소는 GDK CLI를 사용합니다. 이러한 구성 요소의 리포지토리에서 GDK CLI 구성 파일을 탐색할 수 있습니다.

**커뮤니티 구성 요소의 GDK CLI 구성 파일 보기**

1. 다음 명령을 실행하면 GDK CLI를 사용하는 커뮤니티 구성 요소가 나열됩니다.

   ```
   gdk component list --repository
   ```

   응답에는 GDK CLI를 사용하는 각 커뮤니티 구성 요소에 대한 GitHub 리포지토리 이름이 나열됩니다. 각 리포지토리는 `awslabs` 조직에 존재합니다.

   ```
   [2022-02-22 17:27:31] INFO - Listing all the available component repositories from Greengrass Software Catalog.
   [2022-02-22 17:27:31] INFO - Found '6' component repositories to display.
   1. aws-greengrass-labs-database-influxdb
   2. aws-greengrass-labs-telemetry-influxdbpublisher
   3. aws-greengrass-labs-dashboard-grafana
   4. aws-greengrass-labs-dashboard-influxdb-grafana
   5. aws-greengrass-labs-local-web-server
   6. aws-greengrass-labs-lookoutvision-gstreamer
   ```

1. 다음 URL에서 커뮤니티 구성 요소의 GitHub 리포지토리를 엽니다. *community-component-name*을 이전 단계의 커뮤니티 구성 요소 이름으로 바꿉니다.

   ```
   https://github.com/awslabs/community-component-name
   ```

# Greengrass 명령줄 인터페이스
<a name="gg-cli"></a>

Greengrass CLI(명령줄 인터페이스)를 사용하면 디바이스의 AWS IoT Greengrass 코어와 상호 작용하여 로컬에서 구성 요소를 개발하고 문제를 디버깅할 수 있습니다. 예를 들어 Greengrass CLI를 사용하여 로컬 배포를 생성하고 코어 디바이스에서 구성 요소를 다시 시작할 수 있습니다.

[Greengrass CLI 구성 요소](greengrass-cli-component.md)(`aws.greengrass.Cli`)를 배포하여 코어 디바이스에 Greengrass CLI를 설치합니다.

**중요**  
 <a name="local-dev-tools-production-environment-warning"></a>이 구성 요소는 프로덕션 환경이 아닌 개발 환경에서만 사용하는 것이 좋습니다. 이 구성 요소는 일반적으로 프로덕션 환경에서는 필요하지 않은 정보와 작업에 대한 액세스를 제공합니다. 필요한 코어 디바이스에만 이 구성 요소를 배포하여 최소 권한 원칙을 따르세요.

**Topics**
+ [Greengrass CLI 설치](install-gg-cli.md)
+ [Greengrass CLI 명령](gg-cli-reference.md)

# Greengrass CLI 설치
<a name="install-gg-cli"></a>

다음 방법 중 하나를 사용하여 Greengrass CLI를 설치할 수 있습니다.
+ 디바이스에서 AWS IoT Greengrass 코어 소프트웨어를 처음 설정할 때 `--deploy-dev-tools` 인수를 사용합니다. 이 인수를 적용하려면 `--provision true`를 지정해야 합니다.
+ Greengrass CLI 구성 요소(`aws.greengrass.Cli`)를 디바이스에 배포합니다.

이 섹션에서는 Greengrass CLI 구성 요소 배포 단계를 설명합니다. 최초 설정 시 Greengrass CLI 설치에 대한 자세한 내용은 [자습서: AWS IoT Greengrass V2 시작하기](getting-started.md)의 내용을 참조하세요.

## 사전 조건
<a name="gg-cli-prereqs"></a>

Greengrass CLI 구성 요소를 배포하려면 다음과 같은 요구 사항을 충족해야 합니다.
+ AWS IoT Greengrass 코어 디바이스에 설치 및 구성된 코어 소프트웨어입니다. 자세한 내용은 [자습서: AWS IoT Greengrass V2 시작하기](getting-started.md) 단원을 참조하십시오.
+  AWS CLI 를 사용하여 Greengrass CLI를 배포하려면를 설치하고 구성해야 합니다 AWS CLI. 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [AWS CLI구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)을 참조하세요.
+ <a name="greengrass-cli-authorization-requirement"></a> AWS IoT Greengrass 코어 소프트웨어와 상호 작용하려면 Greengrass CLI를 사용할 권한이 있어야 합니다. 다음 중 하나를 수행하여 Greengrass CLI 사용:
  +  AWS IoT Greengrass 코어 소프트웨어를 실행하는 시스템 사용자를 사용합니다.
  + 루트 또는 관리 권한이 있는 사용자를 사용합니다. Linux 코어 디바이스에서 `sudo`를 사용하여 루트 권한을 얻을 수 있습니다.
  + 구성 요소를 배포할 때 `AuthorizedPosixGroups` 또는 `AuthorizedWindowsGroups` 구성 파라미터에 지정한 그룹에 있는 시스템 사용자를 사용합니다. 자세한 내용은 [Greengrass CLI 구성 요소 구성](greengrass-cli-component.md#greengrass-cli-component-configuration)을 참조하세요.

## Greengrass CLI 구성 요소 배포
<a name="gg-cli-deploy"></a>

다음 단계를 완료하여 Greengrass CLI 구성 요소를 코어 디바이스에 배포:

### Greengrass CLI 구성 요소 배포(콘솔)
<a name="gg-cli-deploy-console"></a>

1. [AWS IoT Greengrass 콘솔](https://console.aws.amazon.com/greengrass)에 로그인합니다.

1. 탐색 메뉴에서 **구성 요소**를 선택합니다.

1. **구성 요소** 페이지의 **퍼블릭 구성 요소** 탭에서 `aws.greengrass.Cli`을(를) 선택합니다.

1. **aws.greengrass.Cli** 페이지에서 **배포**를 선택합니다.

1. **배포에 추가**에서 **새 배포 생성**을 선택합니다.

1. **대상 지정** 페이지의 **배포 대상**에 있는 **대상 이름** 목록에서 배포할 Greengrass 그룹을 선택하고 **다음**을 선택합니다.

1. **구성 요소 선택** 페이지에서 **aws.greengrass.Cli** 구성 요소가 선택되었는지 확인하고 **다음**을 선택합니다.

1. **구성 요소 구성** 페이지에서 기본 구성 설정을 유지하고 **다음**을 선택합니다.

1. **고급 설정 구성** 페이지에서 기본 구성 설정을 유지하고 **다음**을 선택합니다.

1. **검토** 페이지에서 **배포**를 클릭합니다.

### Greengrass CLI 구성 요소 배포(AWS CLI)
<a name="gg-cli-deploy-cli"></a>

1. 디바이스에서 Greengrass CLI 구성 요소에 대한 배포 구성을 정의하는 `deployment.json` 파일을 생성합니다. 이 파일은 다음과 같습니다.

   ```
   {
     "targetArn":"targetArn",
     "components": {
       "aws.greengrass.Cli": {
         "componentVersion": "2.17.0",
         "configurationUpdate": {
           "merge": "{\"AuthorizedPosixGroups\":\"<group1>,<group2>,...,<groupN>\",\"AuthorizedWindowsGroups\":\"<group1>,<group2>,...,<groupN>\"}"
         }
       }
     }
   }
   ```
   + `target` 필드에서 `targetArn`을 다음 형식으로 배포 대상으로 지정할 사물 또는 사물 그룹의 Amazon 리소스 이름(ARN)으로 바꿉니다.
     + 사물: `arn:aws:iot:region:account-id:thing/thingName`
     + 사물 그룹: `arn:aws:iot:region:account-id:thinggroup/thingGroupName`
   + `aws.greengrass.Cli` 구성 요소 객체에서 다음과 같이 값을 지정합니다.  
`version`  
Greengrass CLI 구성 요소의 버전.  
`configurationUpdate.AuthorizedPosixGroups`  
(선택 사항) 쉼표로 구분된 시스템 그룹 목록이 포함된 문자열. 이러한 시스템 그룹에 Greengrass CLI를 사용하여 AWS IoT Greengrass 코어 소프트웨어와 상호 작용할 수 있는 권한을 부여합니다. 그룹 이름 또는 그룹 ID를 지정할 수 있습니다. 예를 들어 `group1,1002,group3`은 3개의 시스템 그룹(`group1`, `1002` 및 `group3`)에 Greengrass CLI 사용 권한을 부여합니다.  
권한을 부여할 그룹을 지정하지 않으면 Greengrass CLI를 루트 사용자(`sudo`) 또는 AWS IoT Greengrass 코어 소프트웨어를 실행하는 시스템 사용자로 사용할 수 있습니다.  
`configurationUpdate.AuthorizedWindowsGroups`  
(선택 사항) 쉼표로 구분된 시스템 그룹 목록이 포함된 문자열. 이러한 시스템 그룹에 Greengrass CLI를 사용하여 AWS IoT Greengrass 코어 소프트웨어와 상호 작용할 수 있는 권한을 부여합니다. 그룹 이름 또는 그룹 ID를 지정할 수 있습니다. 예를 들어 `group1,1002,group3`은 3개의 시스템 그룹(`group1`, `1002` 및 `group3`)에 Greengrass CLI 사용 권한을 부여합니다.  
권한을 부여할 그룹을 지정하지 않으면 Greengrass CLI를 관리자 또는 AWS IoT Greengrass 코어 소프트웨어를 실행하는 시스템 사용자로 사용할 수 있습니다.

1. 다음 명령을 실행하여 디바이스에 Greengrass CLI 구성 요소를 배포합니다.

   ```
   $ aws greengrassv2 create-deployment --cli-input-json file://path/to/deployment.json
   ```

설치 도중 구성 요소는 디바이스의 `/greengrass/v2/bin` 폴더에 있는 `greengrass-cli`에 심볼릭 링크를 추가하고 이 경로에서 Greengrass CLI를 실행합니다. 절대 경로 없이 Greengrass CLI를 실행하려면 `/greengrass/v2/bin` 폴더를 PATH 변수에 추가합니다. Greengrass CLI 설치를 확인하려면 다음 명령을 실행합니다.

------
#### [ Linux or Unix ]

```
/greengrass/v2/bin/greengrass-cli help
```

------
#### [ Windows ]

```
C:\greengrass\v2\bin\greengrass-cli help
```

------

다음 결과가 표시됩니다.

```
Usage: greengrass-cli [-hV] [--ggcRootPath=<ggcRootPath>] [COMMAND]
Greengrass command line interface

      --ggcRootPath=<ggcRootPath>
                  The AWS IoT Greengrass V2 root directory.
  -h, --help      Show this help message and exit.
  -V, --version   Print version information and exit.
Commands:
  help                Show help information for a command.
  component           Retrieve component information and stop or restart
                        components.
  deployment          Create local deployments and retrieve deployment status.
  logs                Analyze Greengrass logs.
  get-debug-password  Generate a password for use with the HTTP debug view
                        component.
```

`greengrass-cli`를 찾을 수 없는 경우 배포에서 Greengrass CLI를 설치하지 못했을 수 있습니다. 자세한 내용은 [문제 해결 AWS IoT Greengrass V2](troubleshooting.md) 단원을 참조하십시오.

# Greengrass CLI 명령
<a name="gg-cli-reference"></a>

Greengrass CLI는 AWS IoT Greengrass 코어 디바이스와 로컬로 상호 작용할 수 있는 명령줄 인터페이스를 제공합니다. Greengrass CLI 명령은 다음 형식을 사용합니다.

```
$ greengrass-cli <command> <subcommand> [arguments]
```

기본적으로 `/greengrass/v2/bin/` 폴더의 `greengrass-cli` 실행 파일은 `/greengrass/v2` 폴더에서 실행되는 AWS IoT Greengrass 코어 소프트웨어의 버전과 상호 작용합니다. 이 위치에 없는 실행 파일을 직접 호출하거나 다른 위치의 AWS IoT Greengrass 코어 소프트웨어와 상호 작용하려면 다음 방법 중 하나를 사용하여 상호 작용하려는 AWS IoT Greengrass 코어 소프트웨어의 루트 경로를 명시적으로 지정해야 합니다.<a name="greengrass-cli-set-root-path"></a>
+ `GGC_ROOT_PATH` 환경 변수를 `/greengrass/v2`로 설정합니다.
+ 다음 예제와 같이 명령에 `--ggcRootPath /greengrass/v2` 인수를 추가합니다.

  ```
  greengrass-cli --ggcRootPath /greengrass/v2 <command> <subcommand> [arguments]
  ```

모든 명령에서 다음 인수를 사용할 수 있습니다.
+ `--help`를 사용하면 특정 Greengrass CLI 명령에 관한 정보를 얻을 수 있습니다.
+ `--version`을 사용하면 Greengrass CLI 버전에 관한 정보를 얻을 수 있습니다.

이 섹션에서는 Greengrass CLI 명령을 설명하고 이러한 명령의 예제를 제공합니다. 각 명령의 개요에는 인수와 용도가 표시됩니다. 선택적 인수는 대괄호에 표시됩니다.

**Topics**
+ [구성 요소](gg-cli-component.md)
+ [배포](gg-cli-deployment.md)
+ [로그](gg-cli-logs.md)
+ [get-debug-password](gg-cli-get-debug-password.md)

# 구성 요소
<a name="gg-cli-component"></a>

`component` 명령을 사용하여 코어 디바이스의 로컬 구성 요소와 상호 작용합니다.

**하위 명령**
+ [details](#component-details)
+ [list](#component-list)
+ [재시작](#component-restart)
+ [중단](#component-stop)

## details
<a name="component-details"></a>

한 구성 요소의 버전, 상태 및 구성을 검색합니다.

**시놉시스**  

```
greengrass-cli component details --name <component-name> 
```

**인수**:  
`--name`, `-n`. 구성 요소 이름.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli component details --name MyComponent 

Component Name: MyComponent 
Version: 1.0.0
State: RUNNING
Configuration: null
```

## list
<a name="component-list"></a>

디바이스에 설치된 각 구성 요소의 이름, 버전, 상태 및 구성을 검색합니다.

**시놉시스**  

```
greengrass-cli component list
```

**인수**:  
없음

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli component list

Components currently running in Greengrass:
Component Name: FleetStatusService
Version: 0.0.0
State: RUNNING
Configuration: {"periodicUpdateIntervalSec":86400.0}
Component Name: UpdateSystemPolicyService
Version: 0.0.0
State: RUNNING
Configuration: null
Component Name: aws.greengrass.Nucleus
Version: 2.0.0
State: FINISHED
Configuration: {"awsRegion":"region","runWithDefault":{"posixUser":"ggc_user:ggc_group"},"telemetry":{}}
Component Name: DeploymentService
Version: 0.0.0
State: RUNNING
Configuration: null
Component Name: TelemetryAgent
Version: 0.0.0
State: RUNNING
Configuration: null
Component Name: aws.greengrass.Cli
Version: 2.0.0
State: RUNNING
Configuration: {"AuthorizedPosixGroups":"ggc_user"}
```

## 재시작
<a name="component-restart"></a>

구성 요소를 다시 시작합니다.

**시놉시스**  

```
greengrass-cli component restart --names <component-name>,...
```

**인수**:  
`--names`, `-n`. 구성 요소 이름. 하나 이상의 구성 요소 이름이 필요합니다. 추가 구성 요소 이름을 지정하고, 각 이름을 쉼표로 구분할 수 있습니다.

**출력**:  
없음

## 중단
<a name="component-stop"></a>

구성 요소 실행을 중지합니다.

**시놉시스**  

```
greengrass-cli component stop --names <component-name>,...
```

**인수**:  
`--names`, `-n`. 구성 요소 이름. 하나 이상의 구성 요소 이름이 필요합니다. 필요한 경우 추가 구성 요소 이름을 지정하고, 각 이름을 쉼표로 구분할 수 있습니다.

**출력**:  
없음

# 배포
<a name="gg-cli-deployment"></a>

`deployment` 명령을 사용하여 코어 디바이스의 로컬 구성 요소와 상호 작용합니다.

로컬 배포 진행 상황을 모니터링하려면 `status` 하위 명령을 사용합니다. 콘솔을 사용하여 로컬 배포의 진행 상황을 모니터링할 수는 없습니다.

**하위 명령**
+ [생성](#deployment-create)
+ [취소](#deployment-cancel)
+ [목록](#deployment-list)
+ [status](#deployment-status)

## 생성
<a name="deployment-create"></a>

지정된 구성 요소 레시피, 아티팩트 및 런타임 인수를 사용하여 로컬 배포를 생성하거나 업데이트합니다.

**시놉시스**  

```
greengrass-cli deployment create 
    --recipeDir path/to/component/recipe
    [--artifactDir path/to/artifact/folder ]
    [--update-config {component-configuration}]
    [--groupId <thing-group>]
    [--merge "<component-name>=<component-version>"]...
    [--runWith "<component-name>:posixUser=<user-name>[:<group-name>]"]...
    [--systemLimits "{component-system-resource-limits}]"]...
    [--remove <component-name>,...]
    [--failure-handling-policy <policy name[ROLLBACK, DO_NOTHING]>]
```

**인수**  
+ `--recipeDir`, `-r`. 구성 요소 레시피 파일이 포함된 폴더의 전체 경로.
+ `--artifactDir`, `-a`. 배포에 포함할 아티팩트 파일이 포함된 폴더의 전체 경로. 아티팩트 폴더에는 다음 디렉터리 구조가 포함되어야 합니다.

  ```
  /path/to/artifact/folder/<component-name>/<component-version>/<artifacts>
  ```
+ `--update-config`, `-c`. JSON 문자열 또는 JSON 파일로 제공되는 배포에 대한 구성 인수. JSON 문자열은 다음 형식이어야 합니다.

  ```
  { \
    "componentName": { \ 
      "MERGE": {"config-key": "config-value"}, \
      "RESET": ["path/to/reset/"] \
    } \
  }
  ```

  `MERGE` 및 `RESET`은 대/소문자를 구분하며 대문자여야 합니다.
+ `--groupId`, `-g`. 배포의 대상 사물 그룹.
+ `--merge`, `-m`. 추가 또는 업데이트하려는 대상 구성 요소의 이름과 버전. `<component>=<version>` 형식으로 구성 요소 정보를 제공해야 합니다. 각 추가 구성 요소에 대해 별도의 인수를 사용하여 지정합니다. 필요한 경우 `--runWith` 인수를 사용하여 구성 요소 실행에 대한 `posixUser`, `posixGroup` 및 `windowsUser` 정보를 제공합니다.
+ `--runWith`. 일반 또는 Lambda 구성 요소 실행에 대한 `posixUser`, `posixGroup` 및 `windowsUser` 정보. `<component>:{posixUser|windowsUser}=<user>[:<=posixGroup>]` 형식으로 이 정보를 제공해야 합니다. 예를 들어, **HelloWorld:posixUser=ggc\$1user:ggc\$1group** 또는 **HelloWorld:windowsUser=ggc\$1user**를 지정할 수 있습니다. 각 추가 옵션에 대해 별도의 인수를 사용하여 지정합니다.

  자세한 내용은 [구성 요소를 실행하는 사용자 구성](configure-greengrass-core-v2.md#configure-component-user) 단원을 참조하십시오.
+ `--systemLimits`. 코어 디바이스에서 일반 및 컨테이너화되지 않은 Lambda 구성 요소의 프로세스에 적용할 시스템 리소스 제한. 각 구성 요소의 프로세스에서 사용할 수 있는 최대 CPU 및 RAM 사용량을 구성할 수 있습니다. 직렬화된 JSON 객체 또는 JSON 파일의 파일 경로를 지정합니다. JSON 객체는 다음 형식이어야 합니다.

  ```
  {  \
    "componentName": { \ 
      "cpus": cpuTimeLimit, \
      "memory": memoryLimitInKb \
    } \
  }
  ```

  각 구성 요소에 대해 다음 시스템 리소스 제한을 구성할 수 있습니다.
  + `cpus` - <a name="system-resource-limits-cpu-definition-this"></a>이 구성 요소의 프로세스가 코어 디바이스에서 사용할 수 있는 최대 CPU 시간입니다. 코어 디바이스의 총 CPU 시간은 디바이스의 CPU 코어 수와 같습니다. 예를 들어 CPU 코어가 4개인 코어 디바이스에서 이 값을 `2`로 설정하여 이 구성 요소 프로세스를 각 CPU 코어의 50% 사용량으로 제한할 수 있습니다. CPU 코어가 1개인 디바이스에서 이 값을 `0.25`로 설정하여 이 구성 요소 프로세스를 CPU의 25% 사용량으로 제한할 수 있습니다. 이 값을 CPU 코어 수보다 큰 수로 설정하면 AWS IoT Greengrass 코어 소프트웨어가 구성 요소의 CPU 사용량을 제한하지 않습니다.
  + `memory` - <a name="system-resource-limits-memory-definition-this"></a>이 구성 요소의 프로세스가 코어 디바이스에서 사용할 수 있는 최대 RAM(KB 단위)입니다.

  자세한 내용은 [구성 요소에 대한 시스템 리소스 제한 구성](configure-greengrass-core-v2.md#configure-component-system-resource-limits) 단원을 참조하십시오.

  이 기능은 Linux 코어 디바이스의 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md) 및 Greengrass CLI의 v2.4.0 이상에서 사용할 수 있습니다. AWS IoT Greengrass 는 현재 Windows 코어 디바이스에서이 기능을 지원하지 않습니다.
+ `--remove`. 로컬 배포에서 제거하려는 대상 구성 요소의 이름. 구성 요소가 [제거 수명 주기](component-recipe-reference.md#uninstall-lifecycle-definition) 단계를 정의하는 경우 AWS IoT Greengrass 코어 소프트웨어는 구성 요소를 제거하기 전에 제거 스크립트를 실행합니다. 클라우드 배포에서 병합된 구성 요소를 제거하려면 다음 형식으로 대상 사물 그룹의 그룹 ID를 제공해야 합니다.

------
#### [ Greengrass nucleus v2.4.0 and later ]

  ```
  --remove <component-name> --groupId <group-name>
  ```

------
#### [ Earlier than v2.4.0 ]

  ```
  --remove <component-name> --groupId thinggroup/<group-name>
  ```

------
+ `--failure-handling-policy`. 배포가 실패할 때 실시하는 작업 정의. 두 가지 작업을 지정할 수 있습니다.
  + `ROLLBACK` – 
  + `DO_NOTHING` – 

  이 기능은 [Greengrass nucleus](greengrass-nucleus-component.md)의 v2.11.0 이상에서 사용할 수 있습니다.

**출력**  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli deployment create \
    --merge MyApp1=1.0.0 \
    --merge MyApp2=1.0.0 --runWith MyApp2:posixUser=ggc_user \
    --remove MyApp3 \
    --recipeDir recipes/ \ 
    --artifactDir artifacts/

Local deployment has been submitted! Deployment Id: 44d89f46-1a29-4044-ad89-5151213dfcbc
```

## 취소
<a name="deployment-cancel"></a>

지정된 배포를 취소합니다.

시놉시스  

```
greengrass-cli deployment cancel
    -i <deployment-id>
```

인수  
`-i`. 취소할 배포의 고유 식별자. 배포 ID는 `create` 명령의 출력에 반환됩니다.

출력  
+ 없음

## 목록
<a name="deployment-list"></a>

마지막 10개의 로컬 배포 상태를 검색합니다.

**시놉시스**  

```
greengrass-cli deployment list
```

**인수**  
없음

**출력**  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다. 배포 상태에 따라 출력에 `IN_PROGRESS`, `SUCCEEDED` 또는 `FAILED` 중 하나의 상태 값이 표시됩니다.  

```
$ sudo greengrass-cli deployment list

44d89f46-1a29-4044-ad89-5151213dfcbc: SUCCEEDED
Created on: 6/27/23 11:05 AM
```

## status
<a name="deployment-status"></a>

특정 배포의 상태를 검색합니다.

**시놉시스**  

```
greengrass-cli deployment status -i <deployment-id>
```

**인수**  
`-i`. 배포의 ID.

**출력**  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다. 배포 상태에 따라 출력에 `IN_PROGRESS`, `SUCCEEDED` 또는 `FAILED` 중 하나의 상태 값이 표시됩니다.  

```
$ sudo greengrass-cli deployment status -i 44d89f46-1a29-4044-ad89-5151213dfcbc

44d89f46-1a29-4044-ad89-5151213dfcbc: FAILED
Created on: 6/27/23 11:05 AM
Detailed Status: <Detailed deployment status>
Deployment Error Stack: List of error codes
Deployment Error Types: List of error types
Failure Cause: Cause
```

# 로그
<a name="gg-cli-logs"></a>

`logs` 명령을 사용하여 코어 디바이스의 Greengrass 로그를 분석합니다.

**하위 명령**
+ [get](#logs-get)
+ [list-keywords](#logs-list-keywords)
+ [list-log-files](#logs-list-log-files)

## get
<a name="logs-get"></a>

Greengrass 로그 파일을 수집, 필터링 및 시각화합니다. 이 명령은 JSON 형식의 로그 파일만 지원합니다. nucleus 구성에서 [로깅 형식](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-logging-format)을 지정할 수 있습니다.

**시놉시스**  

```
greengrass-cli logs get
    [--log-dir path/to/a/log/folder]
    [--log-file path/to/a/log/file]
    [--follow true | false ]
    [--filter <filter> ]
    [--time-window <start-time>,<end-time> ]
    [--verbose ]
    [--no-color ]
    [--before <value> ]
    [--after <value> ]
    [--syslog ]
    [--max-long-queue-size <value> ]
```

**인수**:  
+ `--log-dir`, `-ld`. 로그 파일을 확인할 디렉터리의 경로(예: **`/greengrass/v2`/logs**). `--syslog`와 함께 사용하지 않습니다. 각 추가 디렉터리에 대해 별도의 인수를 사용하여 지정합니다. `--log-dir` 또는 `--log-file` 중 하나 이상을 사용해야 합니다. 단일 명령에서 두 인수를 모두 사용할 수도 있습니다.
+ `--log-file`, `-lf`. 사용하려는 로그 디렉터리의 경로. 각 추가 디렉터리에 대해 별도의 인수를 사용하여 지정합니다. `--log-dir` 또는 `--log-file` 중 하나 이상을 사용해야 합니다. 단일 명령에서 두 인수를 모두 사용할 수도 있습니다.
+ `--follow`, `-fol`. 발생하는 로그 업데이트 표시. Greengrass CLI는 계속 실행되고 지정된 로그에서 읽습니다. 시간대를 지정하면 모든 시간대가 종료된 후 Greengrass CLI가 로그 모니터링을 중지합니다.
+ `--filter`, `-f`. 필터로 사용할 키워드, 정규식 또는 키-값 페어. 이 값을 문자열, 정규식 또는 키-값 페어로 제공하세요. 각 추가 필터에 대해 별도의 인수를 사용하여 지정합니다.

  평가 시 단일 인수에 지정된 여러 필터가 OR 연산자로 분리되고, 추가 인수에 지정된 필터가 AND 연산자와 결합됩니다. 예를 들어 명령에 `--filter "installed" --filter "name=alpha,name=beta"`가 포함된 경우 Greengrass CLI는 키워드 `installed`와 값이 `alpha` 또는 `beta`인 `name` 키가 모두 포함된 로그 메시지를 필터링하고 표시합니다.
+ `--time-window`, `-t`. 로그 정보를 표시할 시간대. 정확한 타임스탬프와 상대 오프셋을 모두 사용할 수 있습니다. `<begin-time>,<end-time>` 형식으로 이 정보를 제공해야 합니다. 시작 시간 또는 종료 시간을 지정하지 않으면 해당 옵션의 값은 현재 시스템 날짜 및 시간으로 기본 설정됩니다. 각 추가 시간대에 대해 별도의 인수를 사용하여 지정합니다.

  Greengrass CLI는 타임스탬프에 대해 다음 형식을 지원합니다.
  + `yyyy-MM-DD`(예: `2020-06-30`). 이 형식을 사용할 때 시간은 기본적으로 00:00:00으로 설정됩니다.

    `yyyyMMDD`(예: `20200630`). 이 형식을 사용할 때 시간은 기본적으로 00:00:00으로 설정됩니다.

    `HH:mm:ss`(예: `15:30:45`). 이 형식을 사용할 때 날짜는 기본적으로 현재 시스템의 날짜로 설정됩니다.

    `HH:mm:ssSSS`(예: `15:30:45`). 이 형식을 사용할 때 날짜는 기본적으로 현재 시스템의 날짜로 설정됩니다.

    `YYYY-MM-DD'T'HH:mm:ss'Z'`(예: `2020-06-30T15:30:45Z`).

    `YYYY-MM-DD'T'HH:mm:ss`(예: `2020-06-30T15:30:45`).

    `yyyy-MM-dd'T'HH:mm:ss.SSS`(예: `2020-06-30T15:30:45.250`).

  상대 오프셋은 현재 시스템 시간에서 시간 오프셋을 지정합니다. Greengrass CLI는 상대 오프셋에 대해 `+|-[<value>h|hr|hours][valuem|min|minutes][value]s|sec|seconds` 형식을 지원합니다.

  예를 들어 현재 시간에서 1시간\$12시간 15분 사이 전의 시간대를 지정하는 인수는 `--time-window -2h15min,-1hr`입니다.
+ `--verbose`. 로그 메시지의 모든 필드 표시. `--syslog`와 함께 사용하지 않습니다.
+ `--no-color`, `-nc`. 색상 코딩 제거. 로그 메시지의 기본 색상 코딩은 굵은 빨간색 텍스트 사용입니다. ANSI 이스케이프 시퀀스를 사용하기 때문에 UNIX 계열 터미널만 지원합니다.
+ `--before`, `-b`. 일치하는 로그 항목 앞에 표시할 줄 수. 기본값은 0.
+ `--after`, `-a`. 일치하는 로그 항목 뒤에 표시할 줄 수. 기본값은 0.
+ `--syslog`. RFC3164에서 정의한 syslog 프로토콜을 사용하여 모든 로그 파일 처리. `--log-dir` 및 `--verbose`와 함께 사용하지 않습니다. syslog 프로토콜에서 사용하는 형식: `"<$Priority>$Timestamp $Host $Logger ($Class): $Message"`. 로그 파일을 지정하지 않으면 Greengrass CLI는 `/var/log/messages`, `/var/log/syslog` 또는 `/var/log/system.log` 위치에서 로그 메시지를 읽습니다.

  AWS IoT Greengrass는 현재 Windows 코어 디바이스에서 이 기능을 지원하지 않습니다.
+ `--max-log-queue-size`, `-m`. 메모리에 할당할 최대 로그 항목 수. 이 옵션을 사용하여 메모리 사용량을 최적화합니다. 기본값은 100입니다.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli logs get --verbose \
    --log-file /greengrass/v2/logs/greengrass.log \
    --filter deployment,serviceName=DeploymentService \
    --filter level=INFO \
    --time-window 2020-12-08T01:11:17,2020-12-08T01:11:22

2020-12-08T01:11:17.615Z [INFO] (pool-2-thread-14) com.aws.greengrass.deployment.DeploymentService: Current deployment finished. {DeploymentId=44d89f46-1a29-4044-ad89-5151213dfcbc, serviceName=DeploymentService, currentState=RUNNING}
2020-12-08T01:11:17.675Z [INFO] (pool-2-thread-14) com.aws.greengrass.deployment.IotJobsHelper: Updating status of persisted deployment. {Status=SUCCEEDED, StatusDetails={detailed-deployment-status=SUCCESSFUL}, ThingName=MyThing, JobId=22d89f46-1a29-4044-ad89-5151213dfcbc
```

## list-keywords
<a name="logs-list-keywords"></a>

로그 파일을 필터링하는 데 사용할 수 있는 키워드 제안을 표시합니다.

**시놉시스**  

```
greengrass-cli logs list-keywords [arguments]
```

**인수**:  
없음

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli logs list-keywords

Here is a list of suggested keywords for Greengrass log:
level=$str
thread=$str
loggerName=$str
eventType=$str
serviceName=$str
error=$str
```

```
$ sudo greengrass-cli logs list-keywords --syslog

Here is a list of suggested keywords for syslog:
priority=$int
host=$str
logger=$str
class=$str
```

## list-log-files
<a name="logs-list-log-files"></a>

지정된 디렉터리에 있는 로그 파일을 표시합니다.

**시놉시스**  

```
greengrass-cli logs list-log-files [arguments]
```

**인수**:  
`--log-dir`, `-ld`. 로그 파일을 확인할 디렉터리의 경로.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli logs list-log-files -ld /greengrass/v2/logs/

/greengrass/v2/logs/aws.greengrass.Nucleus.log
/greengrass/v2/logs/main.log
/greengrass/v2/logs/greengrass.log
Total 3 files found.
```

# get-debug-password
<a name="gg-cli-get-debug-password"></a>

`get-debug-password` 명령을 사용하여 [로컬 디버그 콘솔 구성 요소](local-debug-console-component.md)(`aws.greengrass.LocalDebugConsole`)에 대해 무작위로 생성된 암호를 인쇄합니다. 암호는 생성되고 8시간 후에 만료됩니다.

**시놉시스**  

```
greengrass-cli get-debug-password
```

**인수**:  
없음

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli get-debug-password

Username: debug
Password: bEDp3MOHdj8ou2w5de_sCBI2XAaguy3a8XxREXAMPLE
Password expires at: 2021-04-01T17:01:43.921999931-07:00
The local debug console is configured to use TLS security. The certificate is self-signed so you will need to bypass your web browser's security warnings to open the console.
Before you bypass the security warning, verify that the certificate fingerprint matches the following fingerprints.
SHA-256: 15 0B 2C E2 54 8B 22 DE 08 46 54 8A B1 2B 25 DE FB 02 7D 01 4E 4A 56 67 96 DA A6 CC B1 D2 C4 1B
SHA-1: BC 3E 16 04 D3 80 70 DA E0 47 25 F9 90 FA D6 02 80 3E B5 C1
```

# AWS IoT Greengrass 테스트 프레임워크 사용
<a name="gg-testing-framework"></a>

GTF(Greengrass Testing Framework)는 고객의 관점에서 종단 간 자동화를 지원하는 구성 요소 컬렉션입니다. GTF는 [Cucumber](https://cucumber.io)를 기능 드라이버로 사용합니다.는 동일한 구성 요소를 AWS IoT Greengrass 사용하여 다양한 디바이스에서 소프트웨어 변경 사항을 검증합니다. 자세한 내용은 [Greengrass Testing Framework on Github](https://github.com/aws-greengrass/aws-greengrass-testing/tree/dev_v1)를 참조하세요.

GTF는 구성 요소의 BDD(동작 중심 개발)를 장려하기 위해 자동 테스트를 실행하는 데 사용되는 도구인 Cucumber를 사용하여 구현됩니다. Cucumber에서 이 시스템의 기능은 `feature`라는 특수 유형의 파일에 요약되어 있습니다. 각 기능은 사람이 읽을 수 있는 형식인 시나리오로 설명되고, 이는 자동 테스트로 변환할 수 있는 사양입니다. 각 시나리오는 Gherkin이라는 도메인별 언어를 사용하여 테스트 중인 이 시스템의 상호 작용 및 결과를 정의하는 일련의 단계로 설명됩니다. [Gherkin 단계](https://cucumber.io/docs/gherkin/reference/#steps)는 사양을 테스트 흐름에 하드 와이어링하는 단계 정의라는 메서드를 사용하여 프로그래밍 코드에 연결됩니다. GTF의 단계 정의는 Java로 구현됩니다.

**Topics**
+ [작동 방식](#gg-testing-framework-how-gtf-works)
+ [Changelog](#gtf-changelog)
+ [Greengrass Testing Framework 구성 옵션](configuration-options-gtf.md)
+ [자습서: Greengrass 테스트 프레임워크 및 Greengrass 개발 키트를 사용하여 엔드 투 엔드 테스트 실행](run-e2e-tests-tutorial.md)
+ [자습서: 신뢰도 테스트 제품군의 신뢰도 테스트 사용](confidence-tests-tutorial.md)

## 작동 방식
<a name="gg-testing-framework-how-gtf-works"></a>

AWS IoT Greengrass 는 GTF를 여러 Java 모듈로 구성된 독립 실행형 JAR로 배포합니다. 구성 요소의 종단 간 테스트에 GTF를 사용하려면 Java 프로젝트 내에서 테스트를 구현해야 합니다. Java 프로젝트에서 테스트용 JAR을 종속성으로 추가하면 GTF의 기존 기능을 사용하고 자체 사용자 지정 테스트 사례를 작성하면서 기능을 확장할 수 있습니다. 사용자 지정 테스트 사례를 실행하려면 Java 프로젝트를 빌드하고 [Greengrass Testing Framework 구성 옵션](configuration-options-gtf.md)에서 설명하는 구성 옵션을 사용하여 대상 JAR을 실행할 수 있습니다.

### GTF 독립형 JAR
<a name="w2ab1c24c19c25c11b5"></a>

Greengrass는 Cloudfront를 [Maven](https://maven.apache.org/) 리포지토리로 사용하여 다양한 버전의 GTF 독립형 JAR을 호스팅합니다. GTF 버전의 전체 목록은 [GTF 릴리스](https://github.com/aws-greengrass/aws-greengrass-testing/releases)를 참조하세요.

GTF 독립형 JAR에는 다음 모듈이 포함됩니다. 단, 이 모듈에만 국한되지 않습니다. 프로젝트에서 이러한 각 종속성을 개별적으로 선택하거나 [테스트 독립형 JAR 파일](https://github.com/aws-greengrass/aws-greengrass-testing/tree/dev_v1/aws-greengrass-testing-standalone)에 모두 포함할 수 있습니다.
+ `aws-greengrass-testing-resources`:이 모듈은 테스트 과정에서 AWS 리소스의 수명 주기를 관리하기 위한 추상화를 제공합니다. GTF가 해당 AWS 리소스의 생성 및 제거를 처리할 수 있도록 추`ResourceSpec`상화를 사용하여 사용자 지정 리소스를 정의하는 데 사용할 수 있습니다.
+ `aws-greengrass-testing-platform`: 이 모듈은 테스트 수명 주기 동안 테스트 중인 디바이스에 대한 플랫폼 수준 추상화를 제공합니다. 여기에는 플랫폼과 무관하게 OS와 상호 작용하는 데 사용되는 API가 포함되어 있으며 디바이스 쉘에서 실행되는 명령을 시뮬레이션하는 데 사용할 수 있습니다.
+ `aws-greengrass-testing-components`: 이 모듈은 배포, IPC 및 기타 기능과 같은 Greengrass 핵심 기능을 테스트하는 데 사용되는 샘플 구성 요소로 구성됩니다.
+ `aws-greengrass-testing-features`: 이 모듈은 재사용 가능한 일반 단계와 Greengrass 환경 내에서 테스트하는 데 사용되는 정의로 구성됩니다.

**Topics**
+ [작동 방식](#gg-testing-framework-how-gtf-works)
+ [Changelog](#gtf-changelog)
+ [Greengrass Testing Framework 구성 옵션](configuration-options-gtf.md)
+ [자습서: Greengrass 테스트 프레임워크 및 Greengrass 개발 키트를 사용하여 엔드 투 엔드 테스트 실행](run-e2e-tests-tutorial.md)
+ [자습서: 신뢰도 테스트 제품군의 신뢰도 테스트 사용](confidence-tests-tutorial.md)

## Changelog
<a name="gtf-changelog"></a>

다음 표에서는 GTF의 각 릴리스에서 변경된 중요 사항에 대해 설명합니다. 자세한 내용은 GitHub의 [GTF Releases 페이지](https://github.com/aws-greengrass/aws-greengrass-testing/releases)를 참조하세요.


|  **버전**  |  **변경 사항**  | 
| --- | --- | 
| 1.2.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/gg-testing-framework.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/gg-testing-framework.html)  | 
|  1.1.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/gg-testing-framework.html)  | 
|  1.0.0  |  초기 버전입니다.  | 

# Greengrass Testing Framework 구성 옵션
<a name="configuration-options-gtf"></a>

## JEG 구성 옵션
<a name="configuration-options-gtf-options"></a>

Greengrass Testing Framework(GTF)를 사용하면 엔드 투 엔드 테스트 프로세스를 시작하는 동안 특정 파라미터를 구성하여 테스트 흐름을 오케스트레이션할 수 있습니다. 이러한 구성 옵션을 GTF 독립 실행형 JAR에 대한 CLI 인수로 지정할 수 있습니다.

<a name="gtf_options"></a>GTF 버전 1.1.0 이상에서는 다음 구성 옵션이 제공됩니다.
+ `additional-plugins` – (선택 사항) 추가 Cucumber 플러그인
+ `aws-region` - AWS 서비스에 대한 특정 리전 엔드포인트를 대상으로 합니다. 기본값은 AWS SDK에서 검색되는 내용입니다.
+ `credentials-path` - 선택적 AWS 프로필 자격 증명 경로입니다. 기본값은 호스트 환경에서 검색된 자격 증명입니다.
+ `credentials-path-rotation` - AWS 자격 증명의 선택적 교체 기간입니다. 기본값은 15분 또는 `PT15M`입니다.
+ `csr-path` - CSR에서 사용되어 디바이스 인증서가 생성되는 경로입니다.
+ `device-mode` - 테스트 중인 대상 디바이스입니다. 기본값은 로컬 디바이스입니다.
+ `env-stage` – Greengrass의 배포 환경을 대상으로 합니다. 기본값은 프로덕션입니다.
+ `existing-device-cert-arn` - Greengrass의 디바이스 인증서로 사용하려는 기존 인증서의 arn입니다.
+ `feature-path` – 추가 특성 파일이 포함된 파일 또는 디렉터리입니다. 기본적으로 추가 특성 파일은 사용되지 않습니다.
+ `gg-cli-version` – Greengrass CLI의 버전을 재정의합니다. 기본값은 `ggc.version`에 있는 값입니다.
+ `gg-component-bucket` - Greengrass 구성 요소가 보관되는 기존 Amazon S3 버킷의 이름입니다.
+ `gg-component-overrides` – Greengrass 구성 요소 재정의 목록입니다.
+ `gg-persist` - 테스트 실행 후 유지할 테스트 요소 목록입니다. 기본 동작은 아무것도 유지하지 않는 것입니다. 허용되는 값은 `aws.resources`, `installed.software` 및 `generated.files`입니다.
+ `gg-runtime` - 테스트가 테스트 리소스와 상호 작용하는 방식에 영향을 미치는 값의 목록입니다. 이러한 값은 `gg.persist` 파라미터를 대체합니다. 기본값이 비어 있는 경우 설치된 Greengrass 런타임을 포함하여 모든 테스트 리소스가 테스트 사례로 관리된다고 가정합니다. 허용되는 값은 `aws.resources`, `installed.software` 및 `generated.files`입니다.
+ `ggc-archive` – 보관된 Greengrass nucleus 구성 요소의 경로입니다.
+ `ggc-install-root` – Greengrass nucleus 구성 요소를 설치하는 디렉터리입니다. 기본값은 test.temp.path 및 테스트 실행 폴더입니다.
+ `ggc-log-level` – 테스트 실행에 대한 Greengrass nucleus 로그 수준을 설정합니다. 기본값은 ‘INFO’입니다.
+ `ggc-tes-rolename` – AWS IoT Greengrass 코어가 AWS 서비스에 액세스하기 위해 맡을 IAM 역할입니다. 지정된 이름의 역할이 없는 경우 역할이 생성되고 기본 액세스 정책이 생성됩니다.
+ `ggc-trusted-plugins` – Greengrass에 추가되어야 하는 신뢰할 수 있는 플러그인의 경로(호스트)를 쉼표로 구분한 목록입니다. DUT 자체의 경로를 제공하려면 경로에 'dut:' 접두사를 붙입니다.
+ `ggc-user-name` – Greengrass nucleus의 user:group posixUser 값입니다. 기본값은 로그인한 현재 사용자 이름입니다.
+ `ggc-version` - 실행 중인 Greengrass nucleus 구성 요소의 버전을 재정의합니다. 기본값은 ggc.archive에 있는 값입니다.
+ `log-level` – 테스트 실행의 로그 수준입니다. 기본값은 ‘INFO’입니다.
+ `parallel-config` - 배치 인덱스 및 배치 수 세트입니다(JSON 문자열). 배치 인덱스의 기본값은 0이고 배치 수는 1입니다.
+ `proxy-url` - 이 URL을 통해 트래픽을 라우팅하도록 모든 테스트를 구성합니다.
+ `tags` – 특성 태그만 실행합니다. '&' 문자와 교차할 수 있습니다.
+ `test-id-prefix` - AWS 리소스 이름 및 태그를 포함하여 모든 테스트별 리소스에 적용되는 일반 접두사입니다. 기본값은 ‘gg’ 접두사입니다.
+ `test-log-path` - 전체 테스트 실행의 결과를 포함하는 디렉터리입니다. 기본값은 ‘testResults’입니다.
+ `test-results-json` - 결과로 나오는 Cucumber JSON 보고서가 디스크에 기록되는지 여부를 결정하는 플래그입니다. 기본값은 true입니다.
+ `test-results-log` - 콘솔 출력이 디스크에 기록되는지 여부를 결정하는 플래그입니다. 기본값은 false입니다.
+ `test-results-xml` - 결과로 나오는 JUnit XML 보고서가 디스크에 기록되는지 여부를 결정하는 플래그입니다. 기본값은 true입니다.
+ `test-temp-path` - 로컬 테스트 아티팩트를 생성하는 디렉터리입니다. 기본적으로 gg 테스트 접두사가 붙은 무작위 임시 디렉터리로 설정됩니다.
+ `timeout-multiplier` - 모든 테스트 제한 시간에 제공되는 승수입니다. 기본값은 1.0.

# 자습서: Greengrass 테스트 프레임워크 및 Greengrass 개발 키트를 사용하여 엔드 투 엔드 테스트 실행
<a name="run-e2e-tests-tutorial"></a>

AWS IoT Greengrass 테스트 프레임워크(GTF) 및 Greengrass 개발 키트(GDK)는 개발자에게 end-to-end 테스트를 실행할 수 있는 방법을 제공합니다. 이 자습서를 완료하여 구성 요소로 GDK 프로젝트를 초기화하고, 엔드 투 엔드 테스트 모듈로 GDK 프로젝트를 초기화하고, 사용자 지정 테스트 사례를 빌드할 수 있습니다. 사용자 지정 테스트 사례를 빌드하면 테스트를 실행할 수 있습니다.

이 자습서에서는 다음을 수행합니다.

1. 구성 요소로 GDK 프로젝트를 초기화합니다.

1. 엔드 투 엔드 테스트 모듈로 GDK 프로젝트를 초기화합니다.

1. 사용자 지정 테스트 사례를 빌드합니다.

1. 새 테스트 사례에 태그를 추가합니다.

1. 테스트 JAR을 빌드합니다.

1.  테스트를 실행합니다.

**Topics**
+ [사전 조건](#run-e2e-tests-tutorial-prerequisites)
+ [1단계: 구성 요소로 GDK 프로젝트 초기화](#init-gdk-with-component)
+ [2단계: 엔드 투 엔드 테스트 모듈로 GDK 프로젝트 초기화](#init-gdk-with-e2e-test)
+ [3단계: 사용자 지정 테스트 사례 빌드](#run-e2e-tests-tutorial-instructions)
+ [4단계: 새 테스트 사례에 태그 추가](#add-tag-to-test-case)
+ [5단계: 테스트 JAR 빌드](#build-test-jar)
+ [6단계: 테스트 실행](#run-test-gtf)
+ [예: 사용자 지정 테스트 사례 빌드](#build-test-case-example)

## 사전 조건
<a name="run-e2e-tests-tutorial-prerequisites"></a>

이 자습서를 완료하려면 다음이 필요합니다.
+ GDK 버전 1.3.0 이상
+ Java
+ Maven
+ Git

## 1단계: 구성 요소로 GDK 프로젝트 초기화
<a name="init-gdk-with-component"></a>
+ GDK 프로젝트로 빈 폴더를 초기화합니다. 다음 명령을 실행하여 Python에서 구현된 `HelloWorld` 구성 요소를 다운로드합니다.

  ```
  gdk component init -t HelloWorld -l python -n HelloWorld
  ```

  이 명령은 현재 디렉터리에 `HelloWorld`라는 이름의 디렉터리를 생성합니다.

## 2단계: 엔드 투 엔드 테스트 모듈로 GDK 프로젝트 초기화
<a name="init-gdk-with-e2e-test"></a>
+ GDK를 사용하면 기능 및 단계 구현으로 구성된 테스트 모듈 템플릿을 다운로드할 수 있습니다. 다음 명령을 실행하여 `HelloWorld` 디렉터리를 열고 테스트 모듈을 사용하여 기존 GDK 프로젝트를 초기화합니다.

  ```
  cd HelloWorld
  gdk test-e2e init
  ```

  이 명령은 `HelloWorld` 디렉터리 내에 `gg-e2e-tests`라는 이름의 디렉터리를 생성합니다. 이 테스트 디렉터리는 Greengrass 테스트 독립 실행형 JAR에 종속된 [Maven](https://maven.apache.org/) 프로젝트입니다.

## 3단계: 사용자 지정 테스트 사례 빌드
<a name="run-e2e-tests-tutorial-instructions"></a>

사용자 지정 테스트 사례 작성은 크게 테스트 시나리오가 포함된 기능 파일을 생성하고 단계 정의를 구현하는 두 단계로 구성됩니다. 사용자 지정 테스트 사례를 빌드하는 예제는 [예: 사용자 지정 테스트 사례 빌드](#build-test-case-example) 섹션을 참조하세요. 다음 단계에 따라 사용자 지정 테스트 사례를 빌드합니다.

1. 테스트 시나리오를 사용하여 기능 파일 생성

   기능은 일반적으로 테스트 중인 소프트웨어의 특정 기능을 설명합니다. Cucumber에서 각 기능은 제목, 자세한 설명, 시나리오라고 하는 특정 사례의 하나 이상의 예제를 포함하는 개별 기능 파일로 지정됩니다. 각 시나리오는 제목, 자세한 설명, 상호 작용, 예상 결과를 정의하는 일련의 단계로 구성됩니다. 시나리오는 “given”, “when”, “then” 키워드를 사용하여 구조화된 형식으로 작성됩니다.

1. 단계 정의 구현

   단계 정의는 일반적인 언어로 작성된 [Gherkin 단계](https://cucumber.io/docs/gherkin/reference/#steps)를 프로그래밍 코드에 연결합니다. Cucumber가 시나리오에서 Gherkin 단계를 식별하면 실행할 일치하는 단계 정의를 찾습니다.

## 4단계: 새 테스트 사례에 태그 추가
<a name="add-tag-to-test-case"></a>
+ 기능 및 시나리오에 태그를 할당하여 테스트 프로세스를 구성할 수 있습니다. 태그를 사용하여 시나리오의 하위 세트를 분류하며 실행할 후크를 조건부로 선택할 수도 있습니다. 특성과 시나리오에는 공백으로 구분된 여러 태그가 있을 수 있습니다.

  이 예제에서는 `HelloWorld` 구성 요소를 사용합니다.

  기능 파일에서 `@Sample` 태그 옆에 `@HelloWorld`라는 이름의 새 태그를 추가합니다.

  ```
  @Sample @HelloWorld
  Scenario: As a developer, I can create a component and deploy it on my device
  ....
  ```

## 5단계: 테스트 JAR 빌드
<a name="build-test-jar"></a>

1. 구성 요소를 빌드합니다. 테스트 모듈을 빌드하기 전에 구성 요소를 빌드해야 합니다.

   ```
   gdk component build
   ```

1. 다음 명령을 사용하여 테스트 모듈을 빌드합니다. 이 명령은 `greengrass-build` 폴더에 테스트 JAR을 빌드합니다.

   ```
   gdk test-e2e build
   ```

## 6단계: 테스트 실행
<a name="run-test-gtf"></a>

사용자 지정 테스트 사례를 실행하면 GTF는 테스트 중에 생성된 리소스를 관리하면서 테스트 수명 주기를 자동화합니다. 먼저 테스트 대상 디바이스(DUT)를 AWS IoT 사물로 프로비저닝하고 Greengrass 코어 소프트웨어를 설치합니다. 그러면 해당 경로에 지정된 레시피를 사용하여 `HelloWorld`라는 새 구성 요소가 생성됩니다. 그런 다음에 `HelloWorld` 구성 요소가 Greengrass 사물 배포를 통해 코어 디바이스에 배포됩니다. 그러면 배포되었는지 확인됩니다. 배포되면 3분 이내에 배포 상태가 `COMPLETED`로 변경됩니다.

1. 프로젝트 디렉터리의 `gdk-config.json` 파일로 이동하여 `HelloWorld` 태그로 테스트를 대상으로 지정합니다. 다음 명령을 사용하여 `test-e2e` 키를 업데이트합니다.

   ```
     "test-e2e":{
       "gtf_options" : { 
            "tags":"HelloWorld"
        }
     }
   ```

1. 테스트를 실행하기 전에 호스트 디바이스에 AWS 자격 증명을 제공해야 합니다. GTF는 이러한 자격 증명을 사용하여 테스트 프로세스 중에 AWS 리소스를 관리합니다. 테스트에 포함된 필수 작업을 자동화할 수 있는 권한이 제공한 역할에 있는지 확인합니다.

   다음 명령을 실행하여 AWS 자격 증명을 제공합니다.

   1. 

------
#### [ Linux or Unix ]

     ```
     export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
     export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
     ```

------
#### [ Windows Command Prompt (CMD) ]

     ```
     set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
     set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
     ```

------
#### [ PowerShell ]

     ```
     $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
     $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
     ```

------

1. 다음 명령을 사용하여 테스트를 실행합니다.

   ```
   gdk test-e2e run
   ```

   이 명령은 `greengrass-build` 폴더에 최신 버전의 Greengrass nucleus를 다운로드하고 이를 사용하여 테스트를 실행합니다. 또한 이 명령에서는 `HelloWorld` 태그가 있는 시나리오만 대상이 되고 해당 시나리오에 대한 보고서가 생성됩니다. 이 테스트 중에 생성된 AWS 리소스는 테스트가 끝날 때 삭제됩니다.

## 예: 사용자 지정 테스트 사례 빌드
<a name="build-test-case-example"></a>

**Example**  
GDK 프로젝트에서 다운로드한 테스트 모듈은 샘플 기능과 단계 구현 파일로 구성되어 있습니다.  
다음 예제에서는 Greengrass 소프트웨어의 사물 배포 기능을 테스트하기 위한 기능 파일을 생성합니다. Greengrass AWS 클라우드를 통해 구성 요소를 배포하는 시나리오를 사용하여 이 특성의 기능을 부분적으로 테스트합니다. 이는 해당 사용 사례의 상호 작용과 예상 결과를 이해하는 데 도움이 되는 일련의 단계입니다.  <a name="build-test-case-example-steps"></a>

1. 

**기능 파일 생성**

   현재 디렉터리의 `gg-e2e-tests/src/main/resources/greengrass/features` 폴더로 이동합니다. 다음 예제처럼 보이는 `component.feature` 샘플을 찾을 수 있습니다.

   이 기능 파일에서 Greengrass 소프트웨어의 사물 배포 기능을 테스트할 수 있습니다. Greengrass 클라우드를 통해 구성 요소를 배포하는 시나리오를 사용하여 이 특성의 기능을 부분적으로 테스트할 수 있습니다. 시나리오는 이 사용 사례의 상호 작용과 예상 결과를 이해하는 데 도움이 되는 일련의 단계입니다.

   ```
   Feature: Testing features of Greengrassv2 component
   
   Background:
       Given my device is registered as a Thing
       And my device is running Greengrass
   
   @Sample
   Scenario: As a developer, I can create a component and deploy it on my device
       When I create a Greengrass deployment with components
           HelloWorld | /path/to/recipe/file
       And I deploy the Greengrass deployment configuration
       Then the Greengrass deployment is COMPLETED on the device after 180 seconds
       And I call my custom step
   ```

   GTF에는 `And I call my custom step`이라는 단계를 제외하고 다음 모든 단계의 단계 정의가 포함되어 있습니다.

1. 

**단계 정의 구현**

   GTF 독립 실행형 JAR에는 `And I call my custom step`이라는 한 단계를 제외하고 모든 단계의 단계 정의가 포함되어 있습니다. 이 단계는 테스트 모듈에서 구현할 수 있습니다.

   테스트 파일의 소스 코드로 이동합니다. 다음 명령으로 단계 정의를 사용하여 사용자 지정 단계를 연결할 수 있습니다.

   ```
   @And("I call my custom step")
   public void customStep() {
       System.out.println("My custom step was called ");
   }
   ```

# 자습서: 신뢰도 테스트 제품군의 신뢰도 테스트 사용
<a name="confidence-tests-tutorial"></a>

AWS IoT Greengrass 테스트 프레임워크(GTF) 및 Greengrass 개발 키트(GDK)는 개발자에게 end-to-end 테스트를 실행할 수 있는 방법을 제공합니다. 이 자습서를 완료하면 구성 요소로 GDK 프로젝트를 초기화하고, 엔드 투 엔드 테스트 모듈로 GDK 프로젝트를 초기화하고, 신뢰도 테스트 제품군의 신뢰도 테스트를 사용할 수 있습니다. 사용자 지정 테스트 사례를 빌드하면 테스트를 실행할 수 있습니다.

신뢰도 테스트는 기본 구성 요소 동작이 검증되는 Greengrass에서 제공되는 일반 테스트입니다. 이러한 테스트는 더 구체적인 구성 요소 요구 사항에 알맞게 수정하거나 확장할 수 있습니다.

이 자습서에서는 HelloWorld 구성 요소를 사용하겠습니다. 다른 구성 요소를 사용한다면 해당 구성 요소로 HelloWorld 구성 요소를 바꿉니다.

이 자습서에서는 다음을 수행합니다.

1. 구성 요소로 GDK 프로젝트를 초기화합니다.

1. 엔드 투 엔드 테스트 모듈로 GDK 프로젝트를 초기화합니다.

1. 신뢰도 테스트 제품군의 테스트를 사용합니다.

1. 새 테스트 사례에 태그를 추가합니다.

1. 테스트 JAR을 빌드합니다.

1.  테스트를 실행합니다.

**Topics**
+ [사전 조건](#confidence-tests-tutorial-prerequisites)
+ [1단계: 구성 요소로 GDK 프로젝트 초기화](#init-gdk-with-component)
+ [2단계: 엔드 투 엔드 테스트 모듈로 GDK 프로젝트 초기화](#init-gdk-with-e2e-test)
+ [3단계: 신뢰도 테스트 제품군의 테스트를 사용합니다.](#confidence-tests-tutorial-instructions)
+ [4단계: 새 테스트 사례에 태그 추가](#add-tag-to-test-case)
+ [5단계: 테스트 JAR 빌드](#build-test-jar)
+ [6단계: 테스트 실행](#run-test-gtf)
+ [예제: 신뢰도 테스트 사용](#build-confidence-test-case-example)

## 사전 조건
<a name="confidence-tests-tutorial-prerequisites"></a>

이 자습서를 완료하려면 다음이 필요합니다.
+ GDK 버전 1.6.0 이상
+ Java
+ Maven
+ Git

## 1단계: 구성 요소로 GDK 프로젝트 초기화
<a name="init-gdk-with-component"></a>
+ GDK 프로젝트로 빈 폴더를 초기화합니다. 다음 명령을 실행하여 Python에서 구현된 `HelloWorld` 구성 요소를 다운로드합니다.

  ```
  gdk component init -t HelloWorld -l python -n HelloWorld
  ```

  이 명령은 현재 디렉터리에 `HelloWorld`라는 이름의 디렉터리를 생성합니다.

## 2단계: 엔드 투 엔드 테스트 모듈로 GDK 프로젝트 초기화
<a name="init-gdk-with-e2e-test"></a>
+ GDK를 사용하면 기능 및 단계 구현으로 구성된 테스트 모듈 템플릿을 다운로드할 수 있습니다. 다음 명령을 실행하여 `HelloWorld` 디렉터리를 열고 테스트 모듈을 사용하여 기존 GDK 프로젝트를 초기화합니다.

  ```
  cd HelloWorld
  gdk test-e2e init
  ```

  이 명령은 `HelloWorld` 디렉터리 내에 `gg-e2e-tests`라는 이름의 디렉터리를 생성합니다. 이 테스트 디렉터리는 Greengrass 테스트 독립 실행형 JAR에 종속된 [Maven](https://maven.apache.org/) 프로젝트입니다.

## 3단계: 신뢰도 테스트 제품군의 테스트를 사용합니다.
<a name="confidence-tests-tutorial-instructions"></a>

신뢰도 테스트 사례 작성은 제공된 특성 파일 사용과 시나리오 수정(필요한 경우)으로 구성됩니다. 이러한 신뢰도 테스트 사용 예제는 [예: 사용자 지정 테스트 사례 빌드](run-e2e-tests-tutorial.md#build-test-case-example) 섹션을 참조하세요. 다음 단계를 사용하여 신뢰도 테스트를 사용합니다.
+ 제공된 특성 파일을 사용합니다.

  현재 디렉터리에서 `gg-e2e-tests/src/main/resources/greengrass/features` 폴더로 이동합니다. 신뢰도 테스트를 사용할 샘플 `confidenceTest.feature` 파일을 엽니다.

## 4단계: 새 테스트 사례에 태그 추가
<a name="add-tag-to-test-case"></a>
+ 기능 및 시나리오에 태그를 할당하여 테스트 프로세스를 구성할 수 있습니다. 태그를 사용하여 시나리오의 하위 세트를 분류하며 실행할 후크를 조건부로 선택할 수도 있습니다. 특성과 시나리오에는 공백으로 구분된 여러 태그가 있을 수 있습니다.

  이 예제에서는 `HelloWorld` 구성 요소를 사용합니다.

  각 시나리오에는 `@ConfidenceTest`라는 태그가 지정됩니다. 테스트 제품군의 하위 세트만 실행하려면 태그를 변경하거나 추가합니다. 각 테스트 시나리오는 각 신뢰도 테스트의 상단에 설명되어 있습니다. 시나리오는 각 테스트 사례의 상호 작용 및 예상 결과를 이해하는 데 도움이 되는 일련의 단계입니다. 원하는 단계를 추가하거나 기존 단계를 수정하여 이러한 테스트를 확장할 수 있습니다.

  ```
  @ConfidenceTest
  Scenario: As a Developer, I can deploy GDK_COMPONENT_NAME to my device and see it is working as expected
  ....
  ```

## 5단계: 테스트 JAR 빌드
<a name="build-test-jar"></a>

1. 구성 요소를 빌드합니다. 테스트 모듈을 빌드하기 전에 구성 요소를 빌드해야 합니다.

   ```
   gdk component build
   ```

1. 다음 명령을 사용하여 테스트 모듈을 빌드합니다. 이 명령은 `greengrass-build` 폴더에 테스트 JAR을 빌드합니다.

   ```
   gdk test-e2e build
   ```

## 6단계: 테스트 실행
<a name="run-test-gtf"></a>

신뢰도 테스트를 실행하면 GTF에서는 테스트의 수명 주기가 테스트 동안 생성된 리소스 관리와 함께 자동화됩니다. 먼저 테스트 대상 디바이스(DUT)를 AWS IoT 사물로 프로비저닝하고 Greengrass 코어 소프트웨어를 설치합니다. 그러면 해당 경로에 지정된 레시피를 사용하여 `HelloWorld`라는 새 구성 요소가 생성됩니다. 그런 다음에 `HelloWorld` 구성 요소가 Greengrass 사물 배포를 통해 코어 디바이스에 배포됩니다. 그러면 배포되었는지 확인됩니다. 배포되면 3분 이내에 배포 상태가 `COMPLETED`로 변경됩니다.

1. 프로젝트 디렉터리에서 `ConfidenceTest` 태그 또는 4단계에서 지정한 태그가 있는 테스트 대상인 `gdk-config.json` 파일로 이동합니다. 다음 명령을 사용하여 `test-e2e` 키를 업데이트합니다.

   ```
     "test-e2e":{
       "gtf_options" : { 
            "tags":"ConfidenceTest"
        }
     }
   ```

1. 테스트를 실행하기 전에 호스트 디바이스에 AWS 자격 증명을 제공해야 합니다. GTF는 이러한 자격 증명을 사용하여 테스트 프로세스 중에 AWS 리소스를 관리합니다. 테스트에 포함된 필수 작업을 자동화할 수 있는 권한이 제공한 역할에 있는지 확인합니다.

   다음 명령을 실행하여 AWS 자격 증명을 제공합니다.

   1. 

------
#### [ Linux or Unix ]

     ```
     export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
     export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
     ```

------
#### [ Windows Command Prompt (CMD) ]

     ```
     set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
     set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
     ```

------
#### [ PowerShell ]

     ```
     $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
     $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
     ```

------

1. 다음 명령을 사용하여 테스트를 실행합니다.

   ```
   gdk test-e2e run
   ```

   이 명령은 `greengrass-build` 폴더에 최신 버전의 Greengrass nucleus를 다운로드하고 이를 사용하여 테스트를 실행합니다. 또한 이 명령에서는 `ConfidenceTest` 태그가 있는 시나리오만 대상이 되고 해당 시나리오에 대한 보고서가 생성됩니다. 이 테스트 중에 생성된 AWS 리소스는 테스트가 끝날 때 삭제됩니다.

## 예제: 신뢰도 테스트 사용
<a name="build-confidence-test-case-example"></a>

**Example**  
GDK 프로젝트에서 다운로드된 테스트 모듈은 제공된 특성 파일로 구성됩니다.  
다음 예제에서는 Greengrass 소프트웨어의 사물 배포 특성 테스트에 특성 파일을 사용합니다. Greengrass AWS 클라우드를 통해 구성 요소를 배포하는 시나리오를 사용하여 이 특성의 기능을 부분적으로 테스트합니다. 이는 해당 사용 사례의 상호 작용과 예상 결과를 이해하는 데 도움이 되는 일련의 단계입니다.  <a name="build-confidence-test-case-example-steps"></a>
+ 

**제공된 특성 파일을 사용합니다.**

  현재 디렉터리에서 `gg-e2e-tests/src/main/resources/greengrass/features` 폴더로 이동합니다. 다음 예제처럼 보이는 `confidenceTest.feature` 샘플을 찾을 수 있습니다.

  ```
  Feature: Confidence Test Suite
  
  Background:
      Given my device is registered as a Thing
      And my device is running Greengrass
  
  @ConfidenceTest
  Scenario: As a Developer, I can deploy GDK_COMPONENT_NAME to my device and see it is working as expected
      When I create a Greengrass deployment with components
        | GDK_COMPONENT_NAME | GDK_COMPONENT_RECIPE_FILE |
        | aws.greengrass.Cli | LATEST                    |
      And I deploy the Greengrass deployment configuration
      Then the Greengrass deployment is COMPLETED on the device after 180 seconds
      # Update component state accordingly. Possible states: {RUNNING, FINISHED, BROKEN, STOPPING}
      And I verify the GDK_COMPONENT_NAME component is RUNNING using the greengrass-cli
  ```

  각 테스트 시나리오는 각 신뢰도 테스트의 상단에 설명되어 있습니다. 시나리오는 각 테스트 사례의 상호 작용 및 예상 결과를 이해하는 데 도움이 되는 일련의 단계입니다. 원하는 단계를 추가하거나 기존 단계를 수정하여 이러한 테스트를 확장할 수 있습니다. 각 시나리오에는 이러한 조정을 수행하는 데 도움이 되는 설명이 포함되어 있습니다.