> For the complete documentation index, see [llms.txt](https://docs.medcrypt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.medcrypt.com/ko/guardian/api-overview.md).

# API 개요

## 프로비저닝 함수

### Guardian()

**설명:** 새 Guardian 인스턴스를 생성하고 초기화할 준비가 된 시작 상태로 설정합니다.

* 다른 작업을 수행하기 전에 가장 먼저 호출해야 합니다.
* 이 생성자는 멤버 변수만 초기화합니다.

**종속성:** 없음 - 가장 먼저 호출하는 함수입니다.

**매개변수:** 없음 - 기본 생성자는 매개변수를 받지 않습니다.

**반환값:** 생성자이므로 반환값이 없습니다.

**구문:**

```cpp
Guardian()
```

### Initialize()

**설명:** 장치 자격 증명과 구성 파일을 사용하여 Guardian을 초기화합니다. 제공된 프로필, ID 및 신뢰 파일을 사용하여 Guardian 시스템을 초기화합니다.

**종속성:**

* 다음 작업 후에 호출해야 합니다. [Guardian 인스턴스 생성](#guardian) (`Guardian()` 생성자).
* 다른 Guardian 작업을 수행하기 전에 호출해야 합니다.

**매개변수:**

* `in_files`: 장치 자격 증명 및 구성 파일
* `in_component_handle`: 프로비저닝에 사용되는 고유한 구성 요소 식별자입니다.
  * **유형:** `const char*`
* `in_hardware_identifier`: 고유한 하드웨어 식별자입니다.
  * **문자 제한:** 36자(널 종료 문자 포함 시 37자)
  * **유형:** `const char*`
* `in_options`: 추가 초기화 구성 옵션

**반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.

* **성공 코드:** `OK`**.** Guardian 시스템이 성공적으로 초기화되었습니다.
* **오류 코드:**
  * `FAIL`: 일반 오류입니다. Guardian이 초기화되지 않았습니다. 자세한 내용은 로그 파일을 확인하세요.
  * `BADPARAM`: 입력값 중 하나가 null이거나 비어 있습니다.
  * `FILENOTFOUND`: 필수 입력 파일을 사용할 수 없습니다.
  * `OUTOFMEMORY` **:** Guardian을 초기화하기에 메모리가 부족합니다.

**구문**

```cpp
Status Initialize(
    const utilities::InitializeFiles & in_files,
    const char * in_component_handle,
    const char * in_hardware_identifier,
    const InitializeOptions & in_options
)
```

## GenerateProvisionRequest()

**설명:** 이 `GenerateProvisionRequest()`  함수는 프로비저닝 요청(`.mcpr`) 및 개인 ID(`.mcpi`) 파일을 생성합니다.

* 프로비저닝 프로세스의 첫 번째 단계입니다.
* 오프라인 프로비저닝 프로세스에서 유일한 단계입니다.
* 개인 ID(`.mcpi`  파일)에는 생성된 장치 키가 포함됩니다.
* 프로비저닝 요청(`.mcpr`  파일)은 Guardian Cloud에 수동으로 업로드하거나 프로필에서 제공되는 온라인 방법을 사용해 전송할 수 있습니다.

**종속성:**

* 다음 호출 후에 호출해야 합니다: `Initialize()`
* 다른 프로비저닝 또는 재프로비저닝 작업을 수행하기 전에 한 번 호출해야 합니다.
* 다음 작업 전에 필요합니다: `StartProvisioningOnline()`

**매개변수:**

* `io_files` : 프로비저닝 파일 구조입니다.\
  `in_provisioning_component_handle` : 프로비저닝에 사용되는 고유한 구성 요소 식별자입니다.
  * **유형:** `const char*`
* `in_provisioning_system` : Guardian Cloud로 전송되는 고유한 시스템 이름 식별자입니다.
  * **문자 제한:** 36자(널 종료 문자 포함 시 37자)
  * **유형:** `const char*`
* `in_hardware_identifier` - 고유한 하드웨어 식별자입니다.
  * **문자 제한:** 36자(널 종료 문자 포함 시 37자)
  * **유형:** `const char*`

**반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.

* **성공 코드:** `OK`**.** 프로비저닝 요청이 성공적으로 생성되었습니다
* **오류 코드:**
  * `FAIL`: 일반 오류입니다. 자세한 내용은 로그 파일을 확인하십시오.
  * `BADPARAM`: 입력값 중 하나가 null이거나 비어 있습니다.
  * `FILENOTFOUND`: 필수 입력 파일을 사용할 수 없습니다.
  * `NOWRITE`: 필수 출력 파일을 쓸 수 없습니다.
  * `OUTOFMEMORY` : 프로비저닝에 필요한 메모리가 부족합니다. \\

**구문**

```cpp
상태 GenerateProvisionRequest(
    utilities::ProvisionFiles & io_files,
    const char * in_provisioning_component_handle,
    const char * in_provisioning_system,
    const char * in_hardware_identifier
)
```

## StartProvisioningOnline()

이 `StartProvisioningOnline()`  함수는 Guardian Cloud에 프로비저닝 요청을 제출하는 온라인 프로비저닝 프로세스를 시작합니다. 프로비저닝 요청을 제출하고 자동화된 처리 워크플로를 시작합니다.

* **종속성:** GenerateProvisionRequest()를 실행한 후에 실행해야 합니다.
* **매개변수:**
  * `in_files`: 온라인 프로비저닝에 필요한 파일
  * `in_options`: 시간 제한을 포함한 추가 선택적 프로비저닝 구성 옵션
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : 온라인 프로비저닝이 성공적으로 시작되었습니다
  * **오류 코드:**
    * `FAIL` : 프로비저닝 시작 중 일반 오류가 발생했습니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : 입력값 중 하나가 null이거나 유효하지 않습니다
    * `FILENOTFOUND` : 필수 프로비저닝 파일을 사용할 수 없습니다

**구문**

```cpp
Status StartProvisioningOnline(
    const utilities::ProvisionOnlineFiles & in_files,
    const ProvisioningOptions & in_options
)
```

### Run()

* **설명:**
  * 프로비저닝 상태 머신 처리를 포함한 Guardian 백그라운드 작업을 실행합니다.
  * 다른 스레드에 배치되지 않았거나 부모 작업이 다른 스레드에 배치되지 않은 프로비저닝, 원격 측정, 핸드셰이크, 인증, 서비스, 세션 및 채널을 포함합니다. 이는 다음에서 수행됩니다. [CreateTask](#createtask-service-variant). 프로그램/스레드의 메인 루프에서 호출해야 합니다.
  * 온라인 프로비저닝 중에 정기적으로 반복 호출해야 합니다.
  * 사용 [IsProvisioningRunning()](#isprovisioningrunning) 프로비저닝이 완료되었는지 확인하고 Run() 호출을 중지합니다.
  * 내부 상태 머신을 처리하고 Guardian Cloud와의 통신을 처리합니다.
* **종속성:**
  * StartProvisioningOnline() 호출 후에 호출해야 합니다.
* **매개변수:** 매개변수 없음
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` - 백그라운드 작업이 성공적으로 실행됨
  * **오류 코드:**
    * `FAIL` - 백그라운드 처리 중 일반 오류가 발생했습니다. 자세한 내용은 로그 파일을 확인하세요.
    * `SHUTDOWN` : Guardian이 종료 상태이므로 run을 다시 호출하기 전에 재초기화해야 합니다.

### IsProvisioningRunning()

* **설명:** 프로비저닝 프로세스가 아직 활성 상태인지 확인합니다.
* **종속성:**
  * StartProvisioningOnline() 호출 후에 호출해야 합니다.
  * Run() 호출을 중단하고 프로비저닝된 프로필 가져오기를 시도할 시점을 확인하는 데 사용됩니다.
* **매개변수:** 없음 - 이 함수는 매개변수를 사용하지 않습니다
* **반환값:** 프로비저닝 상태를 나타내는 불리언 값
  * `true` - 프로비저닝이 아직 진행 중입니다. Run()을 계속 호출하세요.
  * `false` - 프로비저닝이 완료되었습니다(성공 또는 실패). 이제 GetProvisionedProfile()을 호출해야 합니다.
  * 온라인 프로비저닝 프로세스가 시작되기 전에는 `false`.
  * 온라인 프로비저닝이 성공하거나 실패한 후에는 다시 `false`.

**구문**

```cpp
bool IsProvisioningRunning()
```

### GetProvisionedProfile()

* **설명:**
  * 온라인 프로비저닝이 성공적으로 완료된 후 프로비저닝된 프로필을 추출합니다.
  * 완료된 프로비저닝 프로필을 지정된 버퍼에 복사합니다.
* **종속성:**
  * IsProvisioningRunning()이 다음을 반환한 후에만 호출해야 합니다. `false`.
  * StartProvisioningOnline()이 성공적으로 완료되고 Run() 루프가 실행되어야 합니다.
* **매개변수:**
  * `out_profile`: 프로비저닝된 프로필을 받을 버퍼입니다.
    * 유형: `char`
  * `io_size`:
    * 입력 시 버퍼 크기( `out_profile` )를 지정합니다. 프로비저닝에 성공하면, `out_profile` 실제 프로필 크기로 설정됩니다.
    * 유형: `size_t`
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : 프로비저닝된 프로필을 성공적으로 가져왔습니다.
    * 버퍼에는 다음 위치에 유효한 인증 프로필이 들어 있습니다: `out_profile` 크기: `io_size`.
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `INCOMPLETE` : 프로비저닝 프로세스가 완료되지 않아 사용할 수 있는 프로필이 없습니다.
    * `BADPARAM` - `out_profile` 또는 `io_size` 가 널 포인터(`nullptr`)이거나, `io_size` 가 0입니다.
    * `DENIED` - 온라인 프로비저닝 프로세스가 아직 실행 중입니다.
    * `FILENOTFOUND` - 프로비저닝이 완료되었지만 프로비저닝된 프로필을 사용할 수 없습니다.
    * `BADPARAM` - 버퍼 또는 크기 매개변수가 유효하지 않습니다.

**구문**

```cpp
Status GetProvisionedProfile(
    char * out_profile,
    size_t * io_size
)
```

## 구현 예제

## 인증서 관리 함수

### GetCertificateManager()

* **설명:** 기기 인증서를 처리하는 인증서 관리자를 가져옵니다. 인증서 작업 및 수명 주기 관리 기능을 제공합니다.
* **종속성:**
  * Initialize() 이후에 선택적으로 호출할 수 있습니다.
* **매개변수:**
  * `out_certificate_manager`: 인증서 관리자 인스턴스를 전달받는 출력 포인터
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` :
    * 인증서 관리자를 성공적으로 가져왔습니다.
    * 유효한 포인터가 `out_certificate_manager` 에 저장됩니다.
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : `out_certificate_manager` 가 null 포인터이므로 값을 채울 수 없습니다.
    * `DENIED` : Guardian이 초기화되지 않았습니다.
    * `MISCONFIGURED` : 로드된 프로비저닝 프로필이 인증서 작업을 허용하도록 구성되지 않았습니다.
* **조치:**
  * 가져온 인증서 관리자를 사용하여 인증서를 가져오고 내보냅니다.

**구문**

```cpp
Status GetCertificateManager(
    std::unique_ptr< CertificateManager > * out_certificate_manager
)
```

### GetProvisionedRevocationList()

* **설명:**
  * 인증서 유효성을 확인하기 위한 인증서 폐기 목록(CRL)을 가져옵니다.
  * 더 이상 신뢰해서는 안 되는 폐기된 인증서를 식별하는 데 사용합니다.
* **종속성:**
  * 프로비저닝이 성공한 후(GetProvisionedProfile() 이후)에 선택적으로 호출할 수 있습니다.
* **매개변수:**
  * `out_ccrl`: 인증서 폐기 목록을 전달받는 버퍼
    * 유형: `char*`
  * `io_size`: 입력 시 버퍼 크기, 출력 시 실제 크기
    * 입력 시 버퍼( `out_ccrl` )의 크기를 지정합니다. 프로비저닝이 성공하면 `out_ccrl` 해당 값이 실제 CRL 크기로 설정됩니다.
    * 유형: `size_t`
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK`
    * `out_ccrl` 에는 유효한 인증서 폐기 목록이 저장되며, 그 크기는 다음과 같습니다: `io_size`
  * **오류 코드:**
    * `FAIL` - 일반 오류입니다. 자세한 내용은 로그 파일을 확인하십시오.
    * `INCOMPLETE` - 프로비저닝 프로세스가 완료되지 않아 인증서 폐기 목록을 사용할 수 없습니다.
    * `BADPARAM` : `out_ccrl` 또는 `io_size` 은(는) null 포인터이거나 `io_size` 은(는) 0입니다
    * `DENIED` - 온라인 프로비저닝 프로세스가 아직 실행 중입니다.
    * `FILENOTFOUND` - 프로비저닝은 완료되었지만 사용할 수 있는 폐기 목록이 없습니다
* **동작:** 인증서 폐기 목록을 제공된 버퍼에 복사합니다

**구문**

```cpp
Status GetProvisionedRevocationList(
    char * out_ccrl,
    size_t * io_size
)
```

## 보안 작업 함수

### FindSecureOperation()

* **설명:**
  * 보안 작업 이름을 조회합니다.
  * 서명 및 확인 작업을 위한 보안 작업 핸들러를 가져옵니다.
* **종속성:**
  * Initialize() 이후에 선택적으로 호출할 수 있습니다.
* **매개변수:**
  * `in_secureop_name`: null 종료된 보안 작업 이름입니다.
    * **유형**: `const char*`
  * `out_secureop`: 다음을 가리키는 포인터입니다. `unique_ptr` 찾은 보안 작업의 저장소
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
* **성공 코드:** `OK` : 의 포인터 `out_secureop` 가 유효합니다
* **오류 코드:**
  * `FAIL` : 다음에서 지정한 작업을 찾을 수 없습니다. `in_secureop_name`
  * `BADPARAM` : `out_secureop` 은(는) null 포인터이므로 값을 저장할 수 없습니다
  * `DENIED` : Guardian이 초기화되지 않았습니다.
* **조치:**
  * 설정합니다 `out_secureop` 을(를) 찾은 작업으로 설정합니다
  * 수정하지 않습니다: `out_secureop` 작업이 `in_secureop_name` 에 해당하는 항목을 찾지 못한 경우

**구문**

```cpp
Status FindSecureOperation(
    const char * in_secureop_name,
    std::unique_ptr< SecureOperation > * out_secureop
)
```

## 서비스 관리 함수

### FindService()

* **설명:**
  * 서비스 이름을 조회하여 구성된 서비스를 찾습니다.
* **종속성:**
  * Initialize() 호출 후에 호출해야 합니다
* **매개변수:**
  * `in_service_name`: null 종료된 서비스 이름입니다
    * **유형:** `const char*`
  * `out_service`: 찾은 서비스의 unique\_ptr 저장소를 가리키는 포인터
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : `out_service` 의 포인터가 유효합니다
  * **오류 코드:**
    * `FAIL` : 다음으로 지정한 서비스를 찾을 수 없습니다: `in_service_name`
    * `BADPARAM` : `out_service` 가 null 포인터이므로 값을 설정할 수 없습니다
    * `DENIED` : Guardian이 초기화되지 않았습니다.
* **조치:**
  * 다음에 설정합니다: `out_service` 찾은 서비스
  * 수정하지 않습니다: `out_service` 서비스가 `in_service_name` 에 해당하지 않는 경우
  * 또는 서비스를 찾지 못한 경우에는 수정하지 않은 상태로 둡니다

**구문**

```cpp
Status FindService(
    const char * in_service_name,
    std::unique_ptr< Service > * out_service
)
```

### **CreateTask() - 서비스 변형** <a href="#createtask-service-variant" id="createtask-service-variant"></a>

* **설명:**
  * 제공된 객체와 모든 하위 객체를 Run에서 분리하여 서비스 작업용 태스크를 생성합니다.
  * 객체를 기본 Guardian Run 루프에서 분리하여 별도의 객체를 스레드로 실행할 수 있습니다.
* **종속성:**
  * Initialize() 호출 후에 호출해야 합니다
  * 서비스 객체는 유효해야 합니다
* **매개변수:**
  * `io_service`: 스레드에 배치할 서비스 구성 요소입니다. 성공하면 소유권이 이전되고, 실패하면 수정되지 않습니다.
  * `out_task`: 태스크용 unique\_ptr 저장소를 가리키는 포인터
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : out\_task에 유효한 태스크가 설정됩니다
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : io\_service 또는 out\_task가 null 포인터입니다
    * `DENIED` : 지정된 서비스가 이미 태스크에 포함되어 있습니다
* **동작:** 모든 하위 객체와 함께 태스크에 배치된 구성 요소는 Guardian Run 호출 시 실행되지 않으므로 별도의 객체를 스레드로 실행할 수 있습니다

**구문**

```cpp
Status CreateTask(
    std::unique_ptr< Service > * io_service,
    std::unique_ptr< Task > * out_task
)
```

### CreateTask() - 세션 변형

* **설명:**
  * 제공된 객체와 모든 하위 객체를 Run에서 분리하여 서비스 작업용 태스크를 생성합니다.
  * 객체를 기본 Run 루프에서 분리하여 별도의 객체를 스레드로 실행할 수 있습니다.
* **종속성:**
  * Initialize() 이후에 선택적으로 호출할 수 있습니다.
  * 서비스 객체는 유효해야 합니다
* **매개변수:**
  * `io_service`: 스레드에 배치할 서비스 구성 요소입니다. 성공하면 소유권이 이전되며, 실패하면 수정되지 않습니다.
  * `out_task`: 다음을 가리키는 포인터 `unique_ptr` 작업을 위한 저장소
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : `out_task` 유효한 작업을 포함합니다
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : `io_service` 또는 `out_task` 널 포인터입니다
    * `DENIED` : 지정된 서비스가 이미 태스크에 포함되어 있습니다
* **조치:**
  * Task에 배치된 구성 요소와 모든 하위 구성 요소는 Run이 호출되어도 실행되지 않으므로 별도의 객체를 스레드에서 실행할 수 있습니다.
  * 객체를 메인 `Run` 루프로 반환하려면 `unique_ptr`.

**구문**

```cpp
Status CreateTask(
    std::unique_ptr< Session > * io_session,
    std::unique_ptr< Task > * out_task
)
```

### CreateTask() - ChannelGuard 변형

* **설명:**
  * 제공된 객체와 모든 하위 객체를 Run()에서 분리하는 채널 작업용 태스크를 생성합니다.
  * 객체를 메인 Run() 루프에서 분리하여 별도의 객체를 스레드에서 실행할 수 있습니다.
* **종속성:**
  * Initialize() 호출 후에 호출해야 합니다
  * `ChannelGuard` 객체가 유효해야 합니다
* **매개변수:**
  * `io_channelguard`: `ChannelGuard` 스레드에 배치할 구성 요소
  * `out_task`: 다음을 가리키는 포인터 `unique_ptr` 작업을 위한 저장소
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : `out_task` 유효한 작업을 포함합니다
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : `io_channelguard` 또는 `out_task` 널 포인터입니다
    * `DENIED` : 지정된 `ChannelGuard` 가 이미 태스크에 포함되어 있으며 반환되지 않았습니다
* **조치:**
  * Task에 배치된 구성 요소와 모든 하위 구성 요소는 Run()이 호출되어도 실행되지 않으므로 별도의 객체를 스레드에서 실행할 수 있습니다.
  * 객체를 메인 Run() 루프로 반환하려면 unique\_ptr을 소멸시키십시오.

**구문**

```cpp
Status CreateTask(
    std::unique_ptr< ChannelGuard > * io_channelguard,
    std::unique_ptr< Task > * out_task
)
```

## **시스템 관리 함수**

### GetAuthenticationManager()

* **설명:**
  * 실행 중인 인증 관리자를 가져옵니다.
  * 사용자가 관리하는 연결의 인증 작업 및 허용/거부 목록에 액세스할 수 있습니다.
* **종속성:**
  * Initialize() 이후에 선택적으로 호출할 수 있습니다.
* **매개변수:**
  * `out_authentication_manager`: 다음을 가리키는 포인터 `unique_ptr` 인증 관리자용 저장소
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : 다음의 포인터 `out_authentication_manager` 가 유효합니다
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : `out_authentication_manager` 가 널 포인터이므로 값을 저장할 수 없습니다
    * `DENIED` : Guardian이 초기화되지 않았습니다.
    * `MISCONFIGURED` : 로드된 프로필이 외부 인증 작업을 허용하도록 구성되지 않았습니다
* **작업:** 가져온 인증 관리자를 사용하여 사용자가 관리하는 연결의 허용/차단 목록을 가져옵니다

**구문**

```cpp
Status GetAuthenticationManager(
    std::unique_ptr< AuthenticationManager > * out_authentication_manager
)
```

### GetTelemetryManager()

* **설명:**
  * 실행 중인 텔레메트리 관리자를 가져옵니다.
  * 텔레메트리 서비스와의 상호작용에 대한 액세스를 제공합니다.
* **종속성:**
  * Initialize() 이후에 선택적으로 호출할 수 있습니다.
* **매개변수:**
  * `out_telemtry_manager`: 텔레메트리 관리자를 위한 `unique_ptr` 저장 공간을 가리키는 포인터
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : 포인터 `out_telemtry_manager` 가 유효합니다
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : `out_telemtry_manager` 가 null 포인터이므로 값을 채울 수 없습니다
    * `DENIED` : Guardian이 초기화되지 않았거나 실행 중인 텔레메트리 관리자가 없습니다
    * `MISCONFIGURED` : 로드된 프로필이 텔레메트리용으로 구성되지 않았습니다
* **작업:** 가져온 텔레메트리 관리자를 사용하여 텔레메트리 서비스와 상호작용합니다

**구문**

```cpp
Status GetTelemetryManager(
    std::unique_ptr< Telemetry > * out_telemtry_manager
)
```

### \~Guardian()

* **설명:** 소멸자는 Guardian을 정상적으로 종료하려고 시도합니다.
* **종속성:** 없음 - 객체가 범위를 벗어나거나 명시적으로 삭제될 때 소멸자가 자동으로 호출됩니다
* **매개변수:** 없음 - 소멸자는 매개변수를 받지 않습니다
* **반환값:** 소멸자이므로 반환값이 없습니다.
* **작업:** 소멸자는 정상적인 종료를 위해 Shutdown() 호출을 시도한 다음 Guardian을 소멸시킵니다.

**구문**

```cpp
~Guardian()
```

### Shutdown()

* **설명:**
  * 모든 내부 상태 머신을 중지하고 Guardian을 종료하려고 시도합니다.
  * 프로비저닝, 텔레메트리, 핸드셰이크, 인증, 서비스, 세션 및 채널을 포함하며, 다른 스레드에 배치되었거나 부모가 다른 스레드에 배치된 항목도 모두 포함합니다. 이는 [CreateTask](#createtask-service-variant).
* **종속성:**
  * Initialize() 이후에 선택적으로 호출할 수 있습니다.
  * 전송 대기 중인 데이터가 있으면 실패 코드를 반환하거나 다음 값을 요구합니다: `in_force`
* **매개변수:**
  * `in_force`: 대기 중인 모든 전송 데이터를 삭제하고 종료합니다. 기본값은 `false`.
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : Guardian이 성공적으로 종료되었습니다
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `AGAIN` : 하나 이상의 전송 계층에 전송 대기 중인 데이터가 있습니다
* **작업:** 프로비저닝, 원격 측정, 핸드셰이크, 인증, 서비스, 세션, 채널을 포함한 모든 내부 상태 머신을 중지합니다.

**구문**

```cpp
Status Shutdown(
    const bool & in_force =false
)
```

다음 [medcrypt 네임스페이스 ](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt.md)에는 [guardian 네임스페이스](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian.md)가 포함되어 있으며, 여기에는 다음 클래스와 구조체가 포함됩니다.

## **핵심 클래스**

* [Guardian](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-guardian.md) 클래스:
  * **설명:** Guardian 시스템의 루트입니다.
  * **위치:** medcrypt::guardian::Guardian
* [AuthenticationManager](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-authenticationmanager.md) 클래스:
  * **설명:** 인증 제한을 담는 컨테이너입니다.
  * **위치:** medcrypt::guardian::AuthenticationManager
* [ChannelGuard](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-channelguard.md) 클래스:
  * **설명:** 의 명명된 채널 [Session](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-session.md).
  * **위치:** medcrypt::guardian::ChannelGuard
* [SecureOperation](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-secureoperation.md) 클래스:
  * **설명:** 이름이 지정된 독립 실행 작업입니다.
  * **위치:** medcrypt::guardian::SecureOperation
* [Service](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-service.md) 클래스:
  * **설명:** 연결 및 채널 구성의 이름이 지정된 그룹입니다.
  * **위치:** medcrypt::guardian::Service
* [Session](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-session.md) 클래스:
  * **설명:** 의 개별 연결 [Service](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-service.md).
  * **위치:** medcrypt::guardian::Session
* [Task](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-task.md) 클래스:
  * **설명:** 멀티스레딩 컨테이너입니다.
  * **위치:** medcrypt::guardian::Task
* [TransportInterface](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-transportinterface.md) 클래스:
  * **설명:** [ConfigureTransport()](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-service.md#function-configuretransport) 필수 인터페이스입니다.
  * **위치:** medcrypt::guardian::TransportInterface

## **데이터 구조**

* [AuthenticationDomain](/ko/guardian/api-overview/api-reference/classes/structmedcrypt-guardian-authenticationdomain.md) 구조체:
  * **설명:** 인증 에이전트가 사용할 인증 제한 컨테이너입니다.
  * **위치:** medcrypt::guardian::AuthenticationDomain
* [InitializeOptions](/ko/guardian/api-overview/api-reference/classes/structmedcrypt-guardian-initializeoptions.md) 구조체:
  * **설명:** 설정 중 [Initialize()](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-guardian.md#step-2-run-initialize) 에서 사용하는 옵션입니다.
  * **위치:** medcrypt::guardian::InitializeOptions
* [ProvisioningOptions](/ko/guardian/api-overview/api-reference/classes/structmedcrypt-guardian-provisioningoptions.md) 구조체:
  * **설명:** 에서 사용하는 옵션입니다. [StartProvisioningOnline()](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-guardian.md#step-4-startprovisioningonline).
  * **위치:** medcrypt::guardian::ProvisioningOptions

### 유틸리티 네임스페이스 및 구조체

guardian 네임스페이스에는 [guardian namespace](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian.md) 다음 구조체가 포함된 [utilities](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-utilities.md) 네임스페이스도 포함됩니다.

* [InitializeFiles](/ko/guardian/api-overview/api-reference/classes/structmedcrypt-guardian-utilities-initializefiles.md) 구조체:
  * **설명:** 에서 사용하는 초기화 파일을 저장합니다. [Initialize()](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-guardian.md#step-2-run-initialize).
  * **위치:** medcrypt::guardian::utilities::InitializeFiles
* [ProvisionFiles](/ko/guardian/api-overview/api-reference/classes/structmedcrypt-guardian-utilities-provisionfiles.md) 구조체:
  * **설명:** 에서 프로비저닝 요청 파일을 생성하는 데 사용하는 저장소입니다. [GenerateProvisionRequest()](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-guardian.md#step-3-run-generateprovisionrequest).
  * **위치:** medcrypt::guardian::utilities::ProvisionFiles
* [ProvisionOnlineFiles](/ko/guardian/api-overview/api-reference/classes/structmedcrypt-guardian-utilities-provisiononlinefiles.md) 구조체:
  * **설명:** 에서 온라인 프로비저닝 파일을 저장합니다 [StartProvisioningOnline()](/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-guardian.md#step-4-startprovisioningonline).
  * **위치:** medcrypt::guardian::utilities::ProvisionOnlineFiles

## **기타 네임스페이스**

* [AuthenticationAllowDenyEnum](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-authenticationallowdenyenum.md) 네임스페이스:
  * **설명:** 지정된 목록이 허용 목록인지 차단 목록인지 확인합니다.
  * **위치:** medcrypt::guardian::AuthenticationAllowDenyEnum
* [GuardianStatusEnum](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md) 네임스페이스:
  * **설명:** Guardian 함수가 반환하는 상태 코드입니다.
  * **위치:** medcrypt::guardian::GuardianStatusEnum
* [LogLevelEnum](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-loglevelenum.md) 네임스페이스:
  * **설명:** Guardian 함수가 반환하는 로그 수준입니다.
  * **위치:** medcrypt::guardian::LogLevelEnum


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.medcrypt.com/ko/guardian/api-overview.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
