

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

# 로컬 배포 및 구성 요소 관리
<a name="ipc-local-deployments-components"></a>

**참고**  
이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)의 v2.6.0 이상에서 사용할 수 있습니다.

Greengrass CLI IPC 서비스를 사용하여 코어 디바이스에서 로컬 배포 및 Greengrass 구성 요소를 관리할 수 있습니다.

이러한 IPC 작업을 사용하려면 [Greengrass CLI 구성 요소](greengrass-cli-component.md) 버전 2.6.0 이상을 사용자 지정 구성 요소에 종속성으로 포함합니다. 그런 다음 사용자 지정 구성 요소에서 IPC 작업을 사용하여 다음을 수행할 수 있습니다.
+ 로컬 배포를 생성하여 코어 디바이스에서 Greengrass 구성 요소를 수정하고 구성합니다.
+ 코어 디바이스에서 Greengrass 구성 요소를 다시 시작하고 중지합니다.
+ [로컬 디버그 콘솔 ](local-debug-console-component.md)에 로그인하는 데 사용할 수 있는 암호를 생성합니다.

**Topics**
+ [최소 SDK 버전](#ipc-local-deployments-components-sdk-versions)
+ [권한 부여](#ipc-local-deployments-components-authorization)
+ [CreateLocalDeployment](#ipc-operation-createlocaldeployment)
+ [ListLocalDeployments](#ipc-operation-listlocaldeployments)
+ [GetLocalDeploymentStatus](#ipc-operation-getlocaldeploymentstatus)
+ [ListComponents](#ipc-operation-listcomponents)
+ [GetComponentDetails](#ipc-operation-getcomponentdetails)
+ [RestartComponent](#ipc-operation-restartcomponent)
+ [StopComponent](#ipc-operation-stopcomponent)
+ [CreateDebugPassword](#ipc-operation-createdebugpassword)

## 최소 SDK 버전
<a name="ipc-local-deployments-components-sdk-versions"></a>

다음 표에는 Greengrass CLI IPC 서비스와 상호 작용하는 데 사용해야 AWS IoT Device SDK 하는의 최소 버전이 나열되어 있습니다.


| SDK | 최소 버전 | 
| --- | --- | 
|  [AWS IoT Device SDK Java v2용](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  v1.2.10  | 
|  [AWS IoT Device SDK Python v2용](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  v1.5.3  | 
|  [AWS IoT Device SDK C\$1\$1 v2용](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  v1.17.0  | 
|  [AWS IoT Device SDK JavaScript v2용](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  v1.12.0  | 

## 권한 부여
<a name="ipc-local-deployments-components-authorization"></a>

사용자 지정 구성 요소에서 Greengrass CLI IPC 서비스를 사용하려면 구성 요소가 로컬 배포 및 구성 요소를 관리할 수 있도록 허용하는 권한 부여 정책을 정의해야 합니다. 권한 부여 정책 정의에 대한 자세한 내용은 [구성 요소에 IPC 작업을 수행할 수 있는 권한 부여](interprocess-communication.md#ipc-authorization-policies) 섹션을 참조하세요.

Greengrass CLI에 대한 권한 부여 정책에는 다음 속성이 있습니다.

**IPC 서비스 식별자:** `aws.greengrass.Cli`


| 연산 | 설명 | 리소스 | 
| --- | --- | --- | 
|  `aws.greengrass#CreateLocalDeployment`  |  구성 요소가 코어 디바이스에서 로컬 배포를 생성할 수 있도록 허용합니다.  |  `*`  | 
|  `aws.greengrass#ListLocalDeployments`  |  구성 요소가 코어 디바이스의 로컬 배포를 나열할 수 있도록 허용합니다.  |  `*`  | 
|  `aws.greengrass#GetLocalDeploymentStatus`  |  구성 요소가 코어 디바이스에서 로컬 배포 상태를 가져올 수 있도록 허용합니다.  |  로컬 배포 ID 또는 모든 로컬 배포에 대한 액세스를 허용하려면 `*`입니다.  | 
|  `aws.greengrass#ListComponents`  |  구성 요소가 코어 디바이스의 구성 요소를 나열할 수 있도록 허용합니다.  |  `*`  | 
|  `aws.greengrass#GetComponentDetails`  |  구성 요소가 코어 디바이스의 구성 요소에 대한 세부 정보를 가져올 수 있도록 허용합니다.  |  구성 요소 이름(예: `com.example.HelloWorld`) 또는 모든 구성 요소에 대한 액세스를 허용하려면 `*`입니다.  | 
|  `aws.greengrass#RestartComponent`  |  구성 요소가 코어 디바이스에서 구성 요소를 다시 시작할 수 있도록 허용합니다.  |  구성 요소 이름(예: `com.example.HelloWorld`) 또는 모든 구성 요소에 대한 액세스를 허용하려면 `*`입니다.  | 
|  `aws.greengrass#StopComponent`  |  구성 요소가 코어 디바이스에서 구성 요소를 중지할 수 있도록 허용합니다.  |  구성 요소 이름(예: `com.example.HelloWorld`) 또는 모든 구성 요소에 대한 액세스를 허용하려면 `*`입니다.  | 
|  `aws.greengrass#CreateDebugPassword`  |  구성 요소가 [로컬 디버그 콘솔 구성 요소](local-debug-console-component.md)에 로그인하는 데 사용할 암호를 생성할 수 있도록 허용합니다.  |  `*`  | 

**Example 권한 부여 정책 예제**  
다음 권한 부여 정책 예제에서는 구성 요소가 로컬 배포를 생성하고, 모든 로컬 배포 및 구성 요소를 보고, `com.example.HelloWorld`라는 구성 요소를 다시 시작하고 중지할 수 있도록 허용합니다.  

```
{
  "accessControl": {
    "aws.greengrass.Cli": {
      "com.example.MyLocalManagerComponent:cli:1": {
        "policyDescription": "Allows access to create local deployments and view deployments and components.",
        "operations": [
          "aws.greengrass#CreateLocalDeployment",
          "aws.greengrass#ListLocalDeployments",
          "aws.greengrass#GetLocalDeploymentStatus",
          "aws.greengrass#ListComponents",
          "aws.greengrass#GetComponentDetails"
        ],
        "resources": [
          "*"
        ]
      }
    },
    "aws.greengrass.Cli": {
      "com.example.MyLocalManagerComponent:cli:2": {
        "policyDescription": "Allows access to restart and stop the Hello World component.",
        "operations": [
          "aws.greengrass#RestartComponent",
          "aws.greengrass#StopComponent"
        ],
        "resources": [
          "com.example.HelloWorld"
        ]
      }
    }
  }
}
```

## CreateLocalDeployment
<a name="ipc-operation-createlocaldeployment"></a>

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

이 작업은 Greengrass CLI의 [deployment create 명령](gg-cli-deployment.md#deployment-create)과 동일한 기능을 제공합니다.

### 요청
<a name="ipc-operation-createlocaldeployment-request"></a>

이 작업의 요청에서는 다음 파라미터를 사용합니다.

`recipeDirectoryPath`(Python: `recipe_directory_path`)  
(선택 사항) 구성 요소 레시피 파일이 포함된 폴더의 절대 경로입니다.

`artifactDirectoryPath`(Python: `artifact_directory_path`)  
(선택 사항) 배포에 포함할 아티팩트 파일이 포함된 폴더의 절대 경로입니다. 아티팩트 폴더에는 다음 폴더 구조를 포함해야 합니다.  

```
/path/to/artifact/folder/component-name/component-version/artifacts
```

`rootComponentVersionsToAdd`(Python: `root_component_versions_to_add`)  
(선택 사항) 코어 디바이스에 설치할 구성 요소 버전입니다. 이 객체 `ComponentToVersionMap`는 다음 키-값 페어를 포함하는 맵입니다.    
`key`  
구성 요소의 이름입니다.  
`value`  
구성 요소의 버전입니다.

`rootComponentsToRemove`(Python: `root_components_to_remove`)  
(선택 사항) 코어 디바이스에서 제거할 구성 요소입니다. 각 항목이 구성 요소의 이름인 목록을 지정합니다.

`componentToConfiguration`(Python: `component_to_configuration`)  
(선택 사항) 배포의 각 구성 요소에 대한 구성 업데이트입니다. 이 객체 `ComponentToConfiguration`는 다음 키-값 페어를 포함하는 맵입니다.    
`key`  
구성 요소의 이름입니다.  
`value`  
구성 요소에 대한 구성 업데이트 JSON 객체입니다. JSON 객체는 다음 형식이어야 합니다.  

```
{ 
  "MERGE": {
    "config-key": "config-value"
  },
  "RESET": [
    "path/to/reset/"
  ]
}
```
구성 업데이트에 대한 자세한 내용은 [구성 요소 구성 업데이트](update-component-configurations.md) 섹션을 참조하세요.

`componentToRunWithInfo`(Python: `component_to_run_with_info`)  
(선택 사항) 배포의 각 구성 요소에 대한 런타임 구성입니다. 이 구성에는 각 구성 요소의 프로세스를 소유하는 시스템 사용자와 각 구성 요소에 적용할 시스템 제한이 포함됩니다. 이 객체 `ComponentToRunWithInfo`는 다음 키-값 페어를 포함하는 맵입니다.    
`key`  
구성 요소의 이름입니다.  
`value`  
구성 요소의 런타임 구성입니다. 런타임 구성 파라미터를 생략하면 AWS IoT Greengrass 코어 소프트웨어는 [Greengrass nucleus](greengrass-nucleus-component.md)에서 구성하는 기본값을 사용합니다. 이 객체 `RunWithInfo`에는 다음 정보가 포함됩니다.    
`posixUser`(Python: `posix_user`)  
(선택 사항) <a name="deployment-posix-user-definition"></a>Linux 코어 디바이스에서 이 구성 요소를 실행하는 데 사용할 POSIX 시스템 사용자와 그룹(선택 사항)입니다. 사용자와 그룹(지정된 경우)이 각 Linux 코어 디바이스에 있어야 합니다. `user:group` 형식으로 사용자와 그룹을 콜론(`:`)으로 구분하여 지정합니다. 그룹은 선택 사항입니다. 그룹을 지정하지 않으면 AWS IoT Greengrass 코어 소프트웨어는 사용자의 기본 그룹을 사용합니다. 자세한 내용은 단원을 참조하십시오[구성 요소를 실행하는 사용자 구성](configure-greengrass-core-v2.md#configure-component-user).  
`windowsUser`(Python: `windows_user`)  
(선택 사항) <a name="deployment-windows-user-definition"></a>Windows 코어 디바이스에서 이 구성 요소를 실행하는 데 사용할 Windows 사용자입니다. 사용자가 각 Windows 코어 디바이스에 있어야 하며, 해당 이름과 암호가 LocalSystem 계정의 Credentials Manager 인스턴스에 저장되어야 합니다. 자세한 내용은 [구성 요소를 실행하는 사용자 구성](configure-greengrass-core-v2.md#configure-component-user) 섹션을 참조하세요.  
`systemResourceLimits`(Python: `system_resource_limits`)  
(선택 사항) <a name="deployment-system-resource-limits-definition"></a>이 구성 요소의 프로세스에 적용할 시스템 리소스 제한입니다. 기본적으로 일반 및 컨테이너화되지 않은 Lambda 구성 요소에 시스템 리소스 제한을 적용할 수 있습니다. 자세한 내용은 단원을 참조하십시오[구성 요소에 대한 시스템 리소스 제한 구성](configure-greengrass-core-v2.md#configure-component-system-resource-limits).  
AWS IoT Greengrass 는 현재 Windows 코어 디바이스에서이 기능을 지원하지 않습니다.  
이 객체 `SystemResourceLimits`에는 다음 정보가 포함됩니다.    
`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 단위)입니다.

`groupName`(Python: `group_name`)  
(선택 사항) 이 배포에서 대상으로 지정할 사물 그룹의 이름입니다.

### 응답
<a name="ipc-operation-createlocaldeployment-response"></a>

이 작업의 응답에는 다음 정보가 포함됩니다.

`deploymentId`(Python: `deployment_id`)  
요청이 생성한 로컬 배포의 ID입니다.

## ListLocalDeployments
<a name="ipc-operation-listlocaldeployments"></a>

마지막 10개 로컬 배포의 상태를 가져옵니다.

이 작업은 Greengrass CLI의 [deployment list 명령](gg-cli-deployment.md#deployment-list)과 동일한 기능을 제공합니다.

### 요청
<a name="ipc-operation-listlocaldeployments-request"></a>

이 작업의 요청에는 파라미터가 없습니다.

### 응답
<a name="ipc-operation-listlocaldeployments-response"></a>

이 작업의 응답에는 다음 정보가 포함됩니다.

`localDeployments`(Python: `local_deployments`)  
로컬 배포 목록입니다. 이 목록의 각 객체는 `LocalDeployment` 객체이며, 여기에는 다음 정보가 포함됩니다.  <a name="ipc-local-deployment-object-shape"></a>  
`deploymentId`(Python: `deployment_id`)  
로컬 배포의 ID입니다.  
`status`  
로컬 배포의 상태입니다. 이 열거형 `DeploymentStatus`의 값은 다음과 같습니다.  
+ `QUEUED`
+ `IN_PROGRESS`
+ `SUCCEEDED`
+ `FAILED`

## GetLocalDeploymentStatus
<a name="ipc-operation-getlocaldeploymentstatus"></a>

로컬 배포의 상태를 가져옵니다.

이 작업은 Greengrass CLI의 [deployment status 명령](gg-cli-deployment.md#deployment-status)과 동일한 기능을 제공합니다.

### 요청
<a name="ipc-operation-getlocaldeploymentstatus-request"></a>

이 작업의 요청에서는 다음 파라미터를 사용합니다.

`deploymentId`(Python: `deployment_id`)  
가져올 로컬 배포의 ID입니다.

### 응답
<a name="ipc-operation-getlocaldeploymentstatus-response"></a>

이 작업의 응답에는 다음 정보가 포함됩니다.

`deployment`  
로컬 배포입니다. 이 객체 `LocalDeployment`에는 다음 정보가 포함됩니다.  <a name="ipc-local-deployment-object-shape"></a>  
`deploymentId`(Python: `deployment_id`)  
로컬 배포의 ID입니다.  
`status`  
로컬 배포의 상태입니다. 이 열거형 `DeploymentStatus`의 값은 다음과 같습니다.  
+ `QUEUED`
+ `IN_PROGRESS`
+ `SUCCEEDED`
+ `FAILED`

## ListComponents
<a name="ipc-operation-listcomponents"></a>

코어 디바이스에서 각 루트 구성 요소의 이름, 버전, 상태 및 구성을 가져옵니다. *루트 구성 요소*는 배포에서 지정하는 구성 요소입니다. 이 응답에는 다른 구성 요소의 종속성으로 설치된 구성 요소는 포함되지 않습니다.

이 작업은 Greengrass CLI의 [component list 명령](gg-cli-component.md#component-list)과 동일한 기능을 제공합니다.

### 요청
<a name="ipc-operation-listcomponents-request"></a>

이 작업의 요청에는 파라미터가 없습니다.

### 응답
<a name="ipc-operation-listcomponents-response"></a>

이 작업의 응답에는 다음 정보가 포함됩니다.

`components`  
코어 디바이스의 루트 구성 요소 목록입니다. 이 목록의 각 객체는 `ComponentDetails` 객체이며, 여기에는 다음 정보가 포함됩니다.  <a name="ipc-component-details-object-shape"></a>  
`componentName`(Python: `component_name`)  
구성 요소의 이름입니다.  
`version`  
구성 요소의 버전입니다.  
`state`  
구성 요소의 상태입니다. 이 상태는 다음 중 하나일 수 있습니다.  
+ `BROKEN`
+ `ERRORED`
+ `FINISHED`
+ `INSTALLED`
+ `NEW`
+ `RUNNING`
+ `STARTING`
+ `STOPPING`  
`configuration`  
JSON 객체인 구성 요소의 구성입니다.

## GetComponentDetails
<a name="ipc-operation-getcomponentdetails"></a>

코어 디바이스에서 구성 요소의 버전, 상태 및 구성을 가져옵니다.

이 작업은 Greengrass CLI의 [component details 명령](gg-cli-component.md#component-details)과 동일한 기능을 제공합니다.

### 요청
<a name="ipc-operation-getcomponentdetails-request"></a>

이 작업의 요청에서는 다음 파라미터를 사용합니다.

`componentName`(Python: `component_name`)  
가져올 구성 요소의 이름입니다.

### 응답
<a name="ipc-operation-getcomponentdetails-response"></a>

이 작업의 응답에는 다음 정보가 포함됩니다.

`componentDetails`(Python: `component_details`)  
구성 요소의 세부 정보입니다. 이 객체 `ComponentDetails`에는 다음 정보가 포함됩니다.  <a name="ipc-component-details-object-shape"></a>  
`componentName`(Python: `component_name`)  
구성 요소의 이름입니다.  
`version`  
구성 요소의 버전입니다.  
`state`  
구성 요소의 상태입니다. 이 상태는 다음 중 하나일 수 있습니다.  
+ `BROKEN`
+ `ERRORED`
+ `FINISHED`
+ `INSTALLED`
+ `NEW`
+ `RUNNING`
+ `STARTING`
+ `STOPPING`  
`configuration`  
JSON 객체인 구성 요소의 구성입니다.

## RestartComponent
<a name="ipc-operation-restartcomponent"></a>

코어 디바이스에서 구성 요소를 다시 시작합니다.

**참고**  
어느 구성 요소든 다시 시작할 수 있지만 [일반 구성 요소](develop-greengrass-components.md#component-types)만 다시 시작하는 것이 좋습니다.

이 작업은 Greengrass CLI의 [component restart 명령](gg-cli-component.md#component-restart)과 동일한 기능을 제공합니다.

### 요청
<a name="ipc-operation-restartcomponent-request"></a>

이 작업의 요청에서는 다음 파라미터를 사용합니다.

`componentName`(Python: `component_name`)  
구성 요소의 이름입니다.

### 응답
<a name="ipc-operation-restartcomponent-response"></a>

이 작업의 응답에는 다음 정보가 포함됩니다.

`restartStatus`(Python: `restart_status`)  
다시 시작 요청의 상태입니다. 요청 상태는 다음 중 하나일 수 있습니다.  
+ `SUCCEEDED`
+ `FAILED`

`message`  
요청이 실패한 경우 구성 요소를 다시 시작하지 못한 이유에 대한 메시지입니다.

### 예제
<a name="ipc-operation-restartcomponent-examples"></a>

다음 예제에서는 사용자 지정 구성 요소 코드에서 이 작업을 직접 호출하는 방법을 보여줍니다.

------
#### [ Rust ]

**Example 예: 구성 요소 다시 시작**  

```
use gg_sdk::Sdk;

fn main() {
    let sdk = Sdk::init();
    sdk.connect().expect("Failed to establish IPC connection");

    let component_name = "com.example.HelloWorld";

    sdk.restart_component(component_name)
        .expect("Failed to restart component");

    println!("Successfully requested restart for component: {component_name}");
}
```

------
#### [ C ]

**Example 예: 구성 요소 다시 시작**  

```
#include <gg/error.h>
#include <gg/ipc/client.h>
#include <gg/sdk.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    gg_sdk_init();

    GgError err = ggipc_connect();
    if (err != GG_ERR_OK) {
        fprintf(stderr, "Failed to establish IPC connection.\n");
        exit(-1);
    }

    GgBuffer component_name = GG_STR("com.example.HelloWorld");

    err = ggipc_restart_component(component_name);
    if (err != GG_ERR_OK) {
        fprintf(
            stderr,
            "Failed to restart component: %.*s\n",
            (int) component_name.len,
            component_name.data
        );
        exit(-1);
    }

    printf(
        "Successfully requested restart for component: %.*s\n",
        (int) component_name.len,
        component_name.data
    );
}
```

------
#### [ C\$1\$1 (Component SDK) ]

**Example 예: 구성 요소 다시 시작**  

```
#include <gg/ipc/client.hpp>
#include <iostream>

int main() {
    auto &client = gg::ipc::Client::get();

    auto error = client.connect();
    if (error) {
        std::cerr << "Failed to establish IPC connection.\n";
        exit(-1);
    }

    std::string_view component_name = "com.example.HelloWorld";

    error = client.restart_component(component_name);
    if (error) {
        std::cerr << "Failed to restart component: " << component_name << "\n";
        exit(-1);
    }

    std::cout << "Successfully requested restart for component: "
              << component_name << "\n";
}
```

------

## StopComponent
<a name="ipc-operation-stopcomponent"></a>

코어 디바이스에서 구성 요소의 프로세스를 중지합니다.

**참고**  
어느 구성 요소든 중지할 수 있지만 [일반 구성 요소](develop-greengrass-components.md#component-types)만 중지하는 것이 좋습니다.

이 작업은 Greengrass CLI의 [component stop 명령](gg-cli-component.md#component-stop)과 동일한 기능을 제공합니다.

### 요청
<a name="ipc-operation-stopcomponent-request"></a>

이 작업의 요청에서는 다음 파라미터를 사용합니다.

`componentName`(Python: `component_name`)  
구성 요소의 이름입니다.

### 응답
<a name="ipc-operation-stopcomponent-response"></a>

이 작업의 응답에는 다음 정보가 포함됩니다.

`stopStatus`(Python: `stop_status`)  
중지 요청의 상태입니다. 요청 상태는 다음 중 하나일 수 있습니다.  
+ `SUCCEEDED`
+ `FAILED`

`message`  
요청이 실패한 경우 구성 요소를 중지하지 못한 이유에 대한 메시지입니다.

## CreateDebugPassword
<a name="ipc-operation-createdebugpassword"></a>

[로컬 디버그 콘솔 구성 요소](local-debug-console-component.md)에 로그인하는 데 사용할 수 있는 임의 암호를 생성합니다. 암호는 생성되고 8시간 후에 만료됩니다.

이 작업은 Greengrass CLI의 [get-debug-password 명령](gg-cli-get-debug-password.md)과 동일한 기능을 제공합니다.

### 요청
<a name="ipc-operation-createdebugpassword-request"></a>

이 작업의 요청에는 파라미터가 없습니다.

### 응답
<a name="ipc-operation-createdebugpassword-response"></a>

이 작업의 응답에는 다음 정보가 포함됩니다.

`username`  
로그인에 사용할 사용자 이름입니다.

`password`  
로그인에 사용할 암호입니다.

`passwordExpiration`(Python: `password_expiration`)  
암호가 만료되는 시간입니다.

`certificateSHA256Hash`(Python: `certificate_sha256_hash`)  
HTTPS가 활성화된 경우 로컬 디버그 콘솔에서 사용하는 자체 서명된 인증서의 SHA-256 지문입니다. 로컬 디버그 콘솔을 열 때 이 지문을 사용하여 인증서가 합법적이고 연결이 안전한지 확인합니다.

`certificateSHA1Hash`(Python: `certificate_sha1_hash`)  
HTTPS가 활성화된 경우 로컬 디버그 콘솔에서 사용하는 자체 서명된 인증서의 SHA-1 지문입니다. 로컬 디버그 콘솔을 열 때 이 지문을 사용하여 인증서가 합법적이고 연결이 안전한지 확인합니다.