

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

# Amazon Chime SDK 메시징 사용
<a name="using-the-messaging-sdk"></a>

Amazon Chime SDK 개발자 안내서의 이 섹션을 사용하여 Amazon Chime SDK 서비스에서 실행되는 메시징 애플리케이션을 만들 수 있습니다. 이 SDK는 기본 메시징 앱을 만드는 데 필요한 개념적이고 실용적인 정보를 제공합니다.

**Topics**
+ [Amazon Chime SDK ID 네임스페이스로 마이그레이션](identity-namespace-migration.md)
+ [Amazon Chime SDK 메시징 네임스페이스로 마이그레이션](messaging-namespace-migration.md)
+ [Amazon Chime SDK 메시징의 사전 조건 이해](messaging-prerequisites.md)
+ [Amazon Chime SDK 메시징 개념 이해](messaging-concepts.md)
+ [Amazon Chime SDK 메시징 아키텍처 이해](messaging-architecture.md)
+ [Amazon Chime SDK 메시지 유형 이해](msg-types.md)
+ [Amazon Chime SDK 메시징 시작하기](getting-started.md)
+ [Amazon Chime SDK 메시징을 위한 시스템 메시지 이해](system-messages.md)
+ [Amazon Chime SDK 메시징의 IAM 역할 예시](iam-roles.md)
+ [역할별 권한 부여 이해](auth-by-role.md)
+ [Amazon Chime SDK 메시징에서 메시징 데이터 스트리밍](streaming-export.md)
+ [엘라스틱 채널을 사용하여 Amazon Chime SDK 회의에서 라이브 이벤트 주최](elastic-channels.md)
+ [Amazon Chime SDK 메시징에 모바일 푸시 알림을 사용하여 메시지 수신](using-push-notifications.md)
+ [Amazon Chime SDK 메시징에 서비스 연결 역할 사용](using-roles.md)
+ [채널 흐름을 사용하여 Amazon Chime SDK 메시징용 메시지 처리](using-channel-flows.md)
+ [Amazon Chime SDK 메시징을 위한 지능형 채널 에이전트로 AppInstanceBots 사용](appinstance-bots.md)
+ [Amazon Chime SDK 메시징의 메시지 보존 관리](manage-retention.md)
+ [Amazon Chime SDK 메시징용 사용자 인터페이스 구성 요소](ui-components.md)
+ [클라이언트 라이브러리와 Amazon Chime SDK 메시징 통합](integrate-client-library.md)
+ [JavaScript와 함께 Amazon Chime SDK 메시징 사용](use-javascript.md)

# Amazon Chime SDK ID 네임스페이스로 마이그레이션
<a name="identity-namespace-migration"></a>

[Amazon Chime SDK Identity](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Identity.html) 네임스페이스는 AppInstances, AppInstanceUsers 등의 Amazon Chime SDK 자격 증명 리소스를 생성하고 관리하는 데 사용되는 API를 위한 전용 공간입니다. 네임스페이스를 사용하여 사용 가능한 모든 AWS 리전에서 Amazon Chime SDK 자격 증명 API 엔드포인트를 처리합니다. Amazon Chime SDK를 막 사용하기 시작한 경우 이 네임스페이스를 사용하세요. 리전에 대한 자세한 내용은 이 설명서의 [Amazon Chime SDK에 사용 가능한 AWS 리전](sdk-available-regions.md) 섹션을 참조하세요.

[Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 네임스페이스를 사용하는 기존 애플리케이션은 전용 네임스페이스로의 마이그레이션을 계획해야 합니다.

**Topics**
+ [마이그레이션하는 이유](#identity-migration-reasons)
+ [마이그레이션하기 전](#id-before-migrating)
+ [네임스페이스 간 차이점](#id-namespace-differences)

## 마이그레이션하는 이유
<a name="identity-migration-reasons"></a>

다음과 같은 이유로 [Amazon Chime SDK Identity](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Identity.html) 네임스페이스로 마이그레이션하는 것이 좋습니다.

**API 엔드포인트 선택**  
Amazon Chime SDK Identity 네임스페이스는 API 엔드포인트를 [사용할 수 있는 모든 리전](https://docs.aws.amazon.com/chime-sdk/latest/dg/sdk-available-regions.html)에서 API 엔드포인트를 사용할 수 있는 유일한 API 네임스페이스입니다. `us-east-1` 이외의 API 엔드포인트를 사용하려면 Amazon Chime SDK Identity 네임스페이스를 사용해야 합니다. 현재 엔드포인트에 대한 자세한 내용은 이 설명서의 [API 매핑](migrate-from-chm-namespace.md#name-end-map) 섹션을 참조하세요.

**업데이트되고 새로운 메시징 API**  
Amazon Chime SDK Identity 네임스페이스에서만 자격 증명 API를 추가하거나 업데이트합니다.

## 마이그레이션하기 전
<a name="id-before-migrating"></a>

마이그레이션하기 전에 네임스페이스 간 차이점에 유의해야 합니다. 다음 표에는 차이점과 그에 대한 설명이 나와 있습니다.


|  | Amazon Chime SDK Identity 네임스페이스 | Amazon Chime 네임스페이스 | 
| --- | --- | --- | 
| AWS SDK 네임스페이스 | ChimeSDKIdentity | Chime | 
| 리전 | 다양함 | us-east-1 전용 | 
| 서비스 보안 주체 | https://identity.chime.amazonaws.com | https://chime.amazonaws.com | 
| API | 자격 증명용 API만 | 자격 증명 및 Amazon Chime의 기타 부분을 위한 API | 
| 사용자 만료 | Available | 사용할 수 없음 | 
| 봇 | Available | 사용할 수 없음 | 

## 네임스페이스 간 차이점
<a name="id-namespace-differences"></a>

다음 섹션에서는 `Chime` 네임스페이스와 `ChimeSDKIdentity` 네임스페이스의 차이점을 설명합니다.

**AWS SDK 네임스페이스**  
Amazon Chime SDK 네임스페이스는 `Chime` 공식 이름을 사용합니다. Amazon Chime SDK Identity 네임스페이스는 `ChimeSDKIdentity` 공식 이름을 사용합니다. 이름의 정확한 형식은 플랫폼마다 다릅니다.

예를 들어 Node.js의 AWS SDK를 사용하여 자격 증명을 생성하는 경우 코드 줄을 사용하여 네임스페이스를 처리합니다.

```
const chimeIdentity = AWS.Chime();
```

`ChimeSDKIdentity` 네임스페이스로 마이그레이션하려면 이 코드 줄을 새 네임스페이스와 엔드포인트 리전으로 업데이트하세요.

```
const chimeIdentity = AWS.ChimeSDKIdentity({ region: "eu-central-1" });
```

**리전**  
[Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 네임스페이스는 `us-east-1` 리전의 API 엔드포인트만 다룹니다. [Amazon Chime SDK Identity](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Identity.html) 네임스페이스는 사용 가능한 모든 리전의 Amazon Chime SDK Identity API 엔드포인트를 처리할 수 있습니다. 엔드포인트 리전의 현재 목록은 이 안내서의 [Amazon Chime SDK에 사용 가능한 AWS 리전](sdk-available-regions.md) 섹션을 참조하세요.

**엔드포인트**  
[Amazon Chime SDK Identity](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Identity.html) 네임스페이스는 [Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 네임스페이스와는 다른 API 엔드포인트를 사용합니다.

ID 리소스를 생성하는 데 사용된 엔드포인트만 자격 증명 리소스를 업데이트하는 데 사용할 수 있습니다. 즉, `eu-central-1`의 엔드포인트를 통해 생성된 AppInstance는 `eu-central-1`을 통해서만 수정할 수 있습니다. 또한 Chime 네임스페이스를 통해 생성된 AppInstance를 `us-east-1`의 ChimeSDKIdentity 네임스페이스로 주소 지정하거나 AppInstance 및 AppInstanceUser 멤버가 생성된 리전이 아닌 다른 리전에서 채널을 생성할 수 없음을 의미합니다. 현재 엔드포인트에 대한 자세한 내용은 이 설명서의 [API 매핑](migrate-from-chm-namespace.md#name-end-map) 섹션을 참조하세요.

**서비스 보안 주체**  
[Amazon Chime SDK Identity](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Messaging.html) 네임스페이스는 새로운 서비스 주체인 `Identity.chime.amazonaws.com`을 사용합니다. 서비스에 대한 액세스 권한을 부여하는 SQS, SNS 또는 기타 IAM 액세스 정책이 있는 경우 새 서비스 보안 주체에 대한 액세스 권한을 부여하도록 해당 정책을 업데이트해야 합니다.

**API**  
[Amazon Chime SDK Identity](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Identity.html) 네임스페이스에는 메시징 리소스를 생성 및 관리하고 메시지를 전송 및 수신하기 위한 API만 포함되어 있습니다. [Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 네임스페이스에는 Amazon Chime 서비스의 다른 부분과 메시징을 위한 API가 포함되어 있습니다.

**사용자 만료**  
AppInstanceUsers 생성 시 만료 설정을 통해 임시 사용자를 생성할 수 있습니다. 예를 들어 대규모 브로드캐스트 기간 동안만 존재하는 채팅 사용자를 생성할 수 있습니다. Identity 네임스페이스만 AppInstanceUsers에 대한 만료 설정을 지원합니다.

**봇**  
[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_AppInstanceBot.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_AppInstanceBot.html) API를 사용하여 Amazon Lex V2에서 제공하는 채팅 봇을 애플리케이션에 추가할 수 있습니다. Identity 네임스페이스에서는 AppInstanceBots 봇만 사용할 수 있습니다. 봇에 대한 자세한 내용은 이 설명서의 [Amazon Chime SDK 메시징을 위한 지능형 채널 에이전트로 AppInstanceBots 사용](appinstance-bots.md) 섹션을 참조하세요.

**추가 API**  
Identity 네임스페이스에는 Chime 네임스페이스에는 없는 추가 API 목록이 점점 늘어나고 있습니다. Amazon Chime SDK로 시작하는 경우 ID 네임스페이스를 사용하여 모든 최신 기능에 액세스할 수 있습니다. 현재 API에 대한 자세한 내용은 Amazon Chime SDK API 참조**의 [Amazon Chime SDK Identity](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Identity.html)를 참조하세요.

# Amazon Chime SDK 메시징 네임스페이스로 마이그레이션
<a name="messaging-namespace-migration"></a>

[Amazon Chime SDK 메시징](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Messaging.html) 네임스페이스는 Amazon Chime SDK 메시징 리소스를 생성하고 관리하는 API를 위한 전용 공간입니다. 네임스페이스를 사용하여 사용 가능한 모든 AWS 리전에서 Amazon Chime SDK 메시징 API 엔드포인트를 주소 지정할 수 있습니다. Amazon Chime SDK를 막 사용하기 시작한 경우 이 네임스페이스를 사용하세요. 리전에 대한 자세한 내용은 이 설명서의 [Amazon Chime SDK에 사용 가능한 AWS 리전](sdk-available-regions.md) 섹션을 참조하세요.

[Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 네임스페이스를 사용하는 기존 애플리케이션은 전용 네임스페이스로의 마이그레이션을 계획해야 합니다.

**Topics**
+ [마이그레이션하는 이유](#migration-reasons)
+ [마이그레이션하기 전](#before-migrating)
+ [네임스페이스 간 차이점](#namespace-differences)

## 마이그레이션하는 이유
<a name="migration-reasons"></a>

다음과 같은 이유로 [Amazon Chime SDK 메시징](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Messaging.html) 네임스페이스로 마이그레이션하는 것이 좋습니다.

**API 엔드포인트 선택**  
Amazon Chime SDK 메시징 네임스페이스는 [사용 가능한 모든 리전](https://docs.aws.amazon.com/chime-sdk/latest/dg/sdk-available-regions.html)에서 API 엔드포인트를 사용할 수 있는 유일한 API 네임스페이스입니다. 미국 동부(버지니아 북부) 이외의 API 엔드포인트를 사용하려면 Amazon Chime SDK 메시징 네임스페이스를 사용해야 합니다.  
Amazon Chime SDK 메시징이 AWS 리전을 사용하는 방법에 대한 자세한 내용은이 안내서의 [사용 가능한 리전](https://docs.aws.amazon.com/chime-sdk/latest/dg/available-regions.html)을 참조하세요.

**업데이트되고 새로운 메시징 API**  
메시징 API는 Amazon Chime SDK 메시징 네임스페이스에서만 추가하거나 업데이트합니다.

## 마이그레이션하기 전
<a name="before-migrating"></a>

마이그레이션하기 전에 네임스페이스 간 차이점에 유의해야 합니다. 다음 표에는 차이점과 그에 대한 설명이 나와 있습니다.


|  | Amazon Chime SDK 메시징 네임스페이스 | Amazon Chime 네임스페이스 | 
| --- | --- | --- | 
| AWS SDK 네임스페이스 | ChimeSDKMessaging | Chime | 
| 리전 | 다양함 | 미국 동부(버지니아 북부)에만 해당 | 
| API | 메시징용 API 전용 | 메시징 및 Amazon Chime의 다른 부분을 위한 API | 
| 흐름 | Available | 사용할 수 없음 | 
| 엘라스틱 채널 | Available | 사용할 수 없음 | 

## 네임스페이스 간 차이점
<a name="namespace-differences"></a>

다음 섹션에서는 `Amazon Chime` 네임스페이스와 `Amazon Chime SDK Messaging` 네임스페이스의 차이점을 설명합니다.

**AWS SDK 네임스페이스**  
Amazon Chime SDK 네임스페이스는 `Chime` 공식 이름을 사용합니다. Amazon Chime SDK 메시징 네임스페이스는 `ChimeSDKMessaging` 공식 이름을 사용합니다. 이름의 정확한 형식은 플랫폼마다 다릅니다.

예를 들어 Node.js의 AWS SDK를 사용하여 메시징을 생성하는 경우 코드 줄을 사용하여 네임스페이스를 처리합니다.

```
const chimeMessaging = AWS.Chime();
```

Amazon Chime 메시징 SDK로 마이그레이션하려면 이 코드 줄을 새 네임스페이스와 엔드포인트 리전으로 업데이트하세요.

```
const chimeMessaging = AWS.ChimeSDKMessaging({ region: "Europe (Frankfurt)" });
```

**리전**  
[Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 네임스페이스는 `US East (N. Virginia)` 리전의 API 엔드포인트만 다룹니다. [Amazon Chime SDK 메시징](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Messaging.html) 네임스페이스는 사용 가능한 모든 리전의 Amazon Chime SDK 메시징 API 엔드포인트를 처리할 수 있습니다. 메시징 리전 최신 목록은 이 안내서의 [Amazon Chime SDK에 사용 가능한 AWS 리전](sdk-available-regions.md) 섹션을 참조하세요.

**엔드포인트**  
[Amazon Chime SDK 메시징](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Messaging.html) 네임스페이스는 [Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 네임스페이스와는 다른 API 엔드포인트를 사용합니다.

메시징 리소스를 생성하는 데 사용된 엔드포인트만 메시징 리소스를 수정하는 데 사용할 수 있습니다. 즉, `Europe (Frankfurt)`의 엔드포인트를 통해 만든 메시징 리소스는 `Europe (Frankfurt)`을 통해서만 수정할 수 있습니다. 즉, 유럽(프랑크푸르트)의 엔드포인트를 통해 생성된 채널은 유럽(프랑크푸르트)을 통해서만 수정할 수 있습니다. 또한 `Chime` 네임스페이스를 통해 생성된 채널은 미국 동부(버지니아 북부)의 `ChimeSDKMessaging` 네임스페이스로 주소를 지정할 수 없다는 의미이기도 합니다. 현재 엔드포인트에 대한 자세한 내용은 이 설명서의 [API 매핑](migrate-from-chm-namespace.md#name-end-map) 섹션을 참조하세요.

**서비스 보안 주체**  
[Amazon Chime SDK 메시징](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Messaging.html) 네임스페이스는 새로운 서비스 보안 주체인 `messaging.chime.amazonaws.com`를 사용합니다. 서비스에 대한 액세스 권한을 부여하는 SQS, SNS 또는 기타 IAM 액세스 정책이 있는 경우 새 서비스 보안 주체에 대한 액세스 권한을 부여하도록 해당 정책을 업데이트해야 합니다.

**API**  
[Amazon Chime SDK 메시징](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Messaging.html) 네임스페이스에는 메시징 리소스를 생성 및 관리하고 메시지를 전송 및 수신하기 위한 API만 포함되어 있습니다. [Amazon Chime](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime.html) 네임스페이스에는 Amazon Chime 서비스의 다른 부분과 메시징을 위한 API가 포함되어 있습니다.

**채널 흐름**  
채널 흐름을 통해 개발자는 메시지 채널의 구성원에게 전달되기 전에 진행 중인 메시지에 대한 비즈니스 로직을 실행할 수 있습니다. 예를 들어 주민등록번호, 전화번호와 같은 민감한 데이터 또는 욕설이 전달되기 전에 메시지에서 제거하는 흐름을 만들 수 있습니다. 이는 기업 커뮤니케이션 정책 또는 기타 커뮤니케이션 지침을 구현하는 데 도움이 될 수 있습니다.

또한 채널 흐름을 사용하여 설문 조사 응답을 집계한 후 결과를 참가자에게 다시 보내거나 SMS를 통해 메시지를 보내는 등의 기능을 수행할 수 있습니다.

채널 흐름은 `ChimeSDKMessaging` 네임스페이스에서만 사용할 수 있습니다. 이에 대한 자세한 내용은 이 설명서의 [채널 흐름을 사용하여 Amazon Chime SDK 메시징용 메시지 처리](using-channel-flows.md) 섹션을 참조하세요.

**엘라스틱 채널**  
엘라스틱 채널은 최대 백만 명의 채팅 사용자가 정의된 수의 하위 채널에서 자동으로 균형을 이루는 대규모 채팅 경험을 지원합니다. 엘라스틱 채널은 `ChimeSDKMessaging` 엔드포인트에서만 사용할 수 있습니다. 엘라스틱 채널에 대한 자세한 내용은 이 설명서의 [엘라스틱 채널을 사용하여 Amazon Chime SDK 회의에서 라이브 이벤트 주최](elastic-channels.md) 섹션을 참조하세요.

**추가 API**  
메시징 네임스페이스에는 `Chime` 네임스페이스에는 없는 추가 API 목록이 점점 늘어나고 있습니다. Amazon Chime SDK로 시작하는 경우 메시징 네임스페이스를 사용하여 모든 최신 기능에 액세스할 수 있습니다. 현재 API에 대한 자세한 내용은 Amazon Chime SDK API 참조**의 [Amazon Chime SDK 메시징](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Messaging.html) 섹션을 참조하세요.

# Amazon Chime SDK 메시징의 사전 조건 이해
<a name="messaging-prerequisites"></a>

Amazon Chime SDK 메시징을 사용하려면 다음이 필요합니다.
+ 프로그래밍 기능.
+  AWS 계정.
+ Amazon Chime SDK 메시징을 사용하여 애플리케이션의 IAM 역할을 구성할 수 있는 권한.

대부분의 경우 다음 사항도 필요합니다.
+ **클라이언트 애플리케이션** - 메시징 UI를 표시하고, Amazon Chime SDK를 사용하여 웹 소켓에 연결하고, 상태를 관리합니다.
+ **서버 애플리케이션** - ID 및 사용자를 관리합니다.

# Amazon Chime SDK 메시징 개념 이해
<a name="messaging-concepts"></a>

Amazon Chime SDK 메시징을 효과적으로 사용하려면 다음 용어와 개념을 이해해야 합니다.

**AppInstance**  
Amazon Chime SDK 메시징을 사용하려면 먼저 AppInstance를 생성해야 합니다. AppInstance에는 AppInstanceUsers 및 Channels가 포함됩니다. 일반적으로 애플리케이션용 AppInstance 하나를 생성하게 됩니다. AWS 계정에는 여러 AppInstances. AppInstance 수준에서 메시지 보존 및 스트리밍 구성과 같은 앱 수준 설정을 지정합니다. AppInstance는 `arn:aws:chime:region:aws_account_id:app-instance/app_instance_id` 형식의 고유한 ARN으로 식별됩니다.

**AppInstanceUser**  
AppInstanceUser는 메시지를 보내고, 채널을 만들고, 채널에 참여하는 등의 엔티티입니다. 일반적으로 앱 사용자에 대한 일대일 `AppInstanceUser` 매핑을 생성합니다. 또한 백엔드 서비스에 연결하기 위해 `AppInstanceUser`를 만들어 사용자가 메시지를 백엔드 서비스에서 보낸 것으로 식별할 수 있도록 할 수도 있습니다. AppInstanceUsers는 `arn:aws:chime:region:aws_account_id:app-instance/app_instance_id/user/app_instance_user_id`와 같은 ARN으로 식별됩니다. `app_instance_user_id`를 제어할 수 있으며, 애플리케이션에 이미 있는 ID를 재사용하는 것이 가장 좋습니다.

**채널**  
채널에 `AppInstanceUser`를 추가하면 해당 사용자가 멤버가 되어 메시지를 주고받을 수 있습니다. 채널은 모든 사용자가 자신을 멤버로 추가할 수 있는 공개 채널과 채널 중재자만 멤버를 추가할 수 있는 비공개 채널로 설정할 수 있습니다. 채널 멤버를 숨길 수도 있습니다. 숨겨진 멤버는 대화를 볼 수 있지만 메시지를 보낼 수는 없으며 채널 멤버십에 추가되지 않습니다.

**SubChannel**  
엘라스틱 채널의 구성원은 SubChannels라는 논리적 컨테이너로 구분됩니다. AppInstanceUser를 엘라스틱 채널에 추가하면 사용자는 하위 채널의 멤버가 되어 해당 특정 하위 채널에 대한 메시지를 보내고 받을 수 있습니다. 채널 멤버십 및 메시지는 하위 채널 수준이므로 한 하위 채널에서 멤버가 보낸 메시지를 다른 하위 채널의 멤버가 수신하지 않습니다. 멤버는 채널의 탄력적 특성을 지원하고 참여를 촉진하기 위해 여러 하위 채널로 이동됩니다.

**UserMessage**  
채널에 속한 `AppInstanceUser`SMS 누구나 사용자 메시지를 보내고 받을 수 있습니다. `AppInstanceUser`는 `STANDARD` 또는 `CONTROL` 메시지를 보낼 수 있습니다. `STANDARD` 메시지는 4KB의 데이터와 1KB의 메타데이터를 포함할 수 있습니다. `CONTROL` 메시지는 30바이트의 데이터만 포함할 수 있습니다. 메시지는 `PERSISTENT` 또는 `NON_PERSISTENT`일 수 있습니다. 채널 기록에서 `PERSISTENT` 메시지를 검색할 수 있습니다. `NON_PERSISTENT` 메시지는 현재 Amazon Chime SDK 메시징에 연결된 채널 멤버만 볼 수 있습니다.

**시스템 메시지**  
Amazon Chime SDK는 멤버가 채널에 참여하거나 탈퇴하는 등의 이벤트에 대한 응답으로 시스템 메시지를 생성합니다.

# Amazon Chime SDK 메시징 아키텍처 이해
<a name="messaging-architecture"></a>

Amazon Chime SDK 메시징을 서버 측 및 클라이언트 측 SDK로 사용할 수 있습니다. 서버 측 API는 `AppInstance`와 `AppInstanceUser`를 생성합니다. 다양한 후크와 구성을 사용하여 애플리케이션별 비즈니스 로직 및 검증을 추가할 수 있습니다. 이에 관한 정보는 [Amazon Chime SDK 메시징에서 메시징 데이터 스트리밍](streaming-export.md) 섹션을 참조하세요. 또한 서버 측 프로세스는 `AppInstanceUser`를 대신하여 API를 호출하거나 백엔드 프로세스를 나타내는 전용 `AppInstanceUser`를 제어할 수 있습니다.

`AppInstanceUser`로 표시되는 클라이언트 측 애플리케이션은 Amazon Chime SDK 메시징 API를 직접 호출할 수 있습니다. 클라이언트측 애플리케이션은 온라인 상태일 때 WebSocket 프로토콜을 사용하여 메시징 SDK에 연결합니다. 연결되면 자신이 멤버인 모든 채널에서 실시간 메시지를 수신합니다. 연결이 끊어져도 `AppInstanceUser`는 여전히 추가된 채널에 속하며, SDK의 HTTP 기반 API를 사용하여 해당 채널의 메시지 기록을 로드할 수 있습니다.

클라이언트 측 애플리케이션은 단일 `AppInstanceUser`로서 API를 호출할 수 있는 권한을 가집니다. IAM 자격 증명을 단일 로 범위를 지정하기 위해 `AppInstanceUser`클라이언트 측 애플리케이션은 AWS Cognito 자격 증명 풀 또는 소규모 자체 호스팅 백엔드 API를 통해 파라미터화된 IAM 역할을 수임합니다. 인증에 대한 자세한 내용은 [Amazon Chime SDK 메시징용 최종 사용자 클라이언트 애플리케이션 인증](auth-client-apps.md) 섹션을 참조하세요. 반면 서버 측 애플리케이션은 일반적으로 관리자 권한이 있는 사용자와 같은 단일 앱 인스턴스 사용자에게 권한을 부여하거나 모든 앱 인스턴스 사용자를 대신하여 API 호출을 수행할 수 있는 권한을 가집니다.

# Amazon Chime SDK 메시지 유형 이해
<a name="msg-types"></a>

메시지는 채널을 통해 전송합니다. `STANDARD`, `CONTROL` 또는 `SYSTEM` 메시지를 보낼 수 있습니다.
+ `STANDARD` 메시지의 크기는 최대 4KB이며 메타데이터를 포함할 수 있습니다. 메타데이터는 임의적이며 첨부 파일 링크를 포함하는 등 다양한 방법으로 사용할 수 있습니다.
+ `CONTROL` 메시지는 30바이트로 제한되며 메타데이터는 포함되지 않습니다.
+ `STANDARD` 및 `CONTROL` 메시지는 지속적이거나 비지속적일 수 있습니다. 지속적 메시지는 채널 기록에 보존되며 `ListChannelMessages` API 호출을 사용하여 볼 수 있습니다. 비지속적 메시지는 WebSocket을 통해 연결된 `AppInstanceUser`에게 전송됩니다.
+ Amazon Chime SDK는 멤버가 채널에 가입하거나 채널에서 나가는 등의 이벤트에 대해 자동화된 `SYSTEM` 메시지를 전송합니다.

# Amazon Chime SDK 메시징 시작하기
<a name="getting-started"></a>

이 섹션의 주제에서는 Amazon Chime SDK 메시징 애플리케이션 빌드를 시작하는 방법을 설명합니다.

**Topics**
+ [Amazon Chime SDK 메시징용 AppInstance 생성](create-app-instance.md)
+ [Amazon Chime SDK 메시징용 백엔드 서비스에서 SDK 직접 호출](call-from-backend.md)
+ [Amazon Chime SDK 메시징용 최종 사용자 클라이언트 애플리케이션 인증](auth-client-apps.md)
+ [Amazon Chime SDK 메시징용 채널 생성](creating-channels.md)
+ [Amazon Chime SDK 메시징에서 메시지 보내기](send-messages.md)
+ [Amazon Chime SDK 메시징에서 ExpirationSettings 사용](expiration.md)
+ [WebSockets를 사용하여 Amazon Chime SDK 메시징에서 메시지 수신](websockets.md)
+ [Amazon Chime SDK 메시징에서 첨부 파일 구성](configure-attachments.md)

# Amazon Chime SDK 메시징용 AppInstance 생성
<a name="create-app-instance"></a>

Amazon Chime SDK 메시징을 사용하려면 먼저 AWS 계정`AppInstance`에서 Amazon Chime SDK를 생성해야 합니다.

**Topics**
+ [AppInstance 구축](#app-instance-steps)
+ [AppInstanceUser 생성](#create-app-instance-user)

## AppInstance 구축
<a name="app-instance-steps"></a>

**메시징을 위한 `AppInstance` 생성**

1. CLI에서 `aws chime-sdk-identity create-app-instance --name NameOfAppInstance.`를 실행합니다.

1. 응답 생성에서 `AppInstanceArn`, `arn:aws:chime:region: aws_account_id:app-instance/app_instance_id`에 주목합니다.

## AppInstanceUser 생성
<a name="create-app-instance-user"></a>

`AppInstance`를 생성했다면 해당 `AppInstance`에 `AppInstanceUser`를 생성합니다. 일반적으로 사용자가 앱을 처음 등록하거나 로그인할 때 이 작업을 수행합니다. 백엔드 서비스를 대신하는 `AppInstanceUser`를 만들 수도 있습니다.

다음 예시에서는 백엔드 `AppInstanceUser`를 생성하는 방법을 보여 줍니다.

```
aws chime-sdk-identity create-app-instance-user \
    --app-instance-arn "app_instance_arn" \
    --app-instance-user-id "back-end-worker" \
    --name "back-end-worker"
```

응답 생성에서 `AppInstanceUserArn`를 주목하세요. `arn:aws:chime:region: aws_account_id:app-instance/app_instance_id/user/app_instance_user_id` 형식입니다. 이 예시에서는 `app_instance_user_id`가 ‘백엔드 작업자’입니다.

**참고**  
가장 좋은 방법은 클라이언트 애플리케이션에 대한 `AppInstanceUser`를 만들 때 `AppInstanceUserId`가 해당 사용자의 기존 고유 ID(예: 자격 증명 공급자의 `sub`)와 일치하도록 하는 것입니다. 이름은 메시지 발신자와 같은 일부 API 엔티티에 첨부되는 선택적 자리 표시자입니다. 이를 통해 메시지 발신자로 연결된 `AppInstanceUser` ARN에서 조회할 필요 없이 한 곳에서 사용자의 표시 이름을 제어할 수 있습니다.

# Amazon Chime SDK 메시징용 백엔드 서비스에서 SDK 직접 호출
<a name="call-from-backend"></a>

백엔드 서비스를 대표하는 사용자를 생성하고 나면 채널을 만들고, 해당 채널로 메시지를 보내고, 해당 채널에서 메시지를 읽습니다.

다음 CLI 명령을 실행해 공개 채널을 생성합니다.

```
aws chime-sdk-messaging create-channel \
    --chime-bearer "app_instance_user_arn" \
    --app-instance-arn "app_instance_arn" \
    --name "firstChannel"
```

이 명령은 `arn:aws:chime:region:aws_account_id:app-instance/app_instance_id/channel/channel_id.` 형식으로 ARN을 생성합니다.

**Topics**
+ [백엔드 서비스에 대한 IAM 인증 작동 방식](#how-iam-works)
+ [암시적 API 권한 부여 이해](#api-implicit-auth)
+ [채널 메시지 전송 및 나열](#send-list-msgs)

## 백엔드 서비스에 대한 IAM 인증 작동 방식
<a name="how-iam-works"></a>

이전 섹션의 CLI 명령에서 `chime-bearer` 파라미터에 주목하세요. 이 파라미터는 채널 및 메시지와 같은 리소스를 만들거나 이 리소스와 상호 작용하는 사용자를 식별합니다. `CreateAppInstance`와 같이 개발자만 호출할 수 있는 API를 제외한 거의 모든 Amazon Chime SDK 메시징 API는 `chime-bearer`를 파라미터로 사용합니다.

Amazon Chime SDK 메시징 API에 대한 IAM 권한에는 `chime-bearer` 파라미터와 일치하는 `app-instance-user-arn `이 필요합니다. API에 따라 추가 ARN(일반적으로 채널 ARN)이 필요할 수 있습니다. 위의 예와 같은 백엔드 서비스의 경우 이는 다음 예와 같은 IAM 정책으로 이어집니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": [
            "chime:SendChannelMessage",
            "chime:ListChannelMessages",
            "chime:CreateChannelMembership",
            "chime:ListChannelMemberships",
            "chime:DeleteChannelMembership",
            "chime:CreateChannel",
            "chime:ListChannels",
            "chime:DeleteChannel"
        ],
        "Resource": [
            "arn:aws:chime:us-east-1:123456789012:app-instance/app_instance_id/user/back-end-worker",
            "arn:aws:chime:us-east-1:123456789012:app-instance/app_instance_id/channel/*"
        ]
    }
}
```

------

`AppInstanceUser` 섹션에서 `Resource` ARN과 채널 ARN을 주목하세요. 이 IAM 정책 예시에서는 백엔드 서비스에 ID가 '백엔드 작업자'인 사용자로서 API를 호출할 수 있는 권한을 부여합니다. 백엔드 서비스에서 앱을 사용하는 사람들을 위해 호출할 수 있도록 하려면 `app_instance_user_arn`을 `arn:aws:chime:region:aws_account_id:app-instance/app_instance_id/user/*`로 변경하세요.

## 암시적 API 권한 부여 이해
<a name="api-implicit-auth"></a>

Amazon Chime SDK 메시징 API에는 IAM 정책 외에도 암시적 권한이 있습니다. 예를 들어, `AppInstanceUser`는 사용자가 속한 채널에서만 메시지를 보내거나 채널 멤버십을 나열할 수 있습니다. 이에 대한 한 가지 예외는 `AppInstanceAdmin`으로 승격된 `AppInstanceUser`입니다. 기본적으로 관리자는 앱의 모든 채널에 대한 권한을 가집니다. 대부분의 사용 사례에서는 중요한 비즈니스 로직이 포함된 백엔드 서비스에만 이 권한이 필요합니다.

다음 CLI 명령은 백엔드 사용자를 관리자로 승격시킵니다.

```
aws chime-sdk-identity create-app-instance-admin \
    --app-instance-admin-arn "app_instance_user_arn" \
    --app-instance-arn "app_instance_arn"
```

## 채널 메시지 전송 및 나열
<a name="send-list-msgs"></a>

다음 CLI 명령은 채널 메시지를 보냅니다.

```
aws chime-sdk-messaging send-channel-message \
    --chime-bearer "app_instance_user_arn" \
    --channel-arn "channel_arn" \
    --content "hello world" \
    --type STANDARD \
    --persistence PERSISTENT
```

다음 CLI 명령은 채널 메시지를 역순으로 나열합니다.
+ `aws chime list-channel-messages`
+ `aws chime-sdk-messaging list-channel-messages`

```
aws chime-sdk-messaging list-channel-messages \
    --chime-bearer "app_instance_user_arn" \
    --channel-arn "channel_arn"
```

# Amazon Chime SDK 메시징용 최종 사용자 클라이언트 애플리케이션 인증
<a name="auth-client-apps"></a>

최종 사용자 클라이언트 애플리케이션에서 Amazon Chime SDK 메시징을 실행할 수도 있습니다. [Amazon Chime SDK 메시징용 백엔드 서비스에서 SDK 직접 호출](call-from-backend.md) 섹션에서는 create-channel, send-channel-message, list-channel-messages와 같은 API 호출 방법을 설명합니다. 브라우저 및 모바일 애플리케이션과 같은 최종 사용자 클라이언트 애플리케이션은 이와 동일한 API 호출을 수행합니다. 또한 클라이언트 애플리케이션은 웹소켓을 통해 연결하여 자신이 멤버로 있는 채널의 메시지 및 이벤트에 대한 실시간 업데이트를 받을 수도 있습니다. 이 섹션에서는 특정 앱 인스턴스 사용자 범위가 지정된 클라이언트 애플리케이션에 IAM 자격 증명을 제공하는 방법을 다룹니다. 최종 사용자에게 이러한 자격 증명이 있으면 백엔드 서비스에서 [Amazon Chime SDK 메시징용 백엔드 서비스에서 SDK 직접 호출](call-from-backend.md) 섹션에 나와 있는API 호출을 수행할 수 있습니다. 클라이언트 애플리케이션의 전체 데모를 보려면 [https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat](https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat)을 참조하세요. 클라이언트 앱이 속한 채널로부터 실시간 메시지를 수신하는 방법에 대한 자세한 내용은 [WebSockets를 사용하여 Amazon Chime SDK 메시징에서 메시지 수신](websockets.md) 섹션을 참조하세요.

## 최종 사용자에게 IAM 자격 증명 제공
<a name="connect-id-provider"></a>

Amazon Chime SDK 메시징은 기본적으로 AWS Identity and Access Management(IAM) 정책과 통합되어 수신 요청을 인증합니다. IAM 정책은 개별 사용자가 수행할 수 있는 작업을 정의합니다. 사용 사례에 맞게 범위가 축소된 제한된 자격 증명을 제공하도록 IAM 정책을 만들 수 있습니다. Amazon Chime SDK 메시징 사용자를 위한 정책을 생성하는 방법에 대한 자세한 내용은 [Amazon Chime SDK 메시징의 IAM 역할 예시](iam-roles.md) 섹션을 참조하세요.

기존 ID 공급자가 있는 경우 다음과 같은 옵션을 사용하여 기존 ID를 Amazon Chime SDK 메시징과 통합할 수 있습니다.
+ 기존 자격 증명 공급자를 사용하여 사용자를 인증한 다음 인증 서비스를 AWS Security Token Service(STS)와 통합하여 클라이언트에 대한 자체 자격 증명 벤딩 서비스를 생성할 수 있습니다. STS는 IAM 역할을 맡기 위한 API를 제공합니다.
+ 이미 SAML 또는 OpenID 호환 자격 증명 공급자가 있는 경우, AWS STS [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) 및 [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)에 대한 호출을 추상화하는 Amazon [Cognito ID 풀](https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html)을 사용하는 것이 좋습니다. Amazon Cognito는 OpenID, SAML, Sign with Amazon, Sign with Apple과 같은 퍼블릭 자격 증명 공급자를 통합합니다.

자격 증명 공급자가 없는 경우 Amazon Cognito 사용자 풀을 시작할 수 있습니다. Amazon Chime SDK 메시징 기능과 함께 Amazon Cognito를 사용하는 방법에 대한 예는 [Amazon Chime SDK 메시징을 사용하여 애플리케이션에 채팅 기능 구축](https://aws.amazon.com/blogs/business-productivity/build-chat-features-into-your-application-with-amazon-chime-sdk-messaging/)을 참조하세요.

또는 [AWS STS](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html)를 사용하여 자체 보안 인증 벤딩 서비스를 만들거나 자체 ID 공급자를 구축할 수 있습니다.

**보안 인증 벤딩을 위해 STS 사용**  
ActiveDirectory LDAP와 같은 IDP가 이미 있고 사용자 지정 자격 증명 벤딩 서비스를 구현하거나 인증되지 않은 회의 참석자에게 채팅 액세스 권한을 부여하려는 경우 [AWS STS AssumeRole API](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)를 사용할 수 있습니다. 이를 위해서는 먼저 Amazon Chime SDK 메시징 SDK 역할을 생성합니다. 역할을 만드는 방법에 대한 자세한 내용은 [역할을 생성하여 IAM 사용자에게 권한 위임](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)을 참조하세요.

IAM 역할은 다음과 같이 애플리케이션에서 사용할 Amazon Chime SDK 메시징 작업에 대한 권한을 갖게 됩니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "chime:GetMessagingSessionEndpoint"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "chime:SendChannelMessage",
                "chime:ListChannelMessages",
                "chime:CreateChannelMembership",
                "chime:ListChannelMemberships",
                "chime:DeleteChannelMembership",
                "chime:CreateChannelModerator",
                "chime:ListChannelModerators",
                "chime:DescribeChannelModerator",
                "chime:CreateChannel",
                "chime:DescribeChannel",
                "chime:ListChannels",
                "chime:DeleteChannel",
                "chime:RedactChannelMessage",
                "chime:UpdateChannelMessage",
                "chime:Connect",
                "chime:ListChannelBans",
                "chime:CreateChannelBan",
                "chime:DeleteChannelBan",
                "chime:ListChannelMembershipsForAppInstanceUser",
                "chime:AssociateChannelFlow",
                "chime:DisassociateChannelFlow",
                "chime:GetChannelMessageStatus"
            ],
            "Resource": [
            "arn:aws:chime:us-east-1:123456789012:app-instance/app_instance_id/user/my_applications_user_id",
            "arn:aws:chime:us-east-1:123456789012:app-instance/app_instance_id/channel/*"
    ]
        }
    ]
}
```

------

이 예시에서는 이 역할을 *ChimeMessagingSampleAppUserRole*이라고 부릅니다.

사용자 ARN 리소스의 *ChimeMessagingSampleAppUserRole* 정책 `${my_application_user_id}`에 있는 세션 태그를 주목하세요. 이 세션 태그는 [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 직접 호출에서 파라미터화되어 반환되는 자격 증명을 단일 사용자의 권한으로 제한합니다.

[https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 및 [https://docs.aws.amazon.com/STS/latest/APIReference/API_TagSesstion.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_TagSesstion.html) API 직접 호출은 IAM 사용자와 같이 이미 인증된 IAM 엔티티를 사용하여 호출됩니다. [AWS Lambda 실행 역할](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)과 같은 다른 IAM 역할로도 API를 직접 호출할 수 있습니다. 해당 IAM ID에는 *ChimeMessagingSampleAppUserRole*에서 `AssumeRole` 및 `TagSession`을 호출할 수 있는 권한이 있어야 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
         {
            "Effect": "Allow",
            "Action": [ 
                "sts:AssumeRole",
                "sts:TagSession"
                ],
            "Resource": "arn:aws:iam::123456789012:role/ChimeMessagingSampleAppUserRole"
        }
    ]
}
```

------

 이 예시에서는 이 역할을 *ChimeSampleAppServerRole*이라고 부릅니다.

`ChimeMessagingSampleAppServerRole`에서 [STS AssumeRole API](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)를 직접 호출할 수 있도록 허용하는 신뢰 정책을 사용하여 `ChimeMessagingSampleAppUserRole`을 설정해야 합니다. IAM 역할과 함께 신뢰 정책을 사용하는 방법에 대한 자세한 내용은 [IAM 역할로 신뢰 정책을 사용하는 방법](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/)을 참조하세요. AWS IAM 역할 콘솔을 사용하여이 정책을에 추가할 수 있습니다`ChimeMessagingSampleAppUserRole`. 다음 예시는 일반적인 신뢰 관계를 보여줍니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/ChimeMessagingSampleAppServerRole"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

 샘플 배포에서 [Amazon EC2](https://aws.amazon.com/ec2/) 인스턴스 또는 AWS Lambda 는를 사용하여 시작됩니다`ChimeMessagingSampleAppServerRole`. 그러면 서버가

1. 클라이언트의 자격 증명 수신 요청에 대해 애플리케이션별 권한 부여를 수행합니다.

1. `${aws:PrincipalTag/my_applications_user_id}`를 파라미터화하는 태그를 사용하여 `ChimeMessagingSampleAppUserRole`에서 STS `AssumeRole`을 호출합니다.

1. `AssumeRole` 호출에서 반환된 자격 증명을 사용자에게 전달합니다.

다음 예시는 2단계의 역할을 가정하기 위한 CLI 명령을 보여줍니다.

`aws sts assume-role --role-arn arn:aws:iam::my_aws_account_id:role/ChimeMessagingSampleAppUserRole --role-session-name demo --tags Key=my_applications_user_id,Value=123456789 ` 

# Amazon Chime SDK 메시징용 채널 생성
<a name="creating-channels"></a>

본인 최종 사용자가 채널을 생성할 수 있습니다. 채널을 만든 후에는 본인 또는 최종 사용자도 채널에 구성원을 추가해야 합니다. 채널 생성을 위한 샘플 코드는 [GitHub의 샘플 애플리케이션](https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat)에서 이용할 수 있습니다.

채널 생성 및 구성원 추가에 대한 자세한 내용은 다음을 참조하세요.
+  [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html) 
+  [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html) 

# Amazon Chime SDK 메시징에서 메시지 보내기
<a name="send-messages"></a>

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html) API를 사용하여 메시지를 전송할 수 있습니다. 샘플 코드는 [GitHub의 샘플 애플리케이션](https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat)에서 이용할 수 있습니다.

# Amazon Chime SDK 메시징에서 ExpirationSettings 사용
<a name="expiration"></a>

`AppInstanceUser` 또는 `Channel`을 만들 때 `ExpirationSettings`를 사용하여 해당 리소스가 자동으로 삭제되도록 구성할 수 있습니다. `ExpirationSettings`는 스토리지 비용을 절감하고 리소스 한도 초과 문제를 방지하는 데 도움이 됩니다. 예를 들어 7일이 지난 후 사용하지 않는 채널을 삭제하거나 테스트 목적으로만 호출된 `AppInstanceUser`를 삭제할 수 있습니다.

`AppInstanceUser`의 경우 사용자 생성 시간을 기준으로 만료 기간을 지정합니다. `Channel`의 경우 채널 생성 시간 또는 마지막 메시지 시간을 기준으로 만료 기간을 지정합니다. 후자의 경우 메시지 활동을 사용하여 자동 삭제를 사용자 지정할 수 있습니다.

**중요**  
리소스가 만료된 후 곧바로 `ExpirationSettings`가 백그라운드 프로세스를 시작하여 해당 리소스를 삭제합니다. 프로세스는 일반적으로 6시간이 소요되지만 이 시간은 달라질 수 있습니다.  
아직 삭제되지 않은 만료된 `AppInstanceUsers` 및 `Channels`은 여전히 유효하고 활성 상태로 표시됩니다. 해당 항목들의 만료 설정을 업데이트하거나 제거할 수 있으며 시스템이 변경 사항을 반영합니다.

**Topics**
+ [ExpirationSettings 구성하기](#create-expiration)
+ [만료된 리소스 삭제에 대한AWS CloudTrail 이벤트](#ct-events)

## ExpirationSettings 구성하기
<a name="create-expiration"></a>

다음 섹션에서는 `Channel` 또는 `ExpirationSettings`의 `AppInstanceUser`을 구성하는 방법에 대해 설명합니다.

### 리소스 생성 시 ExpirationSettings 구성
<a name="configure-on-create"></a>

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateAppInstanceUser.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateAppInstanceUser.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html) API를 실행할 때 `ExpirationSettings`를 구성할 수 있습니다. `ExpirationSettings` 파라미터를 설정하는 경우 다음 IAM 권한을 부여해야 합니다.
+ `AppInstanceUser`를 생성할 때 `chime:PutAppInstanceUserExpirationSettings`
+ `Channel`을 생성할 때 `chime:PutChannelExpirationSettings`.

다음 예제에서는 AWS CLI를 사용하여 하루 후에 만료`AppInstanceUser`되는를 생성합니다.

```
aws chime-sdk-identity create-app-instance-user \
--app-instance-arn "app_instance_arn" \
--app-instance-user-id "backend-worker" \
--name "backend-worker" \
--expiration-settings '{
            "ExpirationDays": 1,
            "ExpirationCriterion": "CREATED_TIMESTAMP"
        }'
```

다음 예제에서는 AWS CLI를 사용하여 메시지를 마지막으로 수신한 후 하루 후에 만료`Channel`되는를 생성합니다.

```
aws chime-sdk-messaging create-channel \
--chime-bearer "app_instance_user_arn" \
--app-instance-arn "app_instance_arn" \
--name "firstChannel" \
--expiration-settings '{
            "ExpirationDays": 1,
            "ExpirationCriterion": "LAST_MESSAGE_TIMESTAMP"
        }'
```

### PUT API를 사용하여 ExpirationSettings 구성하기
<a name="configure-on-put"></a>

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_PutAppInstanceUserExpirationSettings.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_PutAppInstanceUserExpirationSettings.html) 및 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutChannelExpirationSettings.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutChannelExpirationSettings.html) API를 사용하여 `ExpirationSettings`를 생성, 업데이트 및 삭제할 수도 있습니다.

다음 예제에서는 AWS CLI를 사용하여의 `AppInstanceUser`를 업데이트하는 방법을 보여줍니다`ExpirationSettings`.

```
aws chime-sdk-identity put-app-instance-user-expiration-settings \
--app-instance-user-arn "app_instance_user_arn" \
--expiration-settings '{
            "ExpirationDays": 30,
            "ExpirationCriterion": "CREATED_TIMESTAMP"
        }'
```

다음 예제에서는 AWS CLI를 사용하여 채널의를 삭제하는 방법을 보여줍니다`ExpirationSettings`.

```
aws chime-sdk-messaging put-channel-expiration-settings \
--chime-bearer "app_instance_user_arn" \
--channel-arn "channel_arn"
```

## 만료된 리소스 삭제에 대한AWS CloudTrail 이벤트
<a name="ct-events"></a>

시스템에서 만료된 리소스를 삭제하면 `ExpireAppInstanceUser` 또는 `ExpireChannel` 이벤트가 AWS CloudTrail로 전송됩니다. 이벤트 유형은 삭제된 자산의 유형에 따라 달라집니다.

다음 예시는 `AppInstanceUser` 이벤트를 보여줍니다.

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "accountId": "123456789012",
        "invokedBy": "chime.amazonaws.com"
    },
    "eventTime": "2023-03-15T00:00:00Z",
    "eventSource": "chime.amazonaws.com",
    "eventName": "ExpireAppInstanceUser",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "chime.amazonaws.com",
    "userAgent": "chime.amazonaws.com",
    "requestParameters": null,
    "responseElements": null,
    "eventID": "12345678-1234-1234-1234-123456789012",
    "readOnly": false,
    "resources": [
        {
            "accountId": "123456789012",
            "type": "AWS::Chime::AppInstanceUser",
            "ARN": "arn:aws:chime:us-east-1:123456789012:app-instance/app-instance-id/user/user-id"
        }
    ],
    "eventType": "AwsServiceEvent",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "serviceEventDetails": {
        "reason": "AppInstanceUser deleted due to expiration settings."
    },
    "eventCategory": "Management"
}
```

# WebSockets를 사용하여 Amazon Chime SDK 메시징에서 메시지 수신
<a name="websockets"></a>

 [Amazon Chime JS SDK](https://github.com/aws/amazon-chime-sdk-js)로 WebSocket을 사용하여 메시지를 수신하거나 원하는 WebSocket 클라이언트 라이브러리를 사용할 수 있습니다.

WebSocket 사용을 시작하려면 다음 항목을 나열된 순서대로 따르세요.

**Topics**
+ [IAM 정책 정의](#define-iam-policy)
+ [엔드포인트 검색](#retrieve-endpoint)
+ [연결 설정하기](#connect-api)
+ [미리 가져오기를 사용하여 채널 세부 정보 전달하기](#prefetch)
+ [이벤트 처리](#process-events)

## IAM 정책 정의
<a name="define-iam-policy"></a>

시작하려면 WebSocket 연결을 설정할 수 있는 권한을 부여하는 IAM 정책을 정의합니다. 다음 예제 정책은 WebSocket 연결을 설정할 수 있는 `AppInstanceUser` 권한을 제공합니다.

```
"Version": "2012-10-17",		 	 	 
"Statement": [
  {
    "Effect": "Allow",
    "Action: [
      "chime:Connect"
    ],
    "Resource": [
      "arn:aws:chime:region:{aws_account_id}:app-instance/{app_instance_id}/user/{app_instance_user_id}"
    ]
 },
 {
    "Effect": "Allow",
    "Action: [
      "chime:GetMessagingSessionEndpoint"
    ],
    "Resource": [
      "*"
    ]
 }
 ]
}
```

## 엔드포인트 검색
<a name="retrieve-endpoint"></a>

다음 단계에서는 WebSocket 연결에 사용되는 엔드포인트를 검색하는 방법을 설명합니다.

1. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetMessagingSessionEndpoint.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetMessagingSessionEndpoint.html) API를 사용하여 WebSocket 엔드포인트를 검색합니다.

1. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetMessagingSessionEndpoint.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetMessagingSessionEndpoint.html) API에서 반환된 URL을 사용하여 서명 버전 4로 서명된 WebSocket URL을 구성합니다. 도움이 필요한 경우 [연결 설정하기](#connect-api) 섹션의 지침을 따르세요.
**참고**  
WebSocket URL의 형식은 다음과 같습니다. `id.region.ws-messaging.chime.aws` 

## 연결 설정하기
<a name="connect-api"></a>

 엔드포인트를 검색한 후에는 연결 API를 사용하여 Amazon Chime SDK 백엔드 서버에 대한 WebSocket 연결을 설정하고 `AppInstanceUser`에 대한 메시지를 수신합니다. 요청에 서명하려면 AWS 서명 버전 4를 사용해야 합니다. 요청에 서명하는 자세한 방법은 [서명 버전 4를 사용하여 AWS 요청에 서명](https://docs.aws.amazon.com/general/latest/gr/Signature Version 4_signing.html) 단원을 참조하세요.

**참고**  
엔드포인트를 검색하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetMessagingSessionEndpoint.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetMessagingSessionEndpoint.html) API를 간접 호출하면 됩니다. 선택한 WebSocket 클라이언트 라이브러리를 사용하여 엔드포인트에 연결할 수 있습니다.

**요청 구문**

```
GET /connect
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIARALLEXAMPLE%2F20201214%2Fregion%2Fchime%2Faws4_request
&X-Amz-Date=20201214T171359Z
&X-Amz-Expires=10
&X-Amz-SignedHeaders=host
&sessionId={sessionId}
&userArn={appInstanceUserArn}
&X-Amz-Signature=db75397d79583EXAMPLE
```

**URI 요청 파라미터**

모든 URI 요청 쿼리 파라미터는 URL로 인코딩되어야 합니다.

**X-Amz-Algorithm**

 AWS 서명 버전과 서명을 계산하는 데 사용한 알고리즘을 식별합니다. Amazon Chime SDK는 AWS 서명 버전 4 인증만 지원하므로, 이 항목의 값은 `AWS4-HMAC-SHA256`입니다.

**X-Amz-Credential**

이 파라미터는 액세스 키 ID 외에도 서명이 유효한 AWS 리전 및 서비스, 즉 범위를 제공합니다. 이 값은 서명 계산에 사용하는 범위와 일치해야 합니다. 이 파라미터의 값의 일반적인 형식은 다음과 같습니다.

`<yourAccessKeyId>/<date>/<awsRegion>/<awsService >/aws4_request`

예제:

`AKIAIOSFODNN7EXAMPLE/20201214/us-east-1/chime/aws4_request`

**X-Amz-Date**

날짜 및 시간 형식은 ISO 8601 표준을 따르고, `yyyyMMddTHHmmssZ` 형식을 사용해야 합니다. 예를 들어, **08/01/2020 15:32:41.982-700**를 협정 세계시(UTC)로 변환하고 이를 `20200801T083241Z`로 제출해야 합니다.

**X-Amz-Signed-Headers**

서명 계산에 사용한 헤더를 나열합니다. 서명 계산에는 다음 헤더가 필요합니다.
+ HTTP 호스트 헤더.
+ 요청에 추가하려는 모든 x-amz-\$1 헤더.

**참고**  
보안을 강화하려면 요청에 포함하려는 모든 요청 헤더에 서명해야 합니다.

**X-Amz-Signatures**

요청을 인증하기 위한 서명을 제공합니다. 이 서명은 Amazon Chime SDK가 계산하는 서명과 일치해야 합니다. 그렇지 않으면 Amazon Chime SDK는 요청을 거부합니다. 예를 들어 `733255ef022bec3f2a8701cd61d4b371f3f28c9f19EXAMPLEd48d5193d7`입니다.

**X-Amz-Security-Token**

Security Token Service에서 가져온 자격 증명 정보를 사용하는 경우의 선택적 자격 증명 파라미터입니다. 서비스에 대한 자세한 정보는 [https://docs.aws.amazon.com/STS/latest/APIReference/](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html)를 참조하세요.

**SessionId**

설정 중인 WebSocket 연결의 고유 ID를 나타냅니다.

**UserArn**

연결을 설정하려는 `AppInstanceUser`의 ID를 나타냅니다. 값은 `AppInstanceUser`의 ARN이어야 합니다. 예: `arn:aws:chime:us%2Deast%2D1:123456789012:app%2Dinstance/694d2099%2Dcb1e%2D463e%2D9d64%2D697ff5b8950e/user/johndoe` 

## 미리 가져오기를 사용하여 채널 세부 정보 전달하기
<a name="prefetch"></a>

WebSocket 연결을 설정할 때 쿼리 파라미터에 `prefetch-on=connect`를 지정하여 `CHANNEL_DETAILS` 이벤트를 전달할 수 있습니다. 미리 가져오기 기능은 Connect API와 함께 제공되며, 이 기능을 통해 사용자는 추가 API 호출 없이 풍부한 채팅 보기를 볼 수 있습니다. 사용자는 다음을 할 수 있습니다.
+ 마지막 채널 메시지와 타임스탬프를 미리 볼 수 있습니다.
+ 채널 멤버를 볼 수 있습니다.
+ 채널의 읽지 않음 마커를 볼 수 있습니다.

사용자가 지정된 미리 가져오기 파라미터를 사용하여 연결하면 사용자는 연결이 설정되었음을 나타내는 세션 설정 이벤트를 수신합니다. 그러면 사용자는 최대 50개의 `CHANNEL_DETAILS` 이벤트를 수신합니다. 사용자의 채널이 50개 미만인 경우 연결 API는 `CHANNEL_DETAILS` 이벤트를 통해 모든 채널을 미리 가져오기합니다. 사용자의 채널이 50개 이상인 경우 API는 읽지 않은 메시지가 포함된 상위 50개 채널과 최신 `LastMessageTimestamp` 값을 미리 가져오기합니다. `CHANNEL_DETAILS` 이벤트는 무작위 순서로 도착하며 50개 채널 모두에 대한 이벤트를 수신합니다.

또한 미리 가져오기는 `ChannelMessages` 및 `ChannelMemberships`에 대해 다음을 반환합니다.
+ **ChannelMessages** - [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelMessageSummary.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelMessageSummary.html) 객체의 목록으로, `CreatedTimestamp`를 기준으로 내림차순 정렬됩니다. 사용자에게 표시된 최근 20개의 메시지만 포함됩니다. 채널에 현재 사용자에게 표시되지 않는 대상 메시지가 있는 경우에는 20개 미만의 메시지가 반환될 수 있습니다. 더 많은 메시지가 있으면 `ChannelMessagesHasMore` 부울이 설정됩니다. 소프트 제한, AWS 계정 수준에서 조정 가능.
+ **ChannelMemberships** – [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelMembershipSummary.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelMembershipSummary.html) 객체의 목록입니다. 최대 30명의 채널 멤버를 포함합니다. 소프트 제한, AWS 계정 수준에서 조정 가능.

이 예시에서는 `prefetch-on=connect`를 사용하는 방법을 보여 줍니다.

```
GET /connect
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIARALLEXAMPLE%2F20201214%2Fregion%2Fchime%2Faws4_request
&X-Amz-Date=20201214T171359Z
&X-Amz-Expires=10
&X-Amz-SignedHeaders=host
&sessionId=sessionId
&prefetch-on=connect
&userArn=appInstanceUserArn
&X-Amz-Signature=db75397d79583EXAMPLE
```

이 예시는 한 채널에 대한 응답을 보여 줍니다. 50개 채널 모두에 대한 응답을 받게 됩니다.

```
{
   "Headers": { 
        "x-amz-chime-event-type": "CHANNEL_DETAILS", 
        "x-amz-chime-message-type": "SYSTEM" 
        },
   "Payload": JSON.stringify"({
        Channel: [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelSummary.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelSummary.html) 
        ChannelMessages: List of [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelMessageSummary.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelMessageSummary.html)  
        ChannelMemberships: List of [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelMembershipSummary.html ](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelMembershipSummary.html )
        ReadMarkerTimestamp: Timestamp 
        ChannelMessagesHasMore: Boolean 
    })
}
```

## 이벤트 처리
<a name="process-events"></a>

연결을 설정한 후 `AppInstanceUser`가 메시지를 수신하려면 채널에 메시지를 추가해야 합니다. 이를 위해서는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html) API를 사용합니다.

**참고**  
`AppInstanceUser`는 항상 자신이 속한 모든 채널에 대한 메시지를 수신합니다. `AppInstance`가 연결을 끊으면 메시징이 중지됩니다.

`AppInstanceAdmin`과 `ChannelModerator`는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html) API를 사용하여 채널에 대한 메시지를 명시적으로 추가하지 않는 한 메시지를 수신하지 않습니다.

다음 항목에서는 이벤트 처리 방법을 설명합니다.

**Topics**
+ [메시지 구조 이해](#message-structures)
+ [연결 끊김 처리](#handle-disconnects)

### 메시지 구조 이해
<a name="message-structures"></a>

수신되는 모든 WebSocket 메시지는 다음 형식을 따릅니다.

```
{
   "Headers": {"key": "value"},
   "Payload": "{\"key\": \"value\"}"
}
```

**헤더**  
Amazon Chime SDK 메시징은 다음 헤더 키를 사용합니다.
+ `x-amz-chime-event-type`
+ `x-amz-chime-message-type`
+ `x-amz-chime-event-reason`

다음 섹션에서는 헤더의 가능한 값과 페이로드를 나열하고 설명합니다.

**페이로드**  
웹소켓 메시지는 JSON 문자열을 반환합니다. JSON 문자열의 구조는 `x-amz-event-type` 헤더에 따라 달라집니다. 다음 표에는 가능한 `x-amz-chime-event-type` 값과 페이로드가 나열되어 있습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/websockets.html)

**x-amz-chime-message-type**  
다음 표에는 `x-amz-chime-message-type` 메시지 유형이 나와 있습니다.


| 메시지 유형 | 설명 | 
| --- | --- | 
| `STANDARD` | 웹 소켓이 STANDARD 채널 메시지를 수신할 때 전송됩니다. | 
| `CONTROL` | 웹소켓이 CONTROL 채널 메시지를 수신할 때 전송됩니다. | 
| `SYSTEM` | Amazon Chime SDK 메시징을 통해 전송되는 기타 모든 웹 소켓 메시지입니다. | 

**x-amz-chime-event-reason**  
특정 사용 사례에서 지원되는 선택적 헤더입니다. 헤더는 특정 이벤트가 수신된 이유에 대한 정보를 제공합니다.


| 이벤트 이유 | 설명 | 
| --- | --- | 
| subchannel\$1DELETED | 엘라스틱 채널 중재자가 수신한 `DELETE_CHANNEL_MEMBERSHIP` 이벤트입니다. 멤버십 밸런싱으로 자신이 속했던 하위 채널이 삭제된 이후에만 중재자가 볼 수 있습니다. | 

### 연결 끊김 처리
<a name="handle-disconnects"></a>

네트워크 연결이 변경되거나 자격 증명이 만료되면 WebSocket의 연결이 끊길 수 있습니다. WebSocket을 열면 Amazon Chime SDK가 메시징 클라이언트에 정기적인 핑을 전송하여 여전히 연결되어 있는지 확인합니다. 연결이 종료되면 클라이언트는 WebSocket 종료 코드를 수신합니다. 클라이언트는 종료 코드에 따라 재연결을 시도하거나 시도하지 않을 수 있습니다. 다음 표에는 클라이언트가 재연결에 사용할 수 있는 종료 코드가 나와 있습니다.

1000번대부터 4000번대의 클로저 코드의 경우 다음 메시지가 나타나는 경우에만 다시 연결하세요.


| 클로저 코드 | 재연결 가능 여부 | 이유 | 
| --- | --- | --- | 
| 1001 | 예 | 정상 종료 | 
| 1006 | 예 | 비정상적 종료 | 
| 1011 | 예 | 내부 서버 오류 | 
| 1012 | 예 | 서비스 재시작 | 
| 1013 | 예 | 나중에 다시 시도 | 
| 1014 | 예 | 서버가 게이트웨이 또는 프록시 역할을 하고 있으며 업스트림 서버로부터 잘못된 응답을 받았습니다. 이는 502 HTTP 상태 코드와 유사합니다. | 

4XXX 코드의 경우 다음 메시지가 나타나는 경우를 *제외하고* 항상 다시 연결하세요.


| 클로저 코드 | 재연결 가능 여부 | 이유 | 
| --- | --- | --- | 
| 4002 | 아니요 | 클라이언트가 시작됨 | 
| 4003 | 아니요 | 금지됨 | 
| 4401 | 아니요 | 인증되지 않음 | 

애플리케이션이 종료 코드를 사용하여 다시 연결하는 경우 애플리케이션은 다음을 수행해야 합니다.

1. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetMessagingSessionEndpoint.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetMessagingSessionEndpoint.html) API를 다시 직접 호출하여 새 기본 URL을 가져옵니다.

1. IAM 자격 증명 정보가 만료된 경우 자격 증명 정보를 새로 고칩니다.

1. WebSocket을 통해 연결합니다.

amazon-chime-sdk-js 라이브러리를 사용하는 경우 [needsRefresh()](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html#needsRefresh-property) 속성 및 [refresh()](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html#refresh-property) 메서드를 구현하면 이 작업이 자동으로 처리됩니다. 작동하는 예시는 [https://github.com/aws-samples/amazon-chime-sdk/blob/dc11c4c76c78d28f618577706bba2087919a5635/apps/chat/src/providers/AuthProvider.jsx\$1L93-L101](https://github.com/aws-samples/amazon-chime-sdk/blob/dc11c4c76c78d28f618577706bba2087919a5635/apps/chat/src/providers/AuthProvider.jsx#L93-L101)을 참조하세요.

# Amazon Chime SDK 메시징에서 첨부 파일 구성
<a name="configure-attachments"></a>

Amazon Chime SDK를 사용하면 메시지 첨부 파일에 자체 스토리지를 사용하고 이를 메시지 메타데이터로 포함할 수 있습니다. Amazon S3(Simple Storage Service)는 첨부파일을 시작하는 가장 쉬운 방법입니다.

**첨부 파일에 S3를 사용하려면**

1. S3 버킷을 생성하여 첨부 파일을 저장합니다.

1. Amazon Chime SDK 사용자가 S3 버킷에서 첨부 파일을 업로드, 다운로드, 삭제할 수 있도록 허용하는 버킷에 대한 IAM 정책을 생성합니다.

1. 자격 증명 정보 공급자가 첨부 파일을 위해 사용자에게 보안 인증 정보를 벤딩하는 데 사용할 IAM 역할을 생성합니다.

[샘플 애플리케이션](https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat)은 Amazon S3, Amazon Cognito, Amazon Chime SDK를 사용하여 이 작업을 수행하는 방법의 예시를 제공합니다.

# Amazon Chime SDK 메시징을 위한 시스템 메시지 이해
<a name="system-messages"></a>

Amazon Chime SDK는 채널에서 발생하는 이벤트에 대해 연결된 모든 클라이언트에 시스템 메시지를 보냅니다. 이벤트에는 다음이 포함됩니다.
+ `UPDATE_CHANNEL` – 이 이벤트는 이름이나 메타데이터와 같은 채널 세부 정보가 업데이트되었음을 나타냅니다.
+ `DELETE_CHANNEL` – 이 이벤트는 메시지, 멤버십, 운영자, 차단을 포함한 채널 및 모든 데이터가 삭제됨을 의미합니다.
+ `CREATE_CHANNEL_MEMBERSHIP` – 이 이벤트는 특정 `AppInstanceUser`가 채널에 멤버로 추가되었음을 나타냅니다. 이 이벤트에는 새 `AppInstanceUser`에 대한 세부 정보도 포함됩니다.
+ `DELETE_CHANNEL_MEMBERSHIP` - 이 이벤트는 `AppInstanceUser`가 채널에서 제거되었음을 나타냅니다. 이 이벤트에는 제거된 `AppInstanceUser`의 세부 정보도 포함됩니다.
+ `UPDATE_CHANNEL_MEMBERSHIP` - 이 이벤트는 엘라스틱 채널에만 적용됩니다. 이 이벤트는 멤버십 밸런싱이 한 하위 채널에서 다른 하위 채널로 `AppInstanceUser`를 전송했음을 나타냅니다. 이 이벤트에는 `AppInstanceUser` 세부 정보와 함께 `AppInstanceUser`가 전송된 하위 채널에 대한 정보도 포함됩니다.

# Amazon Chime SDK 메시징의 IAM 역할 예시
<a name="iam-roles"></a>

사용자가 Amazon Chime SDK 메시징 기능에 액세스하려면 사용자가 로그인할 때 자격 증명 정보를 제공하도록 IAM 역할 및 정책을 정의해야 합니다. IAM 정책은 사용자가 액세스할 수 있는 리소스를 정의합니다.

이 섹션의 예시는 필요에 맞게 조정할 수 있는 기본 정책을 제공합니다. 정책 작동 방식에 대한 자세한 내용은 [Amazon Chime SDK 메시징용 백엔드 서비스에서 SDK 직접 호출](call-from-backend.md) 섹션을 참조하세요.

이 예시는 Amazon Chime SDK 메시징을 사용하여 애플리케이션을 구축하는 개발자를 위한 정책을 보여줍니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "chime:CreateAppInstance",
                "chime:DescribeAppInstance",
                "chime:ListAppInstances",
                "chime:UpdateAppInstance",
                "chime:DeleteAppInstance",
                "chime:CreateAppInstanceUser",
                "chime:DeleteAppInstanceUser",
                "chime:ListAppInstanceUsers",
                "chime:UpdateAppInstanceUser",
                "chime:DescribeAppInstanceUser",
                "chime:CreateAppInstanceAdmin",
                "chime:DescribeAppInstanceAdmin",
                "chime:ListAppInstanceAdmins",
                "chime:DeleteAppInstanceAdmin",
                "chime:PutAppInstanceRetentionSettings",
                "chime:GetAppInstanceRetentionSettings",
                "chime:PutAppInstanceStreamingConfigurations",
                "chime:GetAppInstanceStreamingConfigurations",
                "chime:DeleteAppInstanceStreamingConfigurations",
                "chime:TagResource",
                "chime:UntagResource",
                "chime:ListTagsForResource",
                "chime:CreateChannelFlow",
                "chime:UpdateChannelFlow",
                "chime:DescribeChannelFlow",
                "chime:DeleteChannelFlow",
                "chime:ListChannelFlows",
                "chime:ListChannelsAssociatedWithChannelFlow",
                "chime:ChannelFlowCallback"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
```

------

이 예시는 사용자가 Amazon Chime SDK 사용자 조치에 액세스할 수 있도록 허용하는 정책을 보여줍니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "chime:GetMessagingSessionEndpoint",
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "chime:CreateChannel",
                "chime:DescribeChannel",
                "chime:DeleteChannel",
                "chime:UpdateChannel",
                "chime:ListChannels",
                "chime:Listsubchannels",
                "chime:ListChannelMembershipsForAppInstanceUser",
                "chime:DescribeChannelMembershipForAppInstanceUser",
                "chime:ListChannelsModeratedByAppInstanceUser",
                "chime:DescribeChannelModeratedByAppInstanceUser",
                "chime:UpdateChannelReadMarker",
                "chime:CreateChannelModerator",
                "chime:DescribeChannelModerator",
                "chime:ListChannelModerators",
                "chime:DeleteChannelModerator",
                "chime:SendChannelMessage",
                "chime:GetChannelMessage",
                "chime:DeleteChannelMessage",
                "chime:UpdateChannelMessage",
                "chime:RedactChannelMessage",
                "chime:ListChannelMessages",
                "chime:CreateChannelMembership",
                "chime:DescribeChannelMembership",
                "chime:DeleteChannelMembership",
                "chime:ListChannelMemberships",
                "chime:CreateChannelBan",
                "chime:DeleteChannelBan",
                "chime:ListChannelBans",
                "chime:DescribeChannelBan",
                "chime:Connect",
                "chime:AssociateChannelFlow",
                "chime:DisassociateChannelFlow",
                "chime:GetChannelMessageStatus"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:chime:us-east-1:123456789012:app-instance/app_instance_id/user/app_instance_user_id",
                "arn:aws:chime:us-east-1:123456789012:app-instance/app_instance_id/channel/*"
            ]
        }
    ]
}
```

------

이 예시는 사용자에게 Amazon Chime SDK 사용자 조치에 대한 최소한의 액세스를 제공하는 정책을 보여줍니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "chime:GetMessagingSessionEndpoint",
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "chime:ListChannels",
                "chime:DescribeChannel",
                "chime:ListChannelMembershipsForAppInstanceUser",
                "chime:DescribeChannelMembershipForAppInstanceUser",
                "chime:ListChannelsModeratedByAppInstanceUser",
                "chime:DescribeChannelModeratedByAppInstanceUser",
                "chime:SendChannelMessage",
                "chime:GetChannelMessage",
                "chime:ListChannelMessages",
                "chime:Connect"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:chime:us-east-1:123456789012:app-instance/app_instance_id/user/app_instance_user_id",
                "arn:aws:chime:us-east-1:123456789012:app-instance/app_instance_id/channel/*"
            ]
        }
    ]
}
```

------

이 예시는 `AppInstanceUser`에 대한 WebSocket 연결을 설정하기 위한 정책을 보여줍니다. WebSocket 연결에 대한 자세한 정보는 [WebSockets를 사용하여 Amazon Chime SDK 메시징에서 메시지 수신](websockets.md) 섹션을 참조하세요.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
   {
     "Effect": "Allow",
     "Action": [
             "chime:Connect"
            ],
     "Resource": [
             "arn:aws:chime:us-east-1:123456789012:app-instance/app_instance_id/user/app_instance_user_id"
         ]
      }
   ]
}
```

------

# 역할별 권한 부여 이해
<a name="auth-by-role"></a>

이 주제의 표에는 앱 인스턴스 사용자가 역할에 따라 실행할 수 있는 작업이 나열되어 있습니다.

**범례**
+ **허용됨** - IAM 정책에 올바른 작업/리소스 컨텍스트가 지정되어 있으면 성공적으로 실행할 수 있습니다.
+ **제한적으로 허용됨** - IAM 정책에 올바른 작업/리소스 컨텍스트가 지정된 경우 작업을 성공적으로 실행하려면 특정 조건을 충족해야 합니다.
+ **거부됨** - IAM 정책에 올바른 작업/리소스 컨텍스트가 지정되더라도 백엔드에서 이를 차단합니다.

**Topics**
+ [AppInstanceAdmin](#appinstanceadmin)
+ [ChannelModerator](#channelmoderator)
+ [Member](#member)
+ [비멤버](#non-member)

## AppInstanceAdmin
<a name="appinstanceadmin"></a>

앱 인스턴스 관리자는 자신이 관리자인 앱 인스턴스 내의 채널에서 작업을 수행할 수 있습니다.


| API 이름 | 허용 또는 거부 여부 | Notes | 
| --- | --- | --- | 
| `UpdateChannel` | 제한적으로 허용됨 |  ElasticChannelConfiguration을 설정한 후에는 업데이트할 수 없습니다. | 
| `DeleteChannel` | 허용됨 |  | 
| `DescribeChannel` | 허용됨 |  | 
| `ListChannel` | 허용됨 |  | 
| `ListChannelMembershipsForAppInstanceUser` | 허용됨 | [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_DescribeChannelModeratedByAppInstanceUser.html#API_DescribeChannelModeratedByAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_DescribeChannelModeratedByAppInstanceUser.html#API_DescribeChannelModeratedByAppInstanceUser_RequestSyntax)을 다른 `AppInstanceUser`로 채울 수도 있습니다. | 
| `DescribeChannelMembershipForAppInstanceUser` | 허용 | [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_DescribeChannelModeratedByAppInstanceUser.html#API_DescribeChannelModeratedByAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_DescribeChannelModeratedByAppInstanceUser.html#API_DescribeChannelModeratedByAppInstanceUser_RequestSyntax)을 다른 `AppInstanceUser`로 채울 수도 있습니다. | 
| `ListChannelsModeratedByAppInstanceUser` | 허용 | [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_DescribeChannelModeratedByAppInstanceUser.html#API_DescribeChannelModeratedByAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_DescribeChannelModeratedByAppInstanceUser.html#API_DescribeChannelModeratedByAppInstanceUser_RequestSyntax)을 다른 AppInstanceUser로 채울 수도 있습니다. | 
| `DescribeChannelModeratedByAppInstanceUser` | 허용 | [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_DescribeChannelModeratedByAppInstanceUser.html#API_DescribeChannelModeratedByAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_DescribeChannelModeratedByAppInstanceUser.html#API_DescribeChannelModeratedByAppInstanceUser_RequestSyntax)을 다른 `ppInstanceUser`로 채울 수도 있습니다. 엘라스틱 채널에는 허용되지 않습니다. | 
| `CreateChannelMembership` | Allowed |  | 
| `DescribeChannelMembership` | 허용됨 |  | 
| `ListChannelMembership` | 허용됨 |  | 
| `DeleteChannelMembership` | 허용됨 |  | 
| `SendChannelMessage` | 제한적으로 허용됨 | 먼저 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateChannelMembership.html)을 사용하여 자신에 대한 멤버십을 생성한 다음 API를 직접 호출해야 합니다. | 
| `GetChannelMessage` | Allowed |  | 
| `ListChannelMessage` | 허용됨 |  | 
| `DeleteChannelMessage` | 허용됨 |  | 
| `RedactChannelMessage` | 허용됨 |  | 
| `UpdateChannelMessage` | 제한적으로 허용됨 | 자신이 작성한 메시지만 편집할 수 있습니다. | 
| `CreateChannelModerator` | 허용됨 |  | 
| `DeleteChannelModerator` | 허용됨 |  | 
| `DescribeChannelModerator` | 허용됨 |  | 
| `ListChannelModerator` | 허용됨 |  | 
| `CreateChannelBan` | 제한적으로 허용됨 | 차단한 `AppInstanceUser`는 해당 채널의 `AppInstanceAdmin` 또는 중재자가 될 수 없습니다. | 
| `DeleteChannelBan` | 제한적으로 허용됨 |  | 
| `DescribeChannelBan` | 허용됨 |  | 
| `ListChannelBan` | 허용됨 |  | 
| `UpdateChannelReadMarker` | 제한적으로 허용됨 | 비 엘라스틱 채널의 경우 먼저 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html) API를 사용하여 자신에 대한 멤버십을 생성한 다음 API를 직접 호출해야 합니다. 엘라스틱 채널에는 허용되지 않습니다.  | 
|  `GetChannelMessage`  |  제한적으로 허용됨 | 보낸 메시지에만 허용됩니다. 메시지 발신자가 아니면 채널 흐름으로 처리 중인 메시지에는 허용되지 않습니다. | 
| `ListChannelMessages` |  허용됨 |  | 
| `DeleteChannelMessage` |  제한적으로 허용됨 | 보낸 메시지에만 허용됩니다. | 
| `RedactChannelMessage` |  제한적으로 허용됨 | 보낸 메시지에만 허용됩니다. | 
| `UpdateChannelMessage` |  제한적으로 허용됨 | 자신이 보낸 메시지만 편집할 수 있습니다. | 
| `AssociateChannelFlow` |  허용됨 |  | 
| `DisassociateChannelFlow` |  허용됨 |  | 
| `GetChannelMessageStatus` |  제한적으로 허용됨 | 자신이 작성한 메시지 상태만 가져올 수 있습니다. | 
|  `ListSubChannels`  | 허용됨 |  | 

## ChannelModerator
<a name="channelmoderator"></a>

채널 중재자는 자신이 중재자 역할을 맡은 채널에서만 작업을 수행할 수 있습니다.

**참고**  
`AppInstanceAdmin`인 중재자는 해당 역할이 허용하는 채널에서 작업을 수행할 수 있습니다.


| API 이름 | 허용 또는 거부 여부 | Notes | 
| --- | --- | --- | 
| `UpdateChannel` | 허용됨 |  ElasticChannelConfiguration을 설정한 후에는 업데이트할 수 없습니다. | 
| `DeleteChannel` | 허용됨  |  | 
| `DescribeChannel` | 제한적으로 허용됨 | 공개 채널의 세부 정보만 가져올 수 있습니다. | 
| `ListChannel` | 제한적으로 허용됨 | 공개 채널의 세부 정보만 가져올 수 있습니다. | 
| `ListChannelMembershipsForAppInstanceUser` | 제한적으로 허용됨 | ARN은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax) 값으로만 사용할 수 있습니다. | 
| `DescribeChannelMembershipForAppInstanceUser` | 제한적으로 허용됨 | ARN은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax) 값으로만 사용할 수 있습니다. | 
| `ListChannelsModeratedByAppInstanceUser` | 제한적으로 허용됨 | ARN은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax) 값으로만 사용할 수 있습니다. | 
| `DescribeChannelModeratedByAppInstanceUser` | 제한적으로 허용됨 | [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax)을 다른 AppInstanceUser로 채울 수도 있습니다. | 
| `CreateChannelMembership` | Allowed |  | 
| `DescribeChannelMembership` | 허용됨 |  | 
| `ListChannelMembership` | 허용됨 |  | 
| `DeleteChannelMembership` | 허용됨 |  | 
| `SendChannelMessage` | 제한적으로 허용됨 | 먼저 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html) API를 사용하여 자신에 대한 멤버십을 생성한 다음 `SendChannelMessage` API를 직접 호출해야 합니다. | 
| `GetChannelMessage` | Allowed |  | 
| `ListChannelMessage` | 허용됨 |  | 
| `DeleteChannelMessage` | 거부됨 |  | 
| `RedactChannelMessage` | 허용됨 |  | 
| `UpdateChannelMessage` | 제한적으로 허용됨 | 자신이 작성한 메시지만 업데이트할 수 있습니다. | 
| `CreateChannelModerator` | 허용 | 먼저 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html) API를 사용하여 자신에 대한 멤버십을 생성한 다음 `CreateChannelModerator` API를 직접 호출해야 합니다. | 
| `DeleteChannelModerator` | Allowed |  | 
| `DescribeChannelModerator` | 허용됨 |  | 
| `ListChannelModerator` | 허용됨 |  | 
| `CreateChannelBan` | 제한적으로 허용됨 | 차단하려는 `AppInstanceUser`는 해당 채널의 `AppInstanceAdmin` 또는 중재자가 될 수 없습니다. | 
| `DeleteChannelBan` | 제한적으로 허용됨 |  | 
| `DescribeChannelBan` | 허용됨 |  | 
| `ListChannelBan` | 허용됨 |  | 
| `UpdateChannelReadMarker` | 제한적으로 허용됨 |  비 엘라스틱 채널의 경우 먼저 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html)을 사용하여 자신에 대한 멤버십을 생성한 다음 `UpdateChannelReadMarker` API를 직접 호출해야 합니다. 엘라스틱 채널에는 허용되지 않습니다.  | 
| `GetChannelMessage` |  제한적으로 허용됨 | 보낸 메시지에만 허용됩니다. 메시지 발신자가 아니면 채널 흐름으로 처리 중인 메시지에는 허용되지 않습니다. | 
| `ListChannelMessages` |  허용 |  | 
| `DeleteChannelMessage` |  거부됨 |  | 
| `RedactChannelMessage` |  제한적으로 허용됨 | 보낸 메시지에만 허용됩니다. | 
| `UpdateChannelMessage` |  제한적으로 허용됨 | 자신이 보낸 메시지만 편집할 수 있습니다. | 
| `AssociateChannelFlow` |  허용됨 |  | 
| `DisassociateChannelFlow` |  허용됨 |  | 
| `GetChannelMessageStatus` |  제한적으로 허용됨 | 자신이 작성한 메시지 상태만 가져올 수 있습니다. | 
|  `ListSubChannels`  | 허용됨 |  | 

## Member
<a name="member"></a>

`AppInstanceUser`는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html) API를 통해 채널에 추가되면 채널의 멤버가 됩니다.

멤버는 자신이 속한 채널에서만 작업을 수행할 수 있습니다.

**참고**  
`AppInstanceAdmin` 또는 `ChannelModerator`인 멤버는 해당 두 역할이 허용하는 채널에 대해 작업을 수행할 수 있습니다.


| API 이름 | 허용 또는 거부 여부 | Notes | 
| --- | --- | --- | 
| `UpdateChannel` | 거부됨 |  | 
| `DeleteChannel` | 거부됨 |  | 
| `DescribeChannel` | 제한적으로 허용됨 | 공개 채널의 세부 정보만 가져올 수 있습니다. | 
| `ListChannel` | 제한적으로 허용됨 | 공개 채널의 세부 정보만 가져올 수 있습니다. | 
| `ListChannelMembershipsForAppInstanceUser` | 제한적으로 허용됨 | ARN은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax) 값으로만 사용할 수 있습니다. | 
| `DescribeChannelMembershipForAppInstanceUser` | 제한적으로 허용됨 | ARN은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax) 값으로만 사용할 수 있습니다. | 
| `ListChannelsModeratedByAppInstanceUser` | 제한적으로 허용됨 | ARN은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax) 값으로만 사용할 수 있습니다. | 
| `DescribeChannelModeratedByAppInstanceUser` | 제한적으로 허용됨 |  [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_DescribeChannelModeratedByAppInstanceUser.html#API_DescribeChannelModeratedByAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_DescribeChannelModeratedByAppInstanceUser.html#API_DescribeChannelModeratedByAppInstanceUser_RequestSyntax)을 다른 AppInstanceUser로 채울 수도 있습니다. 엘라스틱 채널에는 허용되지 않습니다. | 
| `CreateChannelMembership` | 제한적으로 허용됨 | [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html#chime-CreateChannel-request-Mode](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html#chime-CreateChannel-request-Mode) 채널에 대해서만 다른 멤버를 추가할 수 있습니다. | 
| `DescribeChannelMembership` | Allowed |  | 
| `ListChannelMembership` | 허용됨 |  | 
| `DeleteChannelMembership` | 허용됨 |  | 
| `SendChannelMessage` | 허용됨 |  | 
| `GetChannelMessage` | 허용됨 |  | 
| `ListChannelMessage` | 허용됨 |  | 
| `DeleteChannelMessage` | 거부됨 |  | 
| `RedactChannelMessage` | 제한적으로 허용됨 | 자신이 작성한 메시지만 수정할 수 있습니다. | 
| `UpdateChannelMessage` | 제한적으로 허용됨 | 자신이 작성한 메시지만 업데이트할 수 있습니다. | 
| `CreateChannelModerator` | 거부됨 |  | 
| `DeleteChannelModerator` | 거부됨 |  | 
| `DescribeChannelModerator` | 거부됨 |  | 
| `ListChannelModerator` | 거부됨 |  | 
| `CreateChannelBan` | 거부됨 |  | 
| `DeleteChannelBan` | 거부됨 |  | 
| `DescribeChannelBan` | 거부됨 |  | 
| `ListChannelBan` | 거부됨 |  | 
| `UpdateChannelReadMarker` | 제한적으로 허용됨 |  엘라스틱 채널에는 허용되지 않습니다.  | 
| `GetChannelMessage` |  제한적으로 허용됨 | 보낸 메시지에만 허용됩니다. 메시지 발신자가 아니면 채널 흐름으로 처리 중인 메시지에는 허용되지 않습니다. | 
| `ListChannelMessages` |  허용됨 |  | 
| `DeleteChannelMessage` |  제한적으로 허용됨 | 보낸 메시지에만 허용됩니다. | 
| `RedactChannelMessage` |  제한적으로 허용됨 | 보낸 메시지에만 허용됩니다. | 
| `UpdateChannelMessage` |  제한적으로 허용됨 | 자신이 보낸 메시지만 편집할 수 있습니다. | 
| `AssociateChannelFlow` |  거부됨 |  | 
| `DisassociateChannelFlow` |  거부됨 |  | 
| `GetChannelMessageStatus` |  제한적으로 허용됨 | 자신이 작성한 메시지 상태만 가져올 수 있습니다. | 
| `Listsubchannels` | 거부됨 |  | 

## 비멤버
<a name="non-member"></a>

비회원은 일반 `AppInstanceUser`로, [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html) API를 사용하여 추가하지 않는 한 채널 관련 작업을 수행할 수 없습니다.

**참고**  
이 두 역할에서 허용하는 채널 관련 작업을 `AppInstanceAdmin` 수행하거나 수행할 `ChannelModerator` 수 있는 비회원입니다.


| API 이름 | 허용 또는 거부 여부 | Notes | 
| --- | --- | --- | 
| `UpdateChannel` | 거부됨 |  | 
| `DeleteChannel` | 거부됨 |  | 
| `DescribeChannel` | 제한적으로 허용됨 | 공개 채널의 세부 정보만 가져올 수 있습니다. | 
| `ListChannel` | 제한적으로 허용됨 | 공개 채널의 세부 정보만 가져올 수 있습니다. | 
| `ListChannelMembershipsForAppInstanceUser` | 제한적으로 허용됨 | ARN은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax) 값으로만 사용할 수 있습니다. | 
| `DescribeChannelMembershipForAppInstanceUser` | 제한적으로 허용됨 | [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_DescribeChannelModeratedByAppInstanceUser.html#API_DescribeChannelModeratedByAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_DescribeChannelModeratedByAppInstanceUser.html#API_DescribeChannelModeratedByAppInstanceUser_RequestSyntax)을 다른 `AppInstanceUser`로 채울 수도 있습니다. 엘라스틱 채널에는 허용되지 않습니다. | 
| `ListChannelsModeratedByAppInstanceUser` | 제한적으로 허용됨 | ARN은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax) 값으로만 사용할 수 있습니다. | 
| `DescribeChannelModeratedByAppInstanceUser` | 제한적으로 허용됨 | ARN은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_ListChannelMembershipsForAppInstanceUser.html#API_ListChannelMembershipsForAppInstanceUser_RequestSyntax) 값으로만 사용할 수 있습니다. | 
| `CreateChannelMembership` | 거부됨 |  | 
| `DescribeChannelMembership` | 제한적으로 허용됨 | 공개 채널의 세부 정보만 가져올 수 있습니다. | 
| `ListChannelMembership` | 제한적으로 허용됨 | 공개 채널의 세부 정보만 가져올 수 있습니다. | 
| `DeleteChannelMembership` | 거부됨 |  | 
| `SendChannelMessage` | 거부됨 |  | 
| `GetChannelMessage` | 제한적으로 허용됨 | 공개 채널의 세부 정보만 가져올 수 있습니다. | 
| `ListChannelMessage` | 제한적으로 허용됨 | 공개 채널의 세부 정보만 가져올 수 있습니다. | 
| `DeleteChannelMessage` | 거부됨 |  | 
| `RedactChannelMessage` | 거부됨 |  | 
| `UpdateChannelMessage` | 거부됨 |  | 
| `CreateChannelModerator` | 거부됨 |  | 
| `DeleteChannelModerator` | 거부됨 |  | 
| `DescribeChannelModerator` | 거부됨 |  | 
| `ListChannelModerator` | 거부됨 |  | 
| `CreateChannelBan` | 거부됨 |  | 
| `DeleteChannelBan` | 거부됨 |  | 
| `DescribeChannelBan` | 거부됨 |  | 
| `ListChannelBan` | 거부됨 |  | 
| `UpdateChannelReadMarker` | 거부됨 |  | 
| `GetChannelMessage` |  제한적으로 허용됨 | 보낸 메시지에만 허용됩니다. 메시지 발신자가 아니면 채널 흐름으로 처리 중인 메시지에는 허용되지 않습니다. | 
| `ListChannelMessages` |  제한적으로 허용됨 |  | 
| `DeleteChannelMessage` |  거부됨 | 거부됨 | 
| `RedactChannelMessage` |  거부됨 |  | 
| `UpdateChannelMessage` |  거부됨 |  | 
| `AssociateChannelFlow` |  거부됨 |  | 
| `DisassociateChannelFlow` |  거부됨 |  | 
| `GetChannelMessageStatus` |  제한적으로 허용됨 | 자신이 작성한 메시지 상태만 가져올 수 있습니다. | 

# Amazon Chime SDK 메시징에서 메시징 데이터 스트리밍
<a name="streaming-export"></a>

메시지 및 채널 이벤트와 같은 데이터를 스트림 형태로 수신하도록 `AppInstance`를 구성할 수 있습니다. 그러면 해당 데이터에 실시간으로 반응할 수 있습니다. 현재 Amazon Chime SDK 메시징은 Kinesis 스트림만 스트림 대상으로 허용합니다. 이 기능과 함께 Kinesis 스트림을 사용하려면 다음과 같은 사전 요구 사항이 충족되어야 합니다.
+ Kinesis 스트림은와 동일한 AWS 계정에 있어야 합니다`AppInstance`.
+ 스트림은 `AppInstance`와 동일한 리전에 있어야 합니다.
+ 스트림 이름에 `chime-messaging-`으로 시작하는 접두사가 있어야 합니다.
+ 샤드를 두 개 이상 구성해야 합니다. 각 샤드는 초당 최대 1MB의 데이터를 수신할 수 있으므로 스트림의 규모를 적절하게 조정하세요.
+ 서버 측 암호화(SSE)를 사용하도록 설정해야 합니다.

**Kinesis 스트림을 구성하려면**

1. 이전 섹션의 사전 요구 사항을 사용하여 Kinesis 스트림을 하나 이상 생성한 다음 ARN을 가져옵니다. 발신자가 Amazon Chime 권한 외에 Kinesis 권한을 가지고 있는지 확인합니다.

   다음 예제에서는 AWS CLI를 사용하여 두 개의 샤드가 있는 Kinesis 스트림을 생성하는 방법과 SSE를 활성화하는 방법을 보여줍니다.

   `aws kinesis create-stream --stream-name chime-messaging-unique-name --shard-count 2`

   `aws kinesis start-stream-encryption --stream-name chime-messaging-unique-name --encryption-type KMS --key-id "alias/aws/kinesis"`

1. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutMessagingStreamingConfigurations.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutMessagingStreamingConfigurations.html) API를 직접 호출하여 스트리밍을 구성합니다.

   두 데이터 유형 중 하나 또는 둘 다를 구성할 수 있으며, 두 데이터 유형에 대해 동일한 스트림 또는 별도의 스트림을 선택할 수 있습니다.

   다음 예제에서는 AWS CLI를 사용하여 `ChannelMessage` 및 `Channel` 데이터 유형을 스트리밍`appinstance`하도록를 구성하는 방법을 보여줍니다.

   ```
   aws chime-sdk-messaging put-messaging-streaming-configurations --app-instance-arn app_instance_arn \
   --streaming-configurations DataType=ChannelMessage,ResourceArn=kinesis_data_stream_arn
   ```

   ```
   aws chime-sdk-messaging put-messaging-streaming-configurations --app-instance-arn app_instance_arn \
   --streaming-configurations DataType=Channel,ResourceArn=kinesis_data_stream_arn
   ```

   데이터 유형의 범위는 다음과 같습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/streaming-export.html)

1. 구성된 Kinesis 스트림에서 데이터 읽기를 시작합니다.
**참고**  
스트리밍을 구성하기 전에 전송된 모든 이벤트는 Kinesis 스트림으로 전송되지 않습니다.

**데이터 형식**  
키네시스는 `EventType` 및 `Payload` 필드가 포함된 JSON 형식의 레코드를 출력합니다. 페이로드 형식은 `EventType`에 따라 달라집니다. 다음 표에는 이벤트 유형과 해당 페이로드 형식이 나열되어 있습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/streaming-export.html)

# 엘라스틱 채널을 사용하여 Amazon Chime SDK 회의에서 라이브 이벤트 주최
<a name="elastic-channels"></a>

엘라스틱 채널은 최대 1백만 명의 멤버가 참여하는 대규모 채팅 경험을 지원합니다. 일반적인 용도로는 스포츠 또는 정치 행사를 위한 감상 파티가 있습니다. 엘라스틱 채널은 미국 동부(버지니아 북부) 리전에서만 사용할 수 있습니다.

엘라스틱 채널은 공통 구성을 가진 단일 채널과 다양한 수의 하위 채널, 또는 *탄력적인* 채널로 구성됩니다. 구성에는 하위 채널의 멤버에 대한 최소 및 최대 임계값도 포함됩니다.

예를 들어 100개의 하위 채널이 있는 엘라스틱 채널을 만들고 하위 채널에 대해 멤버 500명이라는 낮은 임계값을 설정하고, 멤버 10,000명이라는 높은 임계값을 설정한다고 가정해 보겠습니다. 사용자가 이 예시 채널에 가입하면 시스템에서 멤버 수가 10,000명을 넘을 때까지 사용자를 단일 하위 채널에 자동으로 배정합니다. 이 시점에서 시스템은 새 하위 채널을 만들고 거기에 새 멤버를 추가합니다. 사용자가 나가면 시스템은 하위 채널을 삭제하고 나머지 하위 채널에 멤버를 분배합니다.

시청자를 하위 채널로 나누면 참가자들이 대화를 더 쉽게 따라갈 수 있습니다. 중재자는 일부 하위 채널만 시청하면 되기 때문에 작업량도 줄어듭니다. 또한 중재자는 엘라스틱 채널이 제공하는 기본 제공 도구를 사용할 수 있습니다. 예를 들어 중재자는 채널에서 [사용자를 차단하고](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelBan.html), [중재자를 만들고](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelModerator.html), [채널 흐름](https://docs.aws.amazon.com/chime-sdk/latest/dg/using-channel-flows.html)을 사용하여 채널의 모든 메시지를 자동으로 모더레이션할 수 있습니다.

Amazon Chime SDK 메시징 할당량에 대한 자세한 내용은 Amazon Chime SDK 일반 참조**의 [메시징 할당량](https://docs.aws.amazon.com/general/latest/gr/chime-sdk.html)을 참조하세요.

**Topics**
+ [사전 조건](#elastic-prereqs)
+ [엘라스틱 채널의 개념](#elastic-concepts)
+ [지원되는 추가 기능](#additional-features)
+ [Amazon Chime SDK 회의를 위한 엘라스틱 채널 생성](create-elastic-channel.md)
+ [Amazon Chime SDK 회의를 위한 엘라스틱 채널 멤버 관리](manage-elastic-members.md)
+ [Amazon Chime SDK 회의에서 엘라스틱 채널 메시지 전송](send-messages-elastic.md)
+ [Amazon Chime SDK 회의를 위한 엘라스틱 채널의 WebSocket 시스템 메시지 이해](websocket-messages-elastic.md)
+ [Kinesis 스트림을 사용하여 Amazon Chime SDK 회의에 대한 시스템 메시지 수신](elastic-onboard-streams.md)
+ [데모 앱에서 Amazon Chime SDK 회의를 위한 엘라스틱 채널 테스트](elastic-testing.md)

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

엘라스틱 채널을 사용하려면 다음 사항이 필요합니다.
+ Amazon Chime SDK 메시징 기능(예: 채널 관리, 메시지 전송 및 수신)에 대한 지식이 있어야 합니다.
+ Amazon Chime SDK 메시징 API를 호출할 수 있어야 합니다.

## 엘라스틱 채널의 개념
<a name="elastic-concepts"></a>

엘라스틱 채널을 효과적으로 사용하려면 다음과 같은 개념을 이해해야 합니다.

**하위 채널**  
엘라스틱 채널은 멤버를 하위 채널이라는 논리적 컨테이너로 나눕니다. 엘라스틱 채널에 `AppInstanceUser`를 추가하면 사용자는 하위 채널의 구성원이 됩니다. 해당 사용자는 메시지를 보내고 받을 수 있지만 해당 하위 채널의 다른 멤버와만 메시지를 주고 받을 수 있습니다. 시스템에서는 한 하위 채널의 메시지가 다른 하위 채널에 표시되는 것을 허용하지 않습니다.

**규모 조정**  
사용자 참여를 지원하려면 모든 하위 채널이 최소 멤버십 요구 사항을 충족해야 합니다. 엘라스틱 채널을 만들 때 이 값을 제공하면 됩니다. 사용자가 이벤트에 참여하거나 이벤트에서 나가면 시스템에서 구성원을 다른 하위 채널로 이동시켜 전체 채널을 ‘탄력적으로’ 운영합니다. 하위 채널은 다음과 같은 조정 작업을 실행합니다.  
+ **SCALE\$1OUT** - 새로운 엘라스틱 채널 멤버십 요청이 들어오고 모든 하위 채널이 가득 차면 시스템은 새 하위 채널을 만든 다음 기존 하위 채널의 멤버십을 새 하위 채널로 이전하여 스케일 아웃합니다.
+ **SCALE\$1IN** - 하위 채널 멤버십 수가 최소 요구 사항 이하로 떨어지고 다른 하위 채널에 첫 번째 하위 채널의 모든 구성원을 수용할 수 있는 용량이 있는 경우 `SCALE_IN` 이벤트가 해당 멤버십을 이전한 다음 하위 채널과 모든 메시지를 삭제합니다.
삭제된 채널의 메시지에 액세스해야 하는 경우 먼저 메시지 스트리밍을 켜야 합니다. 자세한 정보는 [Amazon Chime SDK 메시징에서 메시징 데이터 스트리밍](streaming-export.md) 섹션을 참조하세요.

**멤버 이전**  
멤버십 밸런싱을 통해 `AppInstanceUser`를 한 하위 채널에서 다른 하위 채널로 이동할 때 발생합니다. 이전 후에도 앱 인스턴스 사용자는 여전히 탄력적 채널에 속합니다. 이전 후에도 `AppInstanceUser`는 여전히 엘라스틱 채널에 속합니다. 하지만 새 하위 채널에는 다른 멤버십과 메시지가 포함되어 있으므로 이전 후 `AppInstanceUser`가 보낸 메시지는 다른 멤버에게 전달됩니다. 멤버십 밸런싱은 중재자 멤버십에 영향을 주지 않습니다.

**참고**  
 엘라스틱 채널은 숨겨진 멤버십, 멤버십 기본 설정, 읽기 메시지 타임스탬프를 지원하지 않습니다.

## 지원되는 추가 기능
<a name="additional-features"></a>

엘라스틱 채널은 다음과 같은 메시징 기능도 지원합니다.
+ [미리 가져오기](websockets.md#prefetch)
+ [채널 흐름](using-channel-flows.md)

# Amazon Chime SDK 회의를 위한 엘라스틱 채널 생성
<a name="create-elastic-channel"></a>

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html) API의 `ElasticChannelConfiguration` 필드를 사용하여 엘라스틱 채널을 생성합니다. 엘라스틱 채널을 만들고 나면 채널 멤버십이 생성됩니다.

**참고**  
비 엘라스틱 채널의 경우 채널을 만든 `AppInstanceUser`가 자동으로 해당 채널에 멤버 겸 중재자로 추가됩니다. 엘라스틱 채널의 경우 채널 생성자는 중재자로만 추가됩니다.
한 번 설정된 `ElasticChannelConfiguration`은 업데이트할 수 없습니다.
채널을 엘라스틱에서 비 엘라스틱으로 또는 그 반대로 업데이트할 수 없습니다.
[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html) API 요청에는 멤버 ARN 목록을 포함할 수 없습니다. 하지만 중재자 ARN 목록은 포함할 수 있습니다.
`UNRESTRICTED` 유형 엘라스틱 채널은 생성할 수 없습니다.

# Amazon Chime SDK 회의를 위한 엘라스틱 채널 멤버 관리
<a name="manage-elastic-members"></a>

탄력적 채널의 멤버를 관리하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html), [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelModerator.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelModerator.html), [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelBan.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelBan.html) API를 사용합니다. 다음 정보에서는 사용 방법을 설명합니다.

**채널 멤버십**  
`CreateChannelMembership` API는 하위 채널 수준에서 멤버십을 생성합니다. 하위 채널에는 중재자와 일반 멤버가 포함될 수 있습니다.  
+ **중재자** - 여러 하위 채널에 중재자를 추가할 수 있습니다. 이렇게 하면 중재자가 자신이 속한 각 하위 채널에서 메시지를 보낼 수 있습니다. 하위 채널에 중재자를 추가할 때는 `SubChannelId`를 제공해야 합니다.

  새 하위 채널에 중재자를 자동으로 할당하려는 경우 [메시지 스트리밍을 활성화하고](streaming-export.md) 하위 채널 생성 이벤트를 수신한 다음 해당 이벤트에 대한 응답으로 중재자 멤버십을 만들 수 있습니다.

  마지막으로 특정 하위 채널 또는 모든 하위 채널에서 중재자를 삭제할 수 있습니다. 두 경우 모두 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DeleteChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DeleteChannelMembership.html) API를 사용합니다. 특정 하위 채널에서 중재자를 삭제하려면 `SubChannelId`를 제공합니다. 하위 채널의 ID를 제공하지 않으면 시스템에서 모든 하위 채널에서 해당 중재자를 삭제합니다. 마지막으로 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListSubChannels](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListSubChannels) API를 사용하여 하위 채널과 각 하위 채널의 멤버 수를 나열할 수 있습니다.
+ **일반 멤버** - 채널 멤버십의 대다수를 구성합니다. 하나의 하위 채널에만 일반 멤버를 추가할 수 있습니다. 또한 멤버십이 생성되는 하위 채널은 시스템에서 제어하므로 채널 멤버십을 만들거나 삭제할 때 `SubChannelId`를 전달할 수 없습니다.

**채널 중재자**  
`CreateChannelModerator` API는 엘라스틱 채널 수준에서 중재자를 생성합니다. 중재자는 모든 하위 채널의 모든 메시지를 볼 수 있습니다. 일반 멤버를 채널 중재자로 승격시키면 시스템에서 해당 멤버의 기존 채널 멤버십이 모두 제거됩니다. 중재자를 강등시킬 때도 마찬가지입니다.

**채널 차단**  
`CreateChannelBan` API는 엘라스틱 채널 수준에서 차단을 생성합니다. 차단된 `AppInstanceUser`는 어떤 하위 채널에도 속할 수 없습니다. 멤버를 차단하면 시스템에서 해당 멤버의 모든 채널 멤버십을 제거합니다.

# Amazon Chime SDK 회의에서 엘라스틱 채널 메시지 전송
<a name="send-messages-elastic"></a>

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html) API는 하위 채널 수준에서 메시지를 생성합니다. 메시지를 보내려면 `subChannelId`가 있어야 합니다. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_UpdateChannelMessage.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_UpdateChannelMessage.html) 및 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_RedactChannelMessage.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_RedactChannelMessage.html) API를 사용하여 메시지를 수정하고 삭제할 수도 있지만, 모든 경우에 `subChannelId`가 있어야 합니다.

**참고**  
메시지 발신자는 자신이 메시지를 보낸 하위 채널에 속한 경우에만 메시지를 수정하거나 삭제할 수 있습니다. 멤버십 밸런싱으로 구성원을 다른 하위 채널로 이전하는 경우 해당 구성원은 새 하위 채널에서 보내는 메시지만 수정하거나 수정할 수 있습니다.

# Amazon Chime SDK 회의를 위한 엘라스틱 채널의 WebSocket 시스템 메시지 이해
<a name="websocket-messages-elastic"></a>

Amazon Chime SDK는 채널에서 발생하는 이벤트에 대해 연결된 모든 클라이언트에 시스템 메시지를 보냅니다. 다음 목록에서는 엘라스틱 채널의 시스템 메시지에 대해 설명합니다.

**메시지 이벤트**  
엘라스틱 채널의 이벤트 페이로드에는 `subChannelId` 필드가 포함됩니다. 비 엘라스틱 채널의 페이로드는 동일하게 유지됩니다.

**멤버십 이벤트**  
이제 `CREATE_CHANNEL_MEMBERSHIP` 및 `DELETE_CHANNEL_MEMBERSHIP` 이벤트의 페이로드에 `subChannelId` 필드가 있습니다.  
엘라스틱 채널은 `BATCH_CREATE_CHANNEL_MEMBERHSIP` 이벤트를 지원하지 않습니다. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_BatchCreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_BatchCreateChannelMembership.html) API를 직접 호출하면 시스템에서 개별 `CREATE_CHANNEL_MEMBERSHIP` 이벤트를 전송합니다.  
이제 `UPDATE_CHANNEL_MEMBERSHIP` 이벤트 유형을 사용하여 멤버십 정보 변경을 알릴 수 있습니다. 예를 들어, 한 하위 채널에서 다른 하위 채널로 멤버를 이전하는 동안 시스템은 페이로드에 새 `SubChannelId`가 포함된 `UPDATE_CHANNEL_MEMBERSHIP` 이벤트를 전송하여 멤버가 이전되었음을 알립니다.  
시스템은 전송된 멤버에게만 `UPDATE_CHANNEL_MEMBERSHIP` 이벤트를 전송하고 하위 채널의 다른 멤버에게는 전송하지 않습니다. 따라서 채널 멤버십 명단을 채울 때는 WebSockets 대신 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListChannelMemberships.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListChannelMemberships.html) API를 사용하는 것이 좋습니다. 자세한 정보는 [WebSockets를 사용하여 Amazon Chime SDK 메시징에서 메시지 수신](websockets.md) 섹션을 참조하세요.

# Kinesis 스트림을 사용하여 Amazon Chime SDK 회의에 대한 시스템 메시지 수신
<a name="elastic-onboard-streams"></a>

스트림 형태로 데이터를 수신하도록 `AppInstance`를 구성할 수 있습니다. 예를 들어 스트림에는 메시지, 하위 채널 이벤트, 채널 이벤트가 포함될 수 있습니다.

이러한 스트림의 일부로 `CREATE_SUB_CHANNEL` 및 `DELETE_SUB_CHANNEL` 이벤트를 지원합니다. 이 이벤트들은 멤버십 밸런싱의 일환으로 하위 채널이 생성되거나 삭제된 시점을 나타냅니다. 데이터 스트림 수신에 대한 자세한 내용은 [Amazon Chime SDK 메시징에서 메시징 데이터 스트리밍](streaming-export.md) 섹션을 참조하세요.

# 데모 앱에서 Amazon Chime SDK 회의를 위한 엘라스틱 채널 테스트
<a name="elastic-testing"></a>

GitHub의 [https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat](https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat)에서 모든 Amazon Chime SDK 메시징 기능을 테스트할 수 있습니다.

# Amazon Chime SDK 메시징에 모바일 푸시 알림을 사용하여 메시지 수신
<a name="using-push-notifications"></a>

채널 메시지를 모바일 푸시 알림 채널로 전송하도록 Amazon Chime SDK 메시징을 구성할 수 있습니다. Amazon Chime SDK를 사용하려면 푸시 알림을 위해 구성된 Amazon Pinpoint 애플리케이션이 필요합니다. Amazon Pinpoint 애플리케이션은 다음 사전 요구 사항을 충족해야 합니다.
+ Amazon Pinpoint 애플리케이션에는 최소한 FCM 또는 APNS 채널이 구성되어 활성화되어 있어야 합니다.
+ Amazon Pinpoint 애플리케이션은 Amazon Chime SDK 앱 인스턴스와 동일한 AWS 계정 및 리전에 있어야 합니다.

**참고**  
기본적으로 메시지 발신자를 포함한 푸시 알림 채널의 모든 멤버가 푸시 알림을 받습니다. 그러나 메시지가 발신자에게 전달되지 않도록 필터 규칙을 설정할 수 있습니다. 자세한 내용은 이 섹션 후반부의 [필터 규칙을 사용하여 Amazon Chime SDK 메시징에 대한 메시지 필터링](filter-msgs.md) 섹션을 참조하세요.

**Topics**
+ [Amazon Chime SDK 메시징용 Amazon Pinpoint 애플리케이션 생성](create-pinpoint.md)
+ [Amazon Chime SDK 메시징에 대한 서비스 역할 생성](create-service-role.md)
+ [모바일 디바이스 엔드포인트를 Amazon Chime SDK 메시징의 앱 인스턴스 사용자로 등록](register-endpoint.md)
+ [Amazon Chime SDK 메시징에서 알림이 활성화된 상태로 채널 메시지 보내기](send-channel-msg-with-notifications.md)
+ [Amazon Chime SDK 메시징에서 푸시 알림 수신](receive-notifications.md)
+ [Amazon Chime SDK 메시징에 대한 푸시 알림 실패 디버깅](debug-notifications.md)
+ [필터 규칙을 사용하여 Amazon Chime SDK 메시징에 대한 메시지 필터링](filter-msgs.md)

# Amazon Chime SDK 메시징용 Amazon Pinpoint 애플리케이션 생성
<a name="create-pinpoint"></a>

푸시 알림을 보내려면 모바일 앱에 푸시를 보내도록 구성된 Amazon Chime SDK에 Amazon Pinpoint 애플리케이션이 필요합니다. 다음 단계에서는 AWS 콘솔을 사용하여 Pinpoint 애플리케이션을 생성하는 방법을 설명합니다.

**Amazon Pinpoint 애플리케이션을 만드는 방법**

1.  AWS Management Console에 로그인하고 [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/) Amazon Pinpoint 콘솔을 엽니다.

   Amazon Pinpoint를 처음 사용하는 경우, 서비스의 기능을 소개하는 페이지가 나타납니다.

1. **시작하기** 섹션에서 프로젝트 이름을 입력하고 **프로젝트 생성**을 선택합니다.

1. **기능 구성** 페이지의 **푸시 알림** 옆에서 **구성**을 선택합니다.

1. **푸시 알림 설정** 페이지에서 **Apple Push Notification service(APNs)**, **Firebase Cloud Messaging(FCM)** 또는 둘 다를 토글하고 필수 입력란을 작성합니다.
**중요**  
Amazon Chime SDK는 현재 APN 및 FCM으로의 푸시 알림 전송만 지원합니다.

1. 완료하였으면 **저장**을 선택합니다.

1. Amazon Pinpoint 콘솔([https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/))으로 돌아가서 **프로젝트 ID** 값을 기록해 둡니다. 이를 Amazon Pinpoint 애플리케이션의 ARN으로 사용합니다.

# Amazon Chime SDK 메시징에 대한 서비스 역할 생성
<a name="create-service-role"></a>

AWS 는 서비스 역할을 사용하여 AWS 리소스에 액세스할 수 있도록 AWS 서비스에 권한을 부여합니다. 서비스 역할에 연결하는 정책에 따라 서비스에 액세스할 수 있는 리소스와 서비스가 해당 리소스로 수행할 수 있는 작업이 결정됩니다. Amazon Chime SDK에 생성하는 서비스 역할은 서비스에 Amazon Pinpoint 애플리케이션에 `SendMessages` 호출을 할 수 있는 권한을 부여합니다.

**서비스 역할을 생성하는 방법**

1.  AWS Management Console에 로그인하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. 탐색 창에서 **정책**을 선택한 후 **정책 생성**을 선택합니다.

1. **JSON** 탭을 선택하고 아래 정책을 텍스트 상자에 복사합니다. 를 이전 단계에서 생성한 Amazon Pinpoint 애플리케이션의 ID`project_id`로 바꾸고를 AWS 계정 ID`aws_account_id`로 바꿔야 합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Action": "mobiletargeting:SendMessages",
           "Resource": "arn:aws:mobiletargeting:us-east-1:123456789012:apps/project_id/messages",
           "Effect": "Allow"
       }
   }
   ```

------

1. **다음: 태그**를 선택합니다.

1. **다음: 검토** 를 선택하고 **이름 **AmazonChimePushNotificationPolicy**** 필드에 입력한 다음 **정책 생성** 을 선택합니다.

1. 탐색 창에서 **역할**을 선택한 후 **역할 생성**을 선택합니다.

1. **역할 생성** 페이지에서 **AWS 서비스**를 선택하고 **사용 사례**에서 **EC2**를 선택합니다.

1. **다음: 권한**을 선택하고 검색 상자에**AmazonChimePushNotificationPolicy**를 입력한 다음, 정책 옆에 있는 확인란을 선택합니다.

1. **다음: 태그**를 선택합니다.

1. **다음: 검토**를 선택하고 **이름** 필드에 **ServiceRoleForAmazonChimePushNotification**을 입력합니다.
**중요**  
위에 나열된 이름을 사용해야 합니다. Amazon Chime SDK는 해당 특정 이름만 허용합니다.

1. **역할 생성**을 선택하고 **역할** 페이지에서 검색 상자에 **ServiceRoleForAmazonChimePushNotification**을 입력하고 일치하는 역할을 선택합니다.

1. **신뢰 관계** 탭에서 **신뢰 관계 편집**을 선택하고 기존 정책을 아래 정책으로 바꿉니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "messaging.chime.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
       ]
   }
   ```

------

1. **신뢰 정책 업데이트**를 선택합니다.

**중요**  
이름, 권한 정책 또는 신뢰 정책을 변경하여 역할을 수정하면 푸시 알림 기능이 중단될 수 있습니다.

# 모바일 디바이스 엔드포인트를 Amazon Chime SDK 메시징의 앱 인스턴스 사용자로 등록
<a name="register-endpoint"></a>

푸시 알림을 받으려면 앱 인스턴스 사용자가 먼저 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_RegisterAppInstanceUserEndpoint.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_RegisterAppInstanceUserEndpoint.html) API를 사용하여 모바일 디바이스를 등록해야 합니다. 디바이스 운영 체제의 디바이스 토큰에 액세스할 수 있는 모바일 앱에서 등록해야 합니다.

앱 인스턴스 사용자가 ARN에 나열된 Amazon Pinpoint 애플리케이션에 액세스할 수 있도록 하려면 사용자에게 `mobiletargeting:GetApp` Amazon Pinpoint ARN을 호출할 수 있는 권한이 있어야 합니다. 그렇지 않으면 Amazon Chime SDK에서 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_RegisterAppInstanceUserEndpoint.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_RegisterAppInstanceUserEndpoint.html)를 직접 호출할 때 403 Forbidden 오류가 발생합니다.

이 예시는 엔드포인트를 등록하는 데 필요한 정책을 보여줍니다.

------
#### [ JSON ]

****  

```
{ 
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "PermissionToRegisterEndpoint",
            "Effect": "Allow",
            "Action": "chime:RegisterAppInstanceUserEndpoint",
            "Resource": "arn:aws:chime:us-east-1:123456789012:app-instance/app_instance_id/user/app_instance_user_id"
        },
        {
            "Sid": "PermissionToGetAppOnPinpoint",
            "Effect": "Allow",
            "Action": "mobiletargeting:GetApp",
            "Resource": "arn:aws:mobiletargeting:us-east-1:123456789012:apps/project_id"
        }
    ]
}
```

------

**엔드포인트를 등록하려면**
+ Amazon Pinpoint ARN과 디바이스 토큰을 사용하여 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_RegisterAppInstanceUserEndpoint.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_RegisterAppInstanceUserEndpoint.html) API를 직접 호출합니다.

# Amazon Chime SDK 메시징에서 알림이 활성화된 상태로 채널 메시지 보내기
<a name="send-channel-msg-with-notifications"></a>

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html) API에는 Amazon Chime SDK에서 Amazon Pinpoint로 전송할 푸시 알림을 작성하는 데 사용하는 선택적 `PushNotification` 속성이 있습니다. 현재 Amazon Chime SDK는 알림 제목 및 본문 필드만 지원합니다.

Amazon Chime SDK는 APN VoIP 푸시도 지원합니다. 푸시 알림을 APN VoIP 푸시로 보내려면 `PushNotification` 속성의 유형을 VOIP로 설정합니다.

# Amazon Chime SDK 메시징에서 푸시 알림 수신
<a name="receive-notifications"></a>

Amazon Chime SDK는 채널 메시지 푸시 알림 제목 및 본문과 함께 채널 메시지 ID 및 채널 ARN도 데이터 페이로드에 포함합니다. 이 정보를 사용하여 전체 채널 메시지를 로드할 수 있습니다.

다음 예시는 일반적인 푸시 알림 페이로드를 보여줍니다.

```
{
    "pinpoint.openApp=true",
    "pinpoint.notification.title=PushNotificationTitle",
    "pinpoint.notification.body=PushNotificationBody",
    "pinpoint.campaign.campaign_id=_DIRECT",
    "pinpoint.notification.silentPush=0",
    "pinpoint.jsonBody="{
        "chime.message_id":"ChannelMessageId",
        "chime.channel_arn":"ChannelARN"
    }
}
```

## 푸시 알림 수신 비활성화 또는 필터링
<a name="disable-filter-receipt"></a>

Amazon Chime SDK는 앱 인스턴스 사용자가 푸시 알림 수신 여부를 제어할 수 있는 다양한 옵션을 제공합니다.

**모든 푸시 알림 비활성화**  
 앱 인스턴스 사용자는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_UpdateAppInstanceUserEndpoint.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_UpdateAppInstanceUserEndpoint.html)를 직접 호출하고 `AllowMessages` 속성을 `NONE`으로 설정하여 푸시 알림을 완전히 비활성화할 수 있습니다.

**채널에 대한 푸시 알림 비활성화**  
앱 인스턴스 사용자는 **푸시 알림 기본 설정** 필드에서 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutChannelMembershipPreferences.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutChannelMembershipPreferences.html)를 `NONE`으로 설정하여 특정 채널에 대한 푸시 알림을 사용하지 않도록 설정할 수 있습니다.

**채널에 대한 푸시 알림 필터링**  
앱 인스턴스 사용자는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutChannelMembershipPreferences.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutChannelMembershipPreferences.html) API를 사용하여 특정 푸시 알림만 수신하도록 필터 규칙을 설정할 수 있습니다. 자세한 정보는 [필터 규칙을 사용하여 Amazon Chime SDK 메시징에 대한 메시지 필터링](filter-msgs.md) 섹션을 참조하세요.

# Amazon Chime SDK 메시징에 대한 푸시 알림 실패 디버깅
<a name="debug-notifications"></a>

Amazon Chime SDK는 푸시 메시지 전송 실패를 알리기 위해 Amazon EventBridge와 통합됩니다. 장애를 추가로 디버깅하려면 Amazon Pinpoint가 실패에 전송하는 [CloudWatch 지표](https://docs.aws.amazon.com/pinpoint/latest/userguide/monitoring-metrics.html)를 살펴볼 수도 있습니다.

다음 표에는 전송 오류 메시지와 그에 대한 설명이 나와 있습니다.


| 메시지 | 설명 | 
| --- | --- | 
| 알 수 없는 오류, 예외 또는 장애 때문에 요청 처리가 실패했습니다. | 내부 오류가 발생했습니다. 다시 시도하세요. | 
| 지정된 리소스를 찾을 수 없습니다. AppInstanceUserEndpoint가 비활성화됩니다. | Amazon Pinpoint 애플리케이션이 존재하지 않습니다. | 
| Amazon Pinpoint로 전송된 요청이 너무 많습니다. | Amazon Pinpoint가 발신 메시지를 제한했습니다. | 
| 메시지를 보낼 수 없습니다. Amazon Chime ServiceRoleForAmazonChimePushNotification의 IAM 권한 정책을 확인하세요. | Amazon Chime SDK용으로 생성된 역할에는 `mobiletargeting:SendMessages` 호출 권한이 없습니다. 역할에 대한 IAM 정책을 확인하세요. | 
| 메시지를 보낼 수 없습니다. Amazon Chime ServiceRoleForAmazonChimePushNotification의 IAM 신뢰 정책을 확인하세요. | Amazon Chime SDK에는 푸시 알림 역할에 액세스할 권한이 없습니다. IAM 역할의 신뢰 정책에 서비스 주체인 `messaging.chime.amazonaws.com`이 포함되어 있는지 확인하세요. | 

# 필터 규칙을 사용하여 Amazon Chime SDK 메시징에 대한 메시지 필터링
<a name="filter-msgs"></a>

Amazon Chime SDK는 앱 인스턴스 사용자의 채널 멤버십에 필터 규칙을 설정하여 수신할 메시지를 제한할 수 있도록 지원합니다. 필터 규칙은 채널 멤버십에 설정되며 메시지 속성 맵에 대해 실행됩니다. 메시지 속성 맵은 문자열 키와 문자열 값의 매핑이어야 합니다. 필터 규칙은 정확한 문자열 매칭을 통한 포함 및 제외를 지원합니다.

**중요**  
Amazon Chime SDK는 이스케이프된 JSON 문자열만 필터 규칙으로 지원합니다.
메시지 발신자를 포함한 알림 채널의 모든 멤버가 푸시 알림을 받습니다. 이를 방지하려면 아래 첫 번째 예제 규칙을 참조하세요.

채널 멤버십에 대한 필터 규칙을 설정하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutChannelMembershipPreferences.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutChannelMembershipPreferences.html) API를 사용합니다. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html) API 직접 호출의 일부로 채널 메시지에 메시지 속성을 포함할 수 있습니다.

**Topics**
+ [필터 규칙 유형](#filter-rule-types)
+ [필터 규칙 제한](#filter-rule-limits)
+ [필터 규칙 예](#example-preference-rule)

## 필터 규칙 유형
<a name="filter-rule-types"></a>

Amazon Chime SDK는 다음과 같은 유형의 필터 규칙을 지원합니다.
+ 포괄적이고 정확한 문자열 매칭
+ 배타적이고 정확한 문자열 매칭
+ AND 또는 OR를 사용하는 다중 필터 규칙

## 필터 규칙 제한
<a name="filter-rule-limits"></a>

Amazon Chime SDK는 필터 규칙에 다음과 같은 제한을 적용합니다.
+ 정확한 문자열 매칭만 지원합니다.
+ 총 필터 규칙 크기는 2KB입니다.
+ 총 메시지 속성 크기는 1KB입니다.
+ OR 필터 규칙 내의 개별 제약 조건은 최대 다섯 개입니다.
+ 전체 필터 규칙의 최대 복잡도는 20입니다. *복잡도*는 필터 규칙의 키와 값의 수를 합한 값으로 계산됩니다.

  예를 들어, 이 필터 규칙의 복잡도는 4입니다.

  ```
  "FilterRule": "{\"type\":[{\"anything-but\": [\"Room\"]}],\"mention\":[\"Bob\"]}
  ```

  이 값은 다음과 같이 계산합니다.

  ```
  Keys = “type” and “mention” - Complexity 2
  Values = "Room" and "Bob" -   Complexity 2
  
                        Total complexity = 4
  ```

## 필터 규칙 예
<a name="example-preference-rule"></a>

다음 예시는 채널 멤버십 기본 설정과 필터 규칙을 사용하는 여러 가지 방법을 보여 줍니다.

**메시지가 발신자에게 전달되지 않도록 방지**  
이 필터 규칙은 메시지 발신자를 제외한 모든 채널 멤버에게 메시지를 보냅니다.

```
{
    "Preferences": {
        "PushNotifications": {
            "FilterRule": "{\"type\":[{\"anything-but\": [\"USER_ARN\"]}]}",
            "AllowNotifications": "FILTERED"
        }
    }
}
```

위에 표시된 기본 설정이 적용된 앱 인스턴스 사용자는 다음 속성이 포함된 채널 메시지를 수신합니다.

```
"MessageAttributes": {
    "senderId": {
        "StringValues": ["USER_ARN"]
    }
}
```

**포괄적인 문자열 일치**  
 이 필터 규칙은 메시지 속성 키가 ‘mention’이고 값이 ‘Bob’인 모든 메시지를 허용합니다.

```
{
    "Preferences": {
        "PushNotifications": {
            "FilterRule": "{\"mention\":[\"Bob\"]}",
            "AllowNotifications": "FILTERED"
        }
    }
}
```

위에 표시된 기본 설정이 적용된 앱 인스턴스 사용자는 다음 메시지 속성이 포함된 채널 메시지를 수신합니다.

```
"MessageAttributes": {
    "mention": {
        "StringValues": ["Bob", "Alice"]
    }
}
```

하지만 앱 인스턴스 사용자는 다음과 같은 속성이 포함된 채널의 메시지를 받지 않습니다.

```
"MessageAttributes": {
    "mention": {
        "StringValues": ["Tom"]
    }
}
```

**배타적인 문자열 일치**  
 이 필터 규칙은 속성 키 ‘type’과 값 ‘Room’을 포함하는 메시지를 제외한 모든 메시지를 허용합니다.

```
{
    "Preferences": {
        "PushNotifications": {
            "FilterRule": "{\"type\":[{\"anything-but\": [\"Room\"]}]}",
            "AllowNotifications": "FILTERED"
        }
    }
}
```

이러한 기본 설정이 적용된 앱 인스턴스 사용자는 다음 메시지 속성이 포함된 채널 메시지를 받습니다.

```
"MessageAttributes": {
    "type": {
        "StringValues": ["Conversation"]
    }
}
```

하지만 앱 인스턴스 사용자에게는 다음 속성이 포함된 채널 메시지가 표시되지 않습니다.

```
"MessageAttributes": {
    "type": {
        "StringValues": ["Room"]
    }
}
```

**AND 로직이 포함된 다중 필터 규칙**  
필터 규칙을 AND 로직과 결합할 경우 메시지는 필터를 적용하기 위한 모든 필터 기준을 충족해야 합니다.

```
{
    "Preferences": {
        "PushNotifications": {
            "FilterRule": "{\"type\":[{\"anything-but\": [\"Room\"]}],\"mention\":[\"Bob\"]}",
            "AllowNotifications": "FILTERED"
        }
    }
}
```

위와 같은 기본 설정이 적용된 앱 인스턴스 사용자는 다음과 같은 메시지 속성이 포함된 채널의 메시지를 받습니다.

```
"MessageAttributes": {
    "mention": {
        "StringValues": ["Bob"]
    },
    "type": {
        "StringValues": ["Conversation"]
    }
}
```

**OR 로직이 포함된 다중 필터 규칙**  
`$or`을 사용해 필터 규칙을 OR 로직과 결합합니다. OR 로직을 사용하는 경우 메시지는 필터 적용 기준 중 하나를 충족해야 합니다.

```
{
    "Preferences": {
        "PushNotifications": {
            "FilterRule": "{\"$or\":[{\"mention\":[\"Bob\"]},{\"type\":[{\"anything-but\": [\"Room\"]}]}]}",
            "AllowNotifications": "FILTERED"
        }
    }
}
```

위와 같은 기본 설정이 적용된 앱 인스턴스 사용자는 다음과 같은 메시지 속성이 포함된 채널의 메시지를 받습니다.

```
"MessageAttributes": {
    "mention": {
        "StringValues": ["Bob"]
    }
}
```

위와 같은 기본 설정이 적용된 앱 인스턴스 사용자는 다음과 같은 메시지 속성이 포함된 채널의 메시지를 받습니다.

```
"MessageAttributes": {
    "type": {
        "StringValues": ["Conversation"]
    }
}
```

# Amazon Chime SDK 메시징에 서비스 연결 역할 사용
<a name="using-roles"></a>

Amazon Chime SDK는 AWS Identity and Access Management (IAM) [ 서비스 연결 역할을](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role) 사용합니다. 서비스 연결 역할은 Amazon Chime SDK에 직접 연결된 고유한 유형의 IAM 역할입니다. Amazon Chime SDK는 서비스 연결 역할을 미리 정의하며, 서비스에서 사용자를 대신하여 다른 AWS 서비스를 호출하는 데 필요한 모든 권한을 포함합니다.

서비스 연결 역할을 사용하면 필요한 권한을 수동으로 추가할 필요가 없으므로 Amazon Chime SDK를 더 효율적으로 설정할 수 있습니다. Amazon Chime SDK에서 서비스 연결 역할의 권한을 정의하며 다르게 정의되지 않은 한, Amazon Chime SDK만 해당 역할을 맡을 수 있습니다. 정의된 권한에는 신뢰 정책과 권한 정책이 포함됩니다. 권한 정책은 다른 어떤 IAM 엔터티에도 연결할 수 없습니다.

먼저 관련 리소스를 삭제해야만 서비스 연결 역할을 삭제할 수 있습니다. 이렇게 하면 리소스에 대한 액세스 권한을 실수로 삭제할 수 없기 때문에 Amazon Chime SDK 리소스가 보호됩니다.

서비스 연결 역할을 지원하는 다른 서비스에 대한 자세한 내용은 [IAM으로 작업하는AWS 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) 단원을 참조하세요. **서비스 연결 역할** 열에 **예**가 있는 서비스를 찾습니다. 해당 서비스에 대한 설명서를 보려면 링크가 있는 **예**를 선택합니다.

**Topics**
+ [Amazon Chime SDK 메시징에서 데이터 스트리밍에 서비스 연결 역할 사용](stream-service-linked.md)

# Amazon Chime SDK 메시징에서 데이터 스트리밍에 서비스 연결 역할 사용
<a name="stream-service-linked"></a>

다음 섹션에서는 데이터 스트리밍에 대한 서비스 연결 역할을 관리하는 방법을 설명합니다.

**Topics**
+ [서비스 연결 역할 권한](#role-permissions)
+ [서비스 연결 역할 만들기](#create-service-linked-role)
+ [서비스 연결 역할 편집](#editing-roles)
+ [서비스 연결 역할에서 사용되는 리소스 삭제](#cleaning-up)
+ [서비스 연결 역할 삭제](#deleting-roles)

## 서비스 연결 역할 권한
<a name="role-permissions"></a>

Amazon Chime SDK는 **AWSServiceRoleForChimeSDKMessaging**이라는 서비스 연결 역할을 사용합니다. 역할은 Amazon Chime SDK에서 사용하거나 관리하는 AWS 서비스 및 리소스(예: 데이터 스트리밍에 사용되는 Kinesis 스트림)에 대한 액세스 권한을 부여합니다.

**AWSServiceRoleForChimeSDKMessaging** 서비스 연결 역할은 역할을 수임할 수 있도록 다음 서비스를 신뢰합니다.
+ messaging.chime.amazonaws.com

역할 권한 정책은 Amazon Chime SDK가 지정된 리소스에서 다음 작업을 완료하도록 허용합니다.
+ `kms:GenerateDataKey`(`kinesis.*.amazonaws.com`을 사용하여 요청한 경우만)
+ `kinesis:PutRecord`, `kinesis:PutRecords`, 또는 `kinesis:DescribeStream`(`arn:aws:kinesis:*:*:stream/chime-messaging-*` 형식의 스트림에서만)

다음 예제는 정책을 보여줍니다.

------
#### [ JSON ]

****  

```
{
    	"Version":"2012-10-17",		 	 	 
    	"Statement": [
    		{
    			"Effect": "Allow",
    			"Action": [
    				"kms:GenerateDataKey"
    			],
    			"Resource": "*",
    			"Condition": {
    				"StringLike": {
    					"kms:ViaService": [
    						"kinesis.*.amazonaws.com"
    					]
    				}
    			}
    		},
    		{
    			"Effect": "Allow",
    			"Action": [
    				"kinesis:PutRecord",
    				"kinesis:PutRecords",
    				"kinesis:DescribeStream"
    			],
    			"Resource": [
    				"arn:aws:kinesis:*:*:stream/chime-messaging-*"
    			]
    		}
    	]
    }
```

------

IAM 엔터티(사용자, 그룹 또는 역할 등)가 서비스 연결 역할을 생성하거나 편집하거나 삭제할 수 있도록 권한을 구성해야 합니다. 자세한 내용은 IAM 사용 설명서**의 [서비스 연결 역할 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)을 참조하세요.

## 서비스 연결 역할 만들기
<a name="create-service-linked-role"></a>

서비스 연결 역할은 수동으로 생성할 필요가 없습니다. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutMessagingStreamingConfigurations.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutMessagingStreamingConfigurations.html) API를 사용하여 데이터 스트리밍 구성을 생성하면 Amazon Chime SDK에서 서비스 연결 역할을 생성합니다.

또한 IAM 콘솔을 사용해 Amazon Chime SDK 사용 사례로 서비스 연결 역할을 생성할 수도 있습니다. AWS CLI 또는 AWS API에서 서비스 이름으로 `messaging.chime.amazonaws.com` 서비스 연결 역할을 생성합니다. 자세한 정보는 IAM 사용 설명서**의 [서비스 연결 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#create-service-linked-role)을 참조하세요. 이 역할을 삭제한 경우 이 프로세스를 반복하여 역할을 다시 생성할 수 있습니다.

## 서비스 연결 역할 편집
<a name="editing-roles"></a>

서비스 연결 역할을 생성한 후에는 IAM을 사용하여 설명만 편집할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [서비스 연결 역할 편집](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)을 참조하세요.

## 서비스 연결 역할에서 사용되는 리소스 삭제
<a name="cleaning-up"></a>

IAM을 사용하여 서비스 연결 역할을 삭제하기 전에 먼저 역할에서 사용되는 리소스를 삭제해야 합니다.

**참고**  
Amazon Chime SDK에서 리소스를 사용하는 동안 리소스를 삭제하려고 하면 삭제에 실패할 수 있습니다. 삭제에 실패하면 몇 분 기다렸다가 작업을 다시 시도하세요.

**AmazonChimeServiceChatStreamingAccess 역할에서 사용하는 리소스를 삭제하려면**  
다음 CLI 명령을 실행하여 앱 인스턴스의 데이터 스트리밍을 끕니다.
+ `aws chime-sdk-messaging delete-messaging-streaming-configurations --app-instance-arn app_instance_arn`

이 작업을 수행하면 앱 인스턴스의 모든 스트리밍 구성이 삭제됩니다.

## 서비스 연결 역할 삭제
<a name="deleting-roles"></a>

서비스 연결 역할이 필요한 기능 또는 서비스가 더 이상 필요 없는 경우에는 해당 역할을 삭제할 것을 권합니다. 그렇지 않은 경우 적극적으로 모니터링하거나 유지 관리하지 않는 미사용 엔터티가 발생합니다. 단, 서비스 연결 역할에서 사용하는 리소스를 먼저 삭제해야 수동으로 역할을 삭제할 수 있습니다.

IAM 콘솔 AWS CLI또는 AWS API를 사용하여 **AmazonChimeServiceRoleForChimeSDKMessaging** 서비스 연결 역할을 삭제할 수 있습니다. 자세한 내용은 IAM 사용 설명서의 [서비스 연결 역할 삭제](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)를 참조하세요.

# 채널 흐름을 사용하여 Amazon Chime SDK 메시징용 메시지 처리
<a name="using-channel-flows"></a>

채널 흐름을 사용하면 이동 가능한 메시지가 메시지 채널에서 수신자에게 전달되기 전에 메시지에 대한 비즈니스 로직을 실행할 수 있습니다. 채널 흐름은 메시지에서 주민등록번호, 전화번호 또는 욕설을 삭제하는 등의 작업을 수행할 수 있습니다. 또한 채널 흐름을 사용하여 설문 조사 응답을 집계한 후 결과를 참가자에게 다시 보내는 등의 기능을 수행할 수 있습니다.

**사전 조건**
+ 기본 Amazon Chime SDK 기능(예: 채널 관리, 메시지 송수신 등)에 대한 지식이 있어야 합니다.
+ Amazon Chime SDK 메시징 API를 호출할 수 있어야 합니다.

**채널 흐름 개념**

채널 흐름을 효과적으로 사용하려면 다음 개념을 이해해야 합니다.

**채널 프로세서**  
채널 메시지에서 사전 처리 로직을 실행하는 AWS Lambda 함수입니다. 채널을 채널 흐름에 연결하면 흐름의 프로세서가 채널의 모든 메시지에 대해 호출됩니다. 대기 시간을 줄이려면 대부분의 사용 사례에서 단일 프로세서가 가장 효과적입니다. 마지막으로 각 프로세서는 처리가 완료되면 Amazon Chime SDK 서비스에 콜백을 보내야 합니다.  
현재는 채널 흐름당 하나의 프로세서만 지원합니다. 프로세서가 두 개 이상 필요한 경우 지원 티켓을 제출하여 프로세서를 늘리세요.

**채널 플로우**  
채널 플로우는 최대 3개의 채널 프로세서와 하나의 실행 시퀀스를 포함하는 컨테이너입니다. 흐름을 채널에 연결하면 프로세서가 해당 채널로 전송되는 모든 메시지에 대해 작업을 수행합니다.

**채널 흐름 호출하기**  
채널 흐름을 호출하는 항목은 다음과 같습니다.
+ 새로운 영구 표준 메시지
+ 새로운 비영구 표준 메시지
+ 업데이트된 영구 표준 메시지

**참고**  
채널 흐름은 제어 또는 시스템 메시지를 처리하지 않습니다. Amazon Chime SDK 메시징에서 제공하는 메시지 유형에 대한 자세한 내용은 [Amazon Chime SDK 메시지 유형 이해](msg-types.md)을 참조하세요.

**Topics**
+ [Amazon Chime SDK 메시징용 채널 프로세서 설정](processor-setup.md)
+ [Amazon Chime SDK 메시징용 채널 흐름 생성](create-channel-flow.md)
+ [Amazon Chime SDK 메시징을 위한 채널 흐름 연결 및 연결 해제](associate-channel-flow.md)
+ [Amazon Chime SDK 메시징에서 메시지 보내기](sending-msgs.md)
+ [Amazon Chime SDK 메시징용 EventBridge로 자동화를 통한 장애 알림 생성](event-bridge-events.md)

# Amazon Chime SDK 메시징용 채널 프로세서 설정
<a name="processor-setup"></a>

채널 흐름을 사용하려면 먼저 사용 사례에 맞는 사전 처리를 처리할 프로세서 Lambda 함수를 생성해야 합니다. 예를 들어 메시지 내용 또는 메타데이터를 업데이트하거나, 메시지를 거부하여 전송되지 않도록 하거나, 원본 메시지가 전달되도록 할 수 있습니다.

**사전 조건**
+ Lambda 함수는 AppInstance와 동일한 AWS 계정 및 동일한 AWS 리전에 있어야 합니다.

**간접 호출 권한 부여하기**  
Amazon Chime SDK 서비스에 Lambda 리소스를 호출하여 메시지를 검토할 수 있는 권한을 부여해야 합니다. 권한에 대한 자세한 내용은 [AWS Lambda에서 리소스 기반 정책 사용](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)을 참조하세요. 예제:

  
**주체**: "messaging.chime.amazonaws.com"  
**작업**: lambda:InvokeFunction  
**효과**: 허용  
**AWS:SourceAccount**:*Your AWS AccountId*.  
**AWS:SourceArn**: `"arn:aws:chime:region:AWS AccountId: appInstance/"`

**참고**  
특정 앱 인스턴스 ID를 제공하여 프로세서를 호출하거나 와일드카드를 사용하여 계정의 모든 Amazon Chime SDK 앱 인스턴스가 프로세서를 호출하도록 허용할 수 있습니다.

**콜백 권한 부여하기**  
또한 프로세서 Lambda 함수가 `ChannelFlowCallback` API를 호출하도록 허용해야 합니다. 이 작업에 대한 자세한 내용은 *AWS Lambda 개발자 안내서*의 [AWS Lambda 실행 역할](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) 항목을 참조하세요.

Lambda 함수의 실행 역할에 인라인 정책을 추가할 수 있습니다. 이 예제에서는 프로세서가 `ChannelFlowCallback API`를 호출할 수 있습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "chime:ChannelFlowCallback"
            ],
            "Resource": [
            "arn:aws:chime:us-east-1:111122223333:appInstance/*"
            ]
        }
    ]
}
```

------

**참고**  
Lambda 함수에 대한 모범 사례를 따르세요. 자세한 내용은 다음 주제를 참조하세요.  
[Performance Efficiency Best Practices](https://docs.aws.amazon.com/whitepapers/latest/serverless-architectures-lambda/performance-efficiency-best-practices.html) 
[작업 모범 사례 AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)
[예약된 동시성 구성](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html#configuration-concurrency-reserved)
[비동기식 간접 호출](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html)

**프로세서 Lambda 함수 호출하기**  
사용자가 메시지를 보내면 다음 입력 요청이 프로세서 Lambda 함수를 호출합니다.

```
{
    "EventType": "string"
    "CallbackId": "string"
    "ChannelMessage": {
        "MessageId": "string",
        "ChannelArn": "string",
        "Content": "string",
        "Metadata": "string",
        "Sender":{
            "Arn": "string", 
            "Name": "string"
        },
        "Persistence": "string",
        "LastEditedTimestamp": "string", 
        "Type": "string",
        "CreatedTimestamp": "string", 
    }
}
```

EventType  
프로세서로 전송되는 이벤트입니다. 값은 `CHANNEL_MESSAGE_EVENT` 상수입니다.

CallbackId  
프로세서에서 `ChannelFlowCallback` API를 호출할 때 사용되는 토큰입니다.

ChannelMessage  
*ChannelArn*   채널의 ARN  
*Content*   처리할 메시지 내용  
*CreatedTimestamp*   메시지가 작성된 시간  
*LastEditedTimestamp*   메시지가 편집된 시간  
*MessageId*   메시지 식별자  
*Metadata*   처리할 메시지 메타데이터  
*Persistence*   백엔드에서 메시지가 지속될지 여부를 제어하는 부울입니다. 유효한 값: `PERSISTENT | NON_PERSISTENT`  
*Sender*   메시지를 보낸 사람입니다. 유형: [identity 객체](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_Identity.html).  
*유형*   메시지 유형입니다. ChannelFlow는 `STANDARD` 메시지 유형만 지원합니다. 유효한 값: `STANDARD`

프로세서 함수는 각 메시지에 대해 다음을 결정합니다.
+ 메시지 콘텐츠, 메타데이터 또는 둘 다를 업데이트할지 여부
+ 메시지를 거부할지 여부 
+ 메시지를 변경하지 않고 그대로 둘지 여부

처리가 완료되면 프로세서 Lambda 함수는 메시지를 모든 수신자에게 보낼 수 있도록 Amazon Chime SDK 메시징 서비스에 결과를 다시 전송합니다. 프로세서 Lambda 함수가 결과를 다시 보낼 때까지 메시지 상태는 `PENDING`으로 표시됩니다. 프로세서 Lambda 함수는 48시간 이내에 결과를 다시 전송해야 합니다. 이후 메시지 전송은 보장하지 않으며 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelFlowCallback.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelFlowCallback.html) API에서 금지된 예외 오류 메시지가 발생합니다. 결과를 다시 보내려면 `ChannelFlowCallback` API를 간접 호출하세요.

# Amazon Chime SDK 메시징용 채널 흐름 생성
<a name="create-channel-flow"></a>

프로세서 설정이 완료되면 Amazon Chime SDK 메시징 API를 사용하여 채널 흐름을 생성합니다. `Fallback` 작업을 사용하여 채널 흐름이 프로세서 Lambda 함수에 연결할 수 없는 경우 처리를 중지할지 계속할지 여부를 정의할 수 있습니다. 프로세서에 `ABORT` 폴백 작업이 있는 경우 프로세서는 메시지 상태를 `FAILED`로 설정하고 메시지를 보내지 않습니다. 채널 흐름 시퀀스의 마지막 프로세서의 폴백 작업이 `CONTINUE`인 경우에는 메시지가 처리된 것으로 간주되어 채널의 수신자에게 전송됩니다. 채널 흐름을 만든 후에는 이를 개별 채널에 연결할 수 있습니다. 자세한 내용은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelFlow.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelFlow.html) API 설명서를 참조하세요.

# Amazon Chime SDK 메시징을 위한 채널 흐름 연결 및 연결 해제
<a name="associate-channel-flow"></a>

채널을 채널 흐름과 연결하면 채널 흐름의 프로세서가 해당 채널로 전송되는 모든 메시지를 사전 처리합니다. 채널 흐름 연결 및 연결 해제 API를 호출하려면 채널 중재자 또는 관리자여야 합니다. 진행하면서 이 사실들을 기억하세요.
+ 언제든지 최대 1개의 채널 흐름을 채널에 연결할 수 있습니다. 채널 흐름을 연결하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_AssociateChannelFlow.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_AssociateChannelFlow.html) API를 직접 호출합니다.
+ 채널 흐름의 연결을 해제하고 채널 메시지의 사전 처리를 중지하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DisassociateChannelFlow.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DisassociateChannelFlow.html) API를 직접 호출합니다.

# Amazon Chime SDK 메시징에서 메시지 보내기
<a name="sending-msgs"></a>

`SendChannelMessage` API를 사용하여 채널에 메시지를 보낼 수 있습니다. 채널 흐름과 연결된 채널의 경우 프로세서는 다음 상태 값 중 하나를 할당합니다.




| 상태 메시지 | 설명 | 
| --- | --- | 
| `SENT` | 메시지가 성공적으로 처리되었습니다. | 
| `PENDING` | 처리가 진행 중입니다. | 
| `FAILED` | 프로세서 Lambda 함수에 연결할 수 없어서 처리에 실패했습니다. | 
| `DENIED` | 메시지가 전송되지 않습니다. | 

**중간 상태 이벤트 수신**  
**Websocket 이벤트**

Websocket 이벤트는 성공적으로 연결을 설정한 후 채널로 전송됩니다. 자세한 정보는 [WebSockets를 사용하여 Amazon Chime SDK 메시징에서 메시지 수신](websockets.md) 섹션을 참조하세요.


| 이벤트 유형 | Status | 수신자 | 참고 | 
| --- | --- | --- | --- | 
| `CREATE_CHANNEL_MESSAGE` | `SENT` | 모든 채널 멤버 | `SendChannelMessage` API의 사전 처리에 성공함 | 
| `UPDATE_CHANNEL_MESSAGE` | `SENT` | 모든 채널 멤버 | `UpdateChannelMessage` API의 사전 처리에 성공함 | 
| `PENDING_CREATE_CHANNEL_MESSAGE` | `PENDING` | 메시지 발신자 전용 | `SendChannelMessage` API의 사전 처리가 진행 중임 | 
| `PENDING_UPDATE_CHANNEL_MESSAGE` | `PENDING` | 메시지 발신자 전용 | `UpdateChannelMessage` API의 사전 처리가 진행 중임 | 
| `FAILED_CREATE_CHANNEL_MESSAGE` | `FAILED` | 메시지 발신자 전용 | `SendChannelMessage` API의 사전 처리가 실패함 | 
| `FAILED_UPDATE_CHANNEL_MESSAGE` | `FAILED` | 메시지 발신자 전용 | `UpdateChannelMessage` API의 사전 처리가 실패함 | 
| `DENIED_CREATE_CHANNEL_MESSAGE` | `DENIED` | 메시지 발신자 전용 | `SendChannelMessage` API의 프로세서가 메시지를 거부함 | 
| `DENIED_UPDATE_CHANNEL_MESSAGE` | `DENIED` | 메시지 발신자 전용 | `UpdateChannelMessage` API의 프로세서가 메시지를 거부함 | 

**GetChannelMessageStatus API**  
이 API는 잘못된 웹 소켓 연결로 인해 이벤트가 수신되지 않은 경우 메시지 상태를 검색하는 다른 방법을 제공합니다. 자세한 내용은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetChannelMessageStatus.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetChannelMessageStatus.html) API 설명서를 참조하세요.

**참고**  
이 API는 거부된 메시지에 대한 상태를 저장하지 않기 때문에 상태를 반환하지 않습니다.

# Amazon Chime SDK 메시징용 EventBridge로 자동화를 통한 장애 알림 생성
<a name="event-bridge-events"></a>

Amazon Chime SDK는 프로세서 Lambda 함수를 호출하는 중 오류가 발생할 때 이벤트를 제공합니다. 이벤트는 채널 흐름을 생성할 때 프로세서에 지정된 `Fallback` 작업에 관계없이 전송됩니다. 간단한 규칙을 작성하여 이러한 이벤트를 지정하고, 이러한 이벤트 중 하나라도 규칙과 일치할 때 수행할 자동화된 작업을 지정할 수 있습니다. 자세한 내용은 [Amazon EventBridge 사용 설명서](https://docs.aws.amazon.com/eventbridge/latest/userguide/)를 참조하세요. 이와 같은 오류가 발생하면 구성한 `Fallback` 작업에 따라 채널의 구성원이 메시지를 보낼 수 없거나 메시지가 처리 없이 채널을 통해 전달됩니다. `Fallback` 작업에 대한 자세한 내용은 Amazon Chime SDK API 참조에서 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_Processor.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_Processor.html)를 참조하세요.

이 예시는 일반적인 장애 이벤트를 보여줍니다.

```
{
    "version": "0",
    "id": "12345678-1234-1234-1234-111122223333",
    "detail-type": "Chime ChannelFlow Processing Status",
    "source": "aws.chime",
    "account": "111122223333",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "region",
    "resources": [],
    "detail": {
        "eventType": "ProcessorInvocationFailure",
        "appInstanceArn": "arn:aws:chime:region:AWSAccountId:app-instance/AppInstanceId",
        "channelArn": "arn:aws:chime:region:AWSAccountId:app-instance/AppInstanceId/channel/ChannelId",
        "messageId": "298efac7298efac7298efac7298efac7298efac7298efac7298efac7298efac7",
        "processorResourceArn": "arn:aws:lambda:region:AWSAccountId:function:ChannelFlowLambda",
        "failureReason": "User is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:region:AppInstanceId:function:ChannelFlowLambda because no resource-based policy allows the lambda:InvokeFunction action"
      }
}
```

# Amazon Chime SDK 메시징을 위한 지능형 채널 에이전트로 AppInstanceBots 사용
<a name="appinstance-bots"></a>

`AppInstanceBots`를 지능형 채널 에이전트로 사용할 수 있습니다. 이 에이전트는 채널 멤버가 `ChannelMessages`를 통해 보낸 주요 문구를 인식합니다. 봇의 자연어 이해 모델이 메시지를 해석합니다. 그러면 한 명 이상의 채널 멤버가 봇의 모델에 의해 정의된 자연어 대화에 참여할 수 있습니다. 봇을 제공하므로 대화의 깊이와 엔터프라이즈 시스템과의 통합을 제어할 수 있습니다.

**사전 조건**
+ `AppInstanceUsers` 만들기, 채널 관리, 메시지 송수신 등 기본적인 Amazon Chime SDK 기능에 대한 지식이 있어야 합니다.
+ Amazon Chime SDK 메시징 API를 호출할 수 있어야 합니다.
+ Amazon Lex V2 봇 생성, 인텐트 및 슬롯 모델링, 봇 버전, 별칭 생성, 세션 상태 사용, Lambda 후크 통합과 같은 기본 Amazon Lex V2 기능에 대한 지식이 있어야 합니다.

**중요**  
Amazon Lex V2의 사용에는 AWS Machine Learning 및 인공 지능 서비스와 관련된 약관을 포함한 [AWS 서비스 약관](https://aws.amazon.com/service-terms/)이 적용됩니다.

**Topics**
+ [Amazon Chime SDK 메시징용 Amazon Lex V2 봇 생성](create-lex-bot.md)
+ [Amazon Chime SDK 메시징용 AppInstance 봇 설정](appinstance-bot-setup.md)
+ [Amazon Chime SDK 메시징용 AppInstanceBot에 대한 채널 멤버십 생성](channel-membership.md)
+ [Amazon Chime SDK 메시징용 AppInstanceBot에 메시지 보내기](message-appinstancebot.md)
+ [Amazon Chime SDK 메시징을 위한 Amazon Lex 메시지 처리](process-from-lexv2.md)
+ [Amazon Chime SDK 메시징을 위한 AppInstanceBot 응답 처리](process-response.md)
+ [규칙을 사용하여 Amazon Chime SDK 메시징용 Amazon EventBridge에 이벤트 전송](event-bridge-alerts.md)
+ [Amazon Chime SDK 메시징용 Amazon Lex V2 봇으로 구성된 AppInstanceBot 문제 해결](troubleshoot-lex-bots.md)

# Amazon Chime SDK 메시징용 Amazon Lex V2 봇 생성
<a name="create-lex-bot"></a>

AppInstance 봇을 에이전트로 사용하려면 먼저 Amazon Lex V2 봇을 생성하여 지능형 에이전트 시나리오의 대화 상호 작용을 관리해야 합니다. Amazon Lex V2 봇 구축을 시작하려면 *Amazon Lex V2 개발자 안내서*의 [Amazon Lex V2 시작하기](https://docs.aws.amazon.com/lexv2/latest/dg/getting-started.html) 섹션을 참조하세요. Amazon Lex V1 봇을 Amazon Lex V2로 마이그레이션하는 방법에 대한 자세한 내용은 [Amazon Lex V1에서 V2로의 마이그레이션 안내서](https://docs.aws.amazon.com/lexv2/latest/dg/migration.html)를 참조하세요.

**Topics**
+ [사전 조건](#lex-prereqs)
+ [간접 호출 권한 부여하기](#invocation-perms)
+ [Amazon Chime SDK 메시징용 환영 인텐트 생성](welcome-intent.md)
+ [Amazon Chime SDK 메시징용 Amazon Lex V2 봇 버전 생성](lex-versions.md)
+ [Amazon Chime SDK 메시징용 Amazon Lex V2 봇 별칭 생성](lex-aliases.md)

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

Amazon Lex V2 봇에는 다음과 같은 사전 조건이 있어야 합니다.
+ Amazon Lex V2 런타임 엔드포인트를 지원하는 AWS 리전에서 봇을 생성해야 합니다.
+ `AppInstance` 및와 동일한 AWS 계정 및 리전에서 봇을 생성해야 합니다`AppInstanceBot`.
+ 봇은 리소스 기반 정책을 통해 `messaging.chime.amazonaws.com` 서비스 주체에 간접 호출 권한을 부여해야 합니다.
+ 봇은 환영 인텐트를 모델링할 수 있습니다. 이를 통해 `AppInstanceBot`은 채널에 가입할 때 자신과 자신의 기능을 알릴 수 있습니다.
+ `AppInstanceBot`을 구성하려면 봇에 프로덕션 버전 및 별칭이 있어야 합니다.
+ 봇은 지원되는 언어와 로캘을 사용해야 합니다. 언어 및 로캘에 대한 자세한 내용은 Amazon Lex V2 개발자 안내서**의 [Amazon Lex V2에서 지원되는 언어 및 로캘](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html) 섹션을 참조하세요.

## 간접 호출 권한 부여하기
<a name="invocation-perms"></a>

`AppInstanceBot`이 Amazon Lex V2 봇을 호출하려면 Amazon Chime SDK 메시징 서비스 주체가 Amazon Lex Bot 리소스를 호출할 권한이 있어야 합니다. Amazon Lex V2 리소스 기반 정책 권한에 대한 자세한 내용은 Amazon Lex V2 개발자 안내서**의 [Amazon Lex V2에 대한 리소스 기반 정책 예시](https://docs.aws.amazon.com/lexv2/latest/dg/security_iam_resource-based-policy-examples.html)를 참조하세요.

다음 예시에서는 리소스 기반 정책을 보여줍니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "messaging.chime.amazonaws.com"
      },
      "Action": [
        "lex:PutSession",
        "lex:DeleteSession",
        "lex:RecognizeText"
      ],
      "Resource": "arn:aws:lex:us-east-1:111122223333:bot-alias/lex-bot-id/lex-bot-alias-id",
      "Condition": {
        "StringEquals": {
        "AWS:SourceAccount": "111122223333"
        },
        "ArnEquals": {
        "AWS:SourceArn": "arn:aws:chime:us-east-1:111122223333:app-instance/app-instance-id/bot/app-instance-bot-id"
        }
      }
    }
  ]
}
```

------

**참고**  
하나의 `AppInstanceBot`이 Amazon Lex V2 봇을 호출하도록 허용하려면 AppInstanceBot의 ID를 사용합니다. `AppInstanceBots` 내의 모든 `AppInstance`이 Amazon Lex V2 봇을 호출할 수 있도록 허용하려면 와일드카드를 사용합니다. 예제:  
`arn:aws:chime:region:aws-account-id:app-instance/app-instance-id/bot/*`

# Amazon Chime SDK 메시징용 환영 인텐트 생성
<a name="welcome-intent"></a>

Amazon Lex V2 봇 모델에 선택적 환영 인텐트를 추가하면 `AppInstanceBot`이 채널에 참가할 때 환영 인텐트와 그 기능을 알릴 수 있습니다. 환영 인텐트는 메시지를 표시하거나 채널 구성원과 대화를 시작할 수 있습니다. 환영 인텐트의 이름은 다양할 수 있으며 AppInstanceBot의 구성에서 이름을 정의합니다.

엔드포인트에 대한 자세한 내용은 Amazon Lex V2 개발자 안내서**에서 [인텐트 추가하기](https://docs.aws.amazon.com/lexv2/latest/dg/build-intents.html)를 참조하세요.

# Amazon Chime SDK 메시징용 Amazon Lex V2 봇 버전 생성
<a name="lex-versions"></a>

Amazon Lex V2 Bot을 생성할 때는 *초안* 버전만 생성합니다. 초안은 업데이트할 수 있는 봇의 작업 사본입니다. 기본적으로 초안 버전은 `TestBotAlias`라는 별칭과 연결되어 있으며 수동 테스트용으로만 드래프트 봇을 사용해야 합니다.

다이얼로그 모델링과 드래프트 봇 빌드를 완료한 후, 드래프트 Lex bot의 번호가 매겨진 스냅샷인 하나 이상의 *버전*을 생성합니다. 버전을 사용하면 클라이언트 애플리케이션이 사용하는 구현을 제어할 수 있습니다. 예를 들어 개발, 베타 배포, 프로덕션 등의 워크플로의 여러 부분에서 사용할 수 있도록 버전을 게시할 수 있습니다.

Lex 봇 버전 관리에 대한 자세한 내용은 Amazon Lex V2 개발자 안내서**의 [버전 생성하기](https://docs.aws.amazon.com/lexv2/latest/dg/versions.html)를 참조하세요.

# Amazon Chime SDK 메시징용 Amazon Lex V2 봇 별칭 생성
<a name="lex-aliases"></a>

Amazon Lex V2 봇의 버전을 하나 이상 생성한 후에는 *별칭*을 생성합니다. 별칭은 Amazon Lex V2 봇 버전에 대한 명명된 포인터 역할을 합니다. 예를 들어 별칭은 한 번에 하나의 버전에만 연결할 수 있습니다.

Lex 봇 별칭에 대한 자세한 내용은 Lex V2 개발자 안내서**의 [별칭 생성하기](https://docs.aws.amazon.com/lexv2/latest/dg/aliases.html)를 참조하세요.

# Amazon Chime SDK 메시징용 AppInstance 봇 설정
<a name="appinstance-bot-setup"></a>

모델, 버전 및 별칭이 포함된 Amazon Lex V2 봇을 만든 후에는 Amazon Chime SDK 메시징 API 또는 CLI를 사용하여 AppInstanceBot을 생성합니다. API 사용에 대한 자세한 내용은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_CreateAppInstanceBot.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_CreateAppInstanceBot.html) API 설명서를 참조하세요.

**참고**  
`InvokedBy` 속성을 사용하여 `AppInstanceBot`의 대화 상호 작용 동작을 구성할 수 있습니다. 표준 메시지 또는 대상 메시지와 같이 봇을 트리거하는 메시지 유형을 구성할 수 있습니다.

다음 예제에서는 AWS CLI를 사용하여 `MENTIONS`, 대상 메시지가 포함된 모든 표준 메시지가 호출할 수 있는 AppInstanceBot을 생성하는 방법을 보여줍니다.

```
aws chime-sdk-identity create-app-instance-bot \
--app-instance-arn app-instance-arn \
--name app-instance-bot-name \
--configuration '{
   "Lex": {
      "LexBotAliasArn": "lex-bot-alias-arn",
      "LocaleId": "lex_bot_alias_locale_id",
      "InvokedBy": {
          "StandardMessages": "MENTIONS",
          "TargetedMessages": "ALL"
      }
      "WelcomeIntent": "welcome-intent-name"
   }
}
```

# Amazon Chime SDK 메시징용 AppInstanceBot에 대한 채널 멤버십 생성
<a name="channel-membership"></a>

AppInstanceBot을 만든 후에는 새 채널이나 기존 채널에 멤버로 추가합니다. 자세한 내용은 Amazon Chime SDK 메시징 API** 설명서에서 [CreateChannel](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html) 및 [ CreateChannelMembership](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html) 섹션을 참조하세요.

다음 예제에서는 AWS CLI를 사용하여 채널을 생성하고를 멤버`AppInstanceBot`로 추가하는 방법을 보여줍니다.

```
aws chime-sdk-messaging create-channel \
--chime-bearer caller_app_instance_user_arn \
--app-instance-arn app_instance_arn \
--name channel_name \
--member-arns '[
   "app_instance_bot_arn"
]'
```

다음 예제에서는 AWS CLI를 사용하여 기존 채널에 `AppInstanceBot`를 추가하는 방법을 보여줍니다.

```
aws chime-sdk-messaging create-channel-membership \
--chime-bearer caller_app_instance_user_arn \
--channel-arn channel_arn \
--member-arn app_instance_bot_arn
```

# Amazon Chime SDK 메시징용 AppInstanceBot에 메시지 보내기
<a name="message-appinstancebot"></a>

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html) API를 사용하여 AppInstanceBot에 메시지를 보낼 수 있습니다. AppInstanceBot이 속한 채널에 메시지를 보냅니다. [자연어 이해 모델](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html)이 메시지 콘텐츠를 인식하고 Amazon Lex 인텐트를 도출하면 AppInstanceBot이 채널 메시지로 응답하고 대화를 시작합니다.

또한 채널의 멤버(AppInstanceUser 또는 AppInstanceBot)에게 대상 메시지를 보낼 수도 있습니다. 대상과 발신자만 대상 메시지를 볼 수 있습니다. 대상 메시지를 볼 수 있는 사용자만 해당 메시지에 대한 작업을 수행할 수 있습니다. 그러나 관리자는 대상이 볼 수 없는 대상 메시지를 삭제할 수 있습니다.

다음 예제에서는 AWS CLI를 사용하여 채널 메시지를 전송하는 방법을 보여줍니다.

```
aws chime-sdk-messaging send-channel-message \
--chime-bearer caller_app_instance_user_arn \
--channel-arn channel_arn \
--content content \
--type STANDARD \
--persistence PERSISTENT
```

# Amazon Chime SDK 메시징을 위한 Amazon Lex 메시지 처리
<a name="process-from-lexv2"></a>

Amazon Lex에 메시지를 보낼 때 Amazon Chime SDK 메시징은 채널 및 발신자의 ARN 정보를 요청 특성으로 `CHIME.channel.arn` 및 `CHIME.sender.arn`에 채웁니다. 이 속성을 사용하여 메시지를 보낸 사람과 보낸 사람이 속한 채널을 확인할 수 있습니다. 자세한 내용은 *Amazon Lex 개발자 안내서*의 [AWS Lambda 함수를 사용하여 사용자 지정 로직 활성화](https://docs.aws.amazon.com/lexv2/latest/dg/lambda.html)를 참조하세요.

# Amazon Chime SDK 메시징을 위한 AppInstanceBot 응답 처리
<a name="process-response"></a>

사용자가 메시지를 보내면 AppInstanceBot은 채널 메시지로 응답합니다. 채널 메시지를 나열하여 봇의 응답을 받을 수 있습니다.

다음 예는 CLI를 사용하여 채널 메시지를 나열하는 방법을 보여 줍니다.

```
aws chime-sdk-messaging list-channel-messages \
--chime-bearer caller_app_instance_user_arn \
--channel-arn channel_arn
```

AppInstanceBot의 성공 응답은 다음 형식을 사용합니다.

```
{
    "MessageId": "messageId",
    "Content": "*{\"Messages\":[{\"...\"}]}*",
    "ContentType": "application/amz-chime-lex-msgs",
    "MessageAttributes": {
        "CHIME.LEX.sessionState.intent.name": {
            "StringValues": [
                "lex_bot_intent_name"
            ]
        },
        "CHIME.LEX.sessionState.intent.state": {
            "StringValues": [
                "lex_bot_intent_fullfilment_status"
            ]
        },
        "CHIME.LEX.sessionState.originatingRequestId": {
            "StringValues": [
                "lex_bot_originating_request_id"
            ]
        },
        "CHIME.LEX.sessionState.sessionId": {
            "StringValues": [
                "lex_bot_session_id"
            ]
        }
    },
    "Sender": {
        "Arn": "app_instance_bot_arn",
        "Name": "app_instance_bot_name"
    },
    "Type": "STANDARD",
}
```

**Content**  
`Content` 필드에는 Amazon Lex V2 봇에서 전송된 메시지 목록이 포함되어 있습니다. 이러한 메시지에 대한 자세한 내용은 Amazon Lex V2 `RecognizeText` API의 [ 메시지](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html#lexv2-runtime_RecognizeText-response-messages)를 참조하세요.  
다음은 시작 메시지에서 `Content` 필드를 사용하는 방법을 보여 주는 예시입니다.  

```
{
    "Messages":
    [
        {
            "Content": "Hello!",
            "ContentType": "PlainText"
        },
        {
            "ContentType": "ImageResponseCard",
            "ImageResponseCard":
            {
                "Title": "Hello! I'm BB, the Bank Bot.",
                "Subtitle": "I can help you with the following transactions",
                "Buttons":
                [
                    {
                        "Text": "Check balance",
                        "Value": "Check balance"
                    },
                    {
                        "Text": "Escalate to agent",
                        "Value": "Escalate to agent"
                    }
                ]
            }
        }
    ]
}
```
실패 응답의 경우 콘텐츠 필드에는 다음과 같은 형식의 오류 메시지와 코드가 포함됩니다.  

```
{
    "Code": error_code
}
```

**ContentType**  
`ContentType`은 `Content` 필드에 포함된 페이로드 유형을 나타내므로 `Content` 필드를 구문 분석하려면 반드시 확인해야 합니다.  
Lex V2 봇은 다른 `ContentType`을 사용합니다.
`ContentType`은 성공 응답의 경우 `application/amz-chime-lex-msgs`로, 실패 응답의 경우 `application/amz-chime-lex-error`로 설정합니다.

**MessageAttribute**  
*MessageAttribute*는 문자열 키와 문자열 값의 매핑입니다. `AppInstanceBot`의 응답에는 Amazon Lex 봇의 응답에 매핑된 다음과 같은 메시지 속성이 포함되어 있습니다.  
+ **CHIME.LEX.sessionState.intent.name** - 요청이 처리하려고 시도한 Lex 봇 인텐트의 이름입니다.
+ **CHIME.LEX.sessionState.intent.state** – 인텐트의 현재 상태입니다. 가능한 값은 `Fulfilled`, `InProgress`, `Failed`입니다.
+ **CHIME.LEX.sessionState.originatingRequestId** – Amazon Lex 봇에 대한 특정 요청을 위한 고유 식별자입니다. 이 값은 AppInstanceBot을 트리거한 원본 사용자 메시지의 `MessageId`로 설정됩니다.
+ **CHIME.LEX.sessionState.sessionId** – 사용자와 봇 간의 대화를 나타내는 고유 식별자입니다. 사용자가 봇과 대화를 시작하면 Amazon Lex는 세션을 생성합니다.
Amazon Lex 세션과 세션 상태에 대한 자세한 내용은 *Amazon Lex API 참조*의 [https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_SessionState.html](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_SessionState.html) 및 *Amazon Lex V2 개발자 안내서*의 [세션 관리](https://docs.aws.amazon.com/lexv2/latest/dg/using-sessions.html)를 참조하세요.  
Amazon Lex V2가 반환하는 속성에 대한 자세한 내용은 [Amazon Lex 런타임 V2](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_Operations_Amazon_Lex_Runtime_V2.html) API를 참조하세요.

# 규칙을 사용하여 Amazon Chime SDK 메시징용 Amazon EventBridge에 이벤트 전송
<a name="event-bridge-alerts"></a>

Amazon Chime SDK는 오류로 인해 Amazon Lex V2 봇을 호출할 수 없는 경우 EventBridge 이벤트를 전달합니다. 이러한 이벤트를 인식하고 규칙이 일치하면 자동으로 조치를 취하는 EventBridge 규칙을 생성할 수 있습니다. 자세한 정보는 Amazon EventBridge 사용 설명서**의 [Amazon EventBridge 규칙](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)을 참조하세요.

다음 예는 일반적인 실패 이벤트를 보여줍니다.

```
{
  version: '0',
  id: '12345678-1234-1234-1234-111122223333',
  'detail-type': 'Chime Messaging AppInstanceBot Lex Failure',
  source: 'aws.chime',
  account: 'aws-account-id',
  time: 'yyyy-mm-ddThh:mm:ssZ',
  region: "region",
  resources: [],
  detail: {    
    resourceArn: 'arn:aws:chime:region:aws-account-id:app-instance/app-instance-id/bot/app-instance-bot-id',
    failureReason: "1 validation error detected: Value at 'text' failed to satisfy constraint: Member must have length less than or equal to 1024 (Service: LexRuntimeV2, Status Code: 400, Request ID: request-id)"
  }
}
```

# Amazon Chime SDK 메시징용 Amazon Lex V2 봇으로 구성된 AppInstanceBot 문제 해결
<a name="troubleshoot-lex-bots"></a>

다음 항목에서는 AppInstanceBots의 일반적인 문제를 해결하는 방법에 대해 설명합니다.

## Amazon Lex V2 장애 찾기
<a name="find-lex-failures"></a>

Amazon Chime SDK 메시징은 오류로 인해 Amazon Lex V2 봇을 호출할 수 없는 경우 [Amazon EventBridge 이벤트](https://docs.aws.amazon.com/chime-sdk/latest/dg/event-bridge-alerts.html)를 전달합니다. 규칙 설정 및 알림 대상 구성에 대한 자세한 내용은 *Amazon EventBridge 사용 설명서*에서 [Amazon EventBridge 시작하기](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html) 단원을 참조하세요.

 AWS CloudWatch Logs에서 EventBridge 이벤트를 수신하는 경우 CloudWatch Logs Insights를 사용하여 AWS Amazon Chime SDK 메시징 세부 정보 유형을 기반으로 EventBridge 이벤트를 쿼리할 수 있습니다. `failureReason`에 실패 원인이 나열되어 있습니다.

다음 예시에서는 일반적인 쿼리를 보여줍니다.

```
fields @timestamp, @message
| filter `detail-type` = "Chime Messaging AppInstanceBot Lex Failure"
| sort @timestamp desc
```

Amazon Chime SDK 메시징에서 Amazon Lex V2 봇을 간접 호출할 수 있는 경우 SDK는 오류 메시지와 함께 `CONTROL` 메시지를 보냅니다.

## Amazon Lex V2 봇 권한 오류 문제 해결하기
<a name="lex-permission-errors"></a>

AppInstanceBot이 Amazon Lex V2 봇을 호출하려면 Amazon Chime SDK 메시징 서비스 보안 주체가 Amazon Lex V2 Bot 리소스를 호출할 권한이 있어야 합니다. 또한 리소스 정책 조건의 `AWS:SourceArn`이 AppInstanceBot의 ARN과 일치하는지 확인하세요.

Amazon Lex V2 봇을 호출하도록 AppInstanceBot을 구성하는 방법에 대한 자세한 내용은 이 섹션의 앞부분에 있는[Amazon Chime SDK 메시징용 Amazon Lex V2 봇 생성](create-lex-bot.md) 항목을 참조하세요.

## Amazon Lex V2 봇 제한 문제 해결하기
<a name="lex-throttling"></a>

Amazon Lex에는 봇 별칭당 최대 동시 텍스트 모드 대화 수에 대한 서비스 할당량이 있습니다. Amazon Lex 서비스 팀에 문의하여 할당량을 늘릴 수 있습니다. 자세한 내용은 *Amazon Lex 개발자 안내서*에서 [Amazon Lex 지침 및 할당량](https://docs.aws.amazon.com/lexv2/latest/dg/quotas.html)을 참조하세요.

# Amazon Chime SDK 메시징의 메시지 보존 관리
<a name="manage-retention"></a>

계정 소유자는 Amazon Chime SDK API를 사용하여 메시지 보존 기능을 활성화할 수 있습니다. 메시지는 관리자가 설정한 기간에 따라 자동으로 삭제됩니다. 보존 기간은 하루에서 15년까지 지속될 수 있습니다. 언제든지 API를 사용하여 메시지 보존 기간을 업데이트하거나 메시지 보존을 비활성화할 수도 있습니다.

**Topics**
+ [CLI 보존 명령의 예](#retention-examples)
+ [메시지 보존 활성화](#enable-retention)
+ [채팅 메시지 복원 및 삭제](#restore-and-delete)

## CLI 보존 명령의 예
<a name="retention-examples"></a>

다음 예는 보존을 위한 일반적인 CLI 명령을 보여줍니다.

**활성화**

`aws chime-sdk-identity put-app-instance-retention-settings --app-instance-arn {appInstanceArn} --app-instance-retention-settings ChannelRetentionSettings={RetentionDays=60}`

**업데이트 중**

`aws chime-sdk-identity put-app-instance-retention-settings --app-instance-arn {appInstanceArn} --app-instance-retention-settings ChannelRetentionSettings={RetentionDays=30}`

**비활성화**

`aws chime-sdk-identity put-app-instance-retention-settings --app-instance-arn {appInstanceArn} --app-instance-retention-settings ChannelRetentionSettings={}`

## 메시지 보존 활성화
<a name="enable-retention"></a>

Amazon Chime SDK API를 사용하여 메시지 보존 기능을 활성화할 수 있습니다. 언제든지 API를 사용하여 메시지 보존 기간을 업데이트하거나 메시지 보존을 비활성화할 수도 있습니다. 메시징 보존 구성에 대한 자세한 내용은 [Amazon Chime SDK API 참조](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/Welcome.html)를 참조하세요.

## 채팅 메시지 복원 및 삭제
<a name="restore-and-delete"></a>

메시지 보존 기간을 설정하거나 업데이트한 후 30일 이내에 사용자에게 메시지를 복원할 수 있습니다. 그러나 30일 유예 기간이 지나면 보존 기간에 해당하는 모든 메시지가 영구적으로 삭제되며 새 메시지는 보존 기간이 경과하는 즉시 영구적으로 삭제됩니다.

**참고**  
30일의 유예 기간 동안 보존 정책을 연장하거나 해제하면 새 보존 기간이 경과되지 않은 메시지가 계정에 속한 사용자에게 다시 표시됩니다.

`AppInstanceUser`가 채널이나 메시지를 삭제하면 메시지도 영구적으로 삭제됩니다.

# Amazon Chime SDK 메시징용 사용자 인터페이스 구성 요소
<a name="ui-components"></a>

구성 요소 라이브러리를 사용하면 채팅 메시징용 사용자 인터페이스를 구축하는 데 필요한 노력을 줄일 수 있습니다. 자세한 내용은 GitHub의 [Amazon Chime React 구성 요소 라이브러리](https://github.com/aws/amazon-chime-sdk-component-library-react)를 참조하세요.

# 클라이언트 라이브러리와 Amazon Chime SDK 메시징 통합
<a name="integrate-client-library"></a>

Amazon Chime SDK의 메시징 기능을 사용하려면 클라이언트 애플리케이션을 다음 클라이언트 라이브러리와 통합해야 합니다.
+ **AWS SDK** - 메시지를 보내고 리소스를 관리하기 위한 APIs 포함되어 있습니다.
+ **JavaScript용 Amazon Chime SDK 클라이언트 라이브러리(NPM)** – TypeScript 유형 정의가 포함된 JavaScript 라이브러리로, 클라이언트를 Amazon Chime SDK 메시징 웹 소켓과 통합하여 메시지를 수신하는 데 도움이 됩니다.

클라이언트 애플리케이션을 Amazon Chime SDK와 통합하려면 클라이언트 라이브러리 README.md의 지침을 참조하고 데모를 사용하여 메시징 기능을 구축하는 방법을 알아 보세요.

# JavaScript와 함께 Amazon Chime SDK 메시징 사용
<a name="use-javascript"></a>

JavaScript를 사용하여 Amazon Chime SDK 리소스를 관리하고 메시지를 보낼 수 있습니다. 자세한 내용은 [AWS JavaScript SDK](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Chime.html)를 참조하세요.

또한 클라이언트 애플리케이션에서 메시징 세션을 생성하여 Amazon Chime SDK 메시징으로부터 메시지를 수신할 수 있습니다. 자세한 내용은 GitHub의 [JavaScript용 Amazon Chime SDK 클라이언트 라이브러리 사용](https://github.com/aws/amazon-chime-sdk-js/blob/master/README.md)을 참조하세요.