

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

# Amazon SNS를 사용한 모바일 문자 메시지
<a name="sns-mobile-phone-number-as-subscriber"></a>

**중요**  
Amazon SNS SMS 개발자 안내서가 업데이트되었습니다. Amazon SNS는 SMS 메시지 전송을 위해 [AWS 최종 사용자 메시징 SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)와 통합되었습니다. 이 안내서에는 Amazon SNS SMS 메시지를 생성, 구성, 관리하는 방법에 대한 최신 정보가 포함되어 있습니다.

Amazon SNS 모바일 문자 메시지(SMS)는 SMS를 지원하는 웹, 모바일, 비즈니스 애플리케이션 등 다양한 플랫폼에 수월하게 메시지를 전송할 수 있도록 설계되었습니다. 사용자는 주제에 대한 메시지를 구독하여 메시지를 하나 이상의 전화번호로 보내 배포 프로세스를 간소화할 수 있습니다.

Amazon SNS 메시지는에서 전송 AWS 최종 사용자 메시징 SMS되므로 안정적인 메시지 전송이 가능합니다. Amazon SNS API 내에서 메시지 유형(프로모션 또는 트랜잭션), [월별 지출 한도](sms_preferences.md#sms_preferences_console), [옵트아웃 목록](sms_manage.md#sms_manage_optout), [메시지 전송 최적화](sms_preferences.md#sms_preferences_console)와 같은 다양한 속성을 설정할 수 있습니다.

AWS 최종 사용자 메시징 SMS 는 글로벌 SMS 공급 네트워크를 통해 대상 전화번호로 메시지 전송을 처리합니다. 라우팅, 전송 상태, 필수 리전별 규정 준수를 관리합니다. 세분화된 권한, 전화 풀, 구성 세트, SMS 시뮬레이터, 국가 규칙 등의 추가 SMS 기능에 액세스하려면 [AWS 최종 사용자 메시징 SMS 사용 설명서](https://docs.aws.amazon.com/sms-voice/latest/userguide/configurations.html) 섹션을 참조하세요.

![\[Amazon SNS가와 통합되어 모바일 문자 메시지를 안정적으로 AWS 최종 사용자 메시징 SMS 전달하는 방법을 보여주는 그림입니다. Amazon SNS 주제를 통해 메시지를 개별 수신자에게 직접 전송하거나 그룹에 배포할 수 있습니다.는 글로벌 네트워크에서 메시지 라우팅, 전송 및 규정 준수를 AWS 최종 사용자 메시징 SMS 처리하여 확장성과 신뢰성을 보장합니다. 또한이 설정을 사용하면 메시지 기본 설정을 구성하고, 지출 한도를 관리하고, 전송 상태를 추적하여 AWS SMS 메시징을 최적화할 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/sns-sms-end-user-messaging.png)


다음 주요 기능은 확장 가능하고 쉽게 연장할 수 있는 Amazon SNS SMS 메시지를 전송하는 데 도움이 됩니다.

**[메시지 기본 설정 사용자 지정](sms_preferences.md)**  
예산 및 사용 사례에 따라 SMS 기본 설정을 지정 AWS 계정 하여의 SMS 전송을 사용자 지정합니다. 예를 들어 메시지의 우선순위가 비용 효율성인지 신뢰할 수 있는 전송인지 선택할 수 있습니다.

**[지출 할당량 설정](channels-sms-awssupport-spend-threshold.md)**  
각 메시지 전송에 대한 지출 할당량 및 AWS 계정에 대한 월별 지출 할당량을 지정하여 SMS 전송을 맞춤화할 수 있습니다. 현지 법률 및 규정(예: 미국 및 캐나다)에서 요구하는 경우 SMS 수신자는 [옵트아웃](sms_manage.md#sms_manage_optout)할 수 있습니다. 즉, SMS 메시지 수신을 중지하도록 선택할 수 있습니다 AWS 계정. 수신자가 메시지 수신을 옵트아웃한 후, 메시지 전송을 다시 시작할 수 있도록 제한 사항을 적용하여 전화번호를 다시 옵트인할 수 있습니다.

**[SMS 메시지를 글로벌로 전송](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)**  
Amazon SNS는 여러 리전에서 SMS 메시징을 지원하며, 240개 이상의 국가 및 리전에 메시지를 전송할 수 있습니다.

## Amazon SNS가 SMS 메시지를 전달하는 방법
<a name="sns-sms-pinpoint-integration"></a>

사용자를 대신하여 SMS를 보내도록 Amazon SNS에 요청하면 AWS 최종 사용자 메시징 SMS를 사용하여 메시지가 전송됩니다. Amazon SNS와 간의 통합은 다음과 같은 이점을 AWS 최종 사용자 메시징 SMS 제공합니다.

**[IAM 정책](sns-mobile-phone-number-getting-started.md#sns-mobile-phone-number-prerequisites)**  
IAM 및 리소스 정책을 활용하여 다른 AWS 서비스 및 리전에서 SMS 리소스에 대한 액세스를 제어하고 배포할 수 있습니다.

**[AWS 최종 사용자 메시징 SMS 구성](https://docs.aws.amazon.com/sms-voice/latest/userguide/configurations.html)**  
모든 발신 ID 관련 구성(생성, 구성 업데이트, 새 발신 IDs 프로비저닝, 등록 템플릿 변경)이 사용됩니다 AWS 최종 사용자 메시징 SMS.

**[AWS 최종 사용자 메시징 SMS 결제](https://aws.amazon.com/sns/sms-pricing/)**  
하지만 모든 SMS 결제는 완료됩니다 AWS 최종 사용자 메시징 SMS. SMS 워크로드에 대한 AWS 지출을 통합하는 동시에 중앙의 한 위치에서 SMS 리소스를 조달하고 관리할 수 있습니다.

# Amazon SNS SMS 시작
<a name="sns-mobile-phone-number-getting-started"></a>

**중요**  
Amazon SNS SMS 개발자 안내서가 업데이트되었습니다. Amazon SNS는 SMS 메시지 전송을 위해 [AWS 최종 사용자 메시징 SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)와 통합되었습니다. 이 안내서에는 Amazon SNS SMS 메시지를 생성, 구성, 관리하는 방법에 대한 최신 정보가 포함되어 있습니다.

이 주제에서는 SMS 샌드박스를 관리하고 Amazon SNS에 AWS 최종 사용자 메시징 SMS APIs.

## 사전 조건
<a name="sns-mobile-phone-number-prerequisites"></a>

Amazon SNS에는 Amazon SNS 리소스에 대한 포괄적인 제어 및 가시성을 확보하기 위해 다음 작업을 포함하도록 IAM 정책을 업데이트하는 것이 좋습니다.
+ [`AmazonSNSFullAccess`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSNSFullAccess)
+ [`AmazonSNSReadOnly`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSNSReadOnlyAccess) 

# Amazon SNS SMS 샌드박스 사용
<a name="sns-sms-sandbox"></a>

새로 생성된 Amazon SNS SMS 계정은 사기 및 남용 위험을 완화하여 AWS 고객과 수신자 모두의 보안을 보장하기 위해 SMS 샌드박스에 자동으로 배치됩니다. 이 환경은 테스트 및 개발 목적으로 안전한 공간 역할을 합니다. SMS 샌드박스 내에서 작업하면서 모든 Amazon SNS 기능에 액세스할 수 있지만 다음과 같은 특정 제한 사항이 적용됩니다.
+ 확인된 대상 전화번호로만 SMS 메시지를 보낼 수 있습니다.
+ 확인된 대상 전화번호는 최대 10개까지 보유할 수 있습니다.
+ 대상 전화번호는 확인 또는 마지막 확인 시도 이후 최소 24시간 이상이 경과한 후에만 삭제할 수 있습니다.

계정이 샌드박스 외부로 전환되면 이러한 제한 사항이 제거되고 모든 수신자에게 SMS 메시지를 보낼 수 있습니다.

## 첫 번째 단계
<a name="sns-mobile-phone-number-getting-started-steps"></a>

새 Amazon SNS SMS 계정은 SMS 샌드박스에 배치됩니다. 다음 단계에 따라 샌드박스에서 전화번호를 만들어 관리하고, 발신 번호 및 발신자 ID를 만들고, 회사를 등록합니다.

1. SMS 샌드박스에 **대상 전화번호**를 추가합니다. Amazon SNS SMS 샌드박스에서 전화번호를 추가, 관리, 이동하는 방법에 대한 자세한 내용은 [Amazon SNS SMS 샌드박스에서 전화번호 추가 및 확인](sns-sms-sandbox-verifying-phone-numbers.md) 섹션을 참조하세요.

1. SMS 메시지를 보낼 때 수신자의 디바이스에 표시되는 **발신 자격 증명**을 만듭니다. 사용할 수 있는 다양한 유형 등 발신 ID에 대한 자세한 내용은 [Amazon SNS SMS 메시지에 대한 발신 ID](channels-sms-originating-identities.md) 섹션을 참조하세요.

1. 회사를 **등록**합니다. 일부 국가에서는 전화번호 또는 발신자 ID를 구매하고 해당 국가의 수신자에게 보내는 메시지를 검토할 수 있도록 회사 ID를 등록해야 합니다. 등록이 필요한 국가에 대해 알아보려면 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [Supported countries and regions for SMS messaging with AWS 최종 사용자 메시징 SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)를 참조하세요.

1. 주제 또는 휴대전화로 메시지를 **보냅니다**. 자세한 내용은 [Amazon SNS를 사용하여 SMS 메시지 전송](sms_sending-overview.md) 섹션을 참조하세요.

# Amazon SNS SMS 샌드박스에서 전화번호 추가 및 확인
<a name="sns-sms-sandbox-verifying-phone-numbers"></a>

SMS [샌드박스](sns-sms-sandbox.md)에 있는 AWS 계정 동안에서 SMS 메시지 전송을 시작하려면 먼저 다음 설정 단계를 완료해야 합니다. 이렇게 하면 계정이 SMS 메시징을 받을 준비가 되고 대상 전화번호가 제대로 확인됩니다.

1. **[발신 ID](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-number-types.html)**를 생성합니다. SMS 샌드박스에 없는 계정과 마찬가지로 일부 국가 또는 리전의 수신자에게 SMS 메시지를 보내려면 먼저 발신 ID가 필요합니다.

1. SMS 샌드박스 내에서 메시지를 보낼 **대상 전화번호**를 추가합니다.

1. **전화번호**를 확인하여 대상 전화번호가 SMS 메시지에 사용할 수 있는지 확인합니다.

**대상 전화번호 추가 및 확인**

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 콘솔 메뉴에서 [SMS 메시징을 지원하는 리전](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html)을 선택합니다.

1. 탐색 창에서 **문자 메시지(SMS)**를 선택합니다.

1. **샌드박스 대상 전화번호** 섹션에서 **전화번호 추가**를 선택합니다.

1. **대상 세부 정보**에서 다음 정보를 입력한 다음 **전화번호 추가**를 선택합니다.
   + 대상의 **국가 코드** 및 **전화번호**입니다.
   + 확인 메시지를 전송할 **언어**입니다.

1. 전화번호를 추가하면 Amazon SNS는 제공된 대상 전화번호로 OTP를 전송합니다. 이 OTP는 확인에 필요합니다.

1. 제공한 **대상 전화번호**로 OTP를 표준 SMS 메시지로 받게 됩니다.
   + 15분 이내에 OTP를 받지 못하면 Amazon SNS 콘솔에서 **확인 코드 재전송**을 선택합니다.
   + OTP를 24시간 동안 최대 5회 재전송할 수 있습니다.

1. OTP를 받으면 **확인 코드** 상자에 입력하고 **전화번호 확인**을 선택합니다.

1. **확인 상태**를 확인합니다.
   + 전화번호를 성공적으로 확인하면 전화번호와 해당 확인 상태가 **샌드박스 대상 전화번호** 섹션에 표시됩니다.
   + 상태가 **보류 중**이면 확인에 실패한 것입니다. 예를 들어 국가 코드를 올바르게 입력하지 않은 경우 이 문제가 발생할 수 있습니다.
   + 보류 중 또는 확인된 전화번호는 마지막 확인 시도 이후 24시간 이상이 경과한 후에만 삭제할 수 있습니다.

1. 다른 리전에서 동일한 대상 전화번호를 사용하려면 해당 전화번호를 사용하려는 각 리전에 대해 이전 단계를 **반복**합니다.

## OTP 텍스트의 미수신 문제 해결
<a name="sns-sms-sandbox-troubleshooting-phone-numbers"></a>

전화번호에 OTP 텍스트가 수신되지 못하도록 하는 일반적인 문제를 해결합니다.
+ **Amazon SNS SMS 지출 한도:** AWS 계정 에서 SMS 메시지 전송에 대한 지출 한도가 초과된 경우 한도가 증가하거나 결제 문제가 해결될 때까지 OTP 텍스트를 포함한 추가 메시지가 전송되지 않을 수 있습니다.
+ **SMS 알림에 옵트인되지 않은 전화번호:** 일부 국가 또는 리전에서 수신자는 OTP 텍스트에 일반적으로 사용되는 단축 코드에서 SMS 메시지를 수신하도록 옵트인해야 합니다. 수신자의 전화번호를 옵트인하지 않으면 수신자에게 OTP 텍스트가 전달되지 않습니다.
+ **통신사 제한 사항 또는 필터링:** 일부 모바일 통신사는 OTP 텍스트를 포함하여 특정 유형의 SMS 메시지 전송을 방해하는 제한 사항 또는 필터링 메커니즘을 갖추고 있을 수 있습니다. 이는 통신사가 구현한 보안 정책 또는 스팸 방지 조치 때문일 수 있습니다.
+ **유효하지 않거나 잘못된 전화번호:** 수신자가 제공한 전화번호가 올바르지 않거나 유효하지 않은 경우 OTP 텍스트가 전송되지 않습니다.
+ **네트워크 문제:** 일시적인 네트워크 문제 또는 네트워크 중단으로 인해 OTP 문자를 포함한 SMS 메시지가 수신자의 전화번호로 전송되지 못할 수 있습니다.
+ **지연된 전송:** 일부 경우 네트워크 혼잡 또는 기타 요인으로 인해 SMS 메시지 전송이 지연될 수 있습니다. OTP 텍스트는 최종적으로 전달될 수 있지만 예상 기간을 초과하여 전송이 지연될 수 있습니다.
+ **계정 일시 중지 또는 종료:** 미결제 또는 서비스 AWS 약관 위반 AWS 계정과 같은 문제가 있는 경우 OTP 텍스트를 포함한 Amazon SNS 메시징 기능이 일시 중지되거나 종료될 수 있습니다.

# Amazon SNS SMS 샌드박스에서 전화번호 삭제
<a name="sns-sms-sandbox-deleting-phone-numbers"></a>

[SMS 샌드박스](sns-sms-sandbox.md)에서 대기 중이거나 확인된 대상 전화번호를 삭제할 수 있습니다.

**중요**  
[전화번호 확인](sns-sms-sandbox-verifying-phone-numbers.md) 후 24시간 또는 마지막 확인 시도 후 24시간을 기다린 후에만 전화번호를 삭제할 수 있습니다.

**SMS 샌드박스에서 대상 전화번호를 삭제하려면**

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 콘솔 메뉴에서 대상 전화번호가 추가된 [SMS 메시징을 지원하는 리전](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html)을 선택합니다.

1. 탐색 창에서 **문자 메시지(SMS)**를 선택합니다.

1. **모바일 문자 메시지(SMS)** 페이지에서 **샌드박스 대상 전화번호** 섹션으로 이동합니다.

1. 삭제하려는 특정 전화번호를 선택한 다음 **전화번호 삭제**를 선택합니다.

1. 전화번호를 삭제할 것인지 확인하려면 **delete me**을 입력한 다음, **삭제**를 선택합니다.

   삭제를 진행하기 전에 먼저 대상 전화번호를 확인하거나 확인을 시도한 후 24시간 이상이 경과했는지 확인합니다.

1. 대상 전화번호를 추가하고 더 이상 사용하지 않을 각 리전에서 이 단계를 반복합니다.

# Amazon SNS SMS 샌드박스 환경에서 나가기
<a name="sns-sms-sandbox-moving-to-production"></a>

[SMS 샌드박스](sns-sms-sandbox.md) AWS 계정 에서를 이동하려면 먼저 대상 전화번호를 추가, 확인 및 테스트해야 합니다. 이 작업을 수행한 후를 사용하여 사례를 생성합니다 AWS Support.

**AWS 계정을 SMS 샌드박스 밖으로 이동하도록 요청하려면**

1. **전화번호 확인**

   1.  AWS 계정 가 SMS 샌드박스에 있는 동안 [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)을 엽니다.

   1. 탐색 창의 모바일에서 **문자 메시지(SMS)**를 선택합니다.

   1. 샌드박스 대상 전화번호 섹션에서 하나 이상의 대상 전화번호를 [추가하고 확인](sns-sms-sandbox-verifying-phone-numbers.md)합니다. 이 확인을 통해 메시지를 성공적으로 주고받을 수 있습니다.

1. **SMS 게시 테스트**

   1. 최소 하나 이상의 확인된 대상 전화번호로 메시지를 전송하고 받을 수 있는지 확인합니다. SMS 메시지를 게시하는 방법에 대한 자세한 설명은 [Amazon SNS를 사용하여 휴대전화에 SMS 메시지 게시](sms_sending-overview.md#sms_publish-to-phone) 섹션을 참조하세요.

1. **샌드박스 편집 시작**

   1. Amazon SNS 콘솔의 **모바일 문자 메시징(SMS)** 페이지의 **계정 정보**에서 **SMS 샌드박스 종료**를 선택합니다. 이 작업을 수행하면 [Amazon 지원 센터](https://support.console.aws.amazon.com/support/home?#/case/create?issueType=service-limit-increase)로 리디렉션되고 **서비스 할당량 증가** 옵션이 선택된 지원 사례가 자동으로 생성됩니다.

1. **양식 작성**

   1. **서비스 할당량 증가**의 지원 양식에서 다음과 같이 하세요.

     1. 서비스로 **SNS 문자 메시지**를 선택합니다.

     1. SMS 메시지를 보낼 **웹 사이트 URL** 또는 **앱 이름**을 입력합니다.

     1. 보낼 메시지 유형을 **일회용 암호**, **프로모션**, **트랜잭션** 중에서 선택합니다.

     1. SMS 메시지를 보낼 **AWS 리전**을 선택합니다.

     1. SMS 메시지를 보낼 **국가** 또는 **리전**을 나열합니다.

     1. 고객이 **메시지 수신을 옵트인**하는 방법을 설명합니다.

     1. 사용하려는 **메시지 템플릿**을 포함합니다.

1. **할당량 및 리전 지정**

   1. **요청**에서 다음과 같이 하세요.

     1. 이동할 **AWS 리전**을 선택합니다 AWS 계정.

     1. **리소스 유형**에서 **일반 한도**를 선택합니다.

     1. **할당량**에서 **SMS 샌드박스 종료**를 선택합니다.

     1. (선택 사항) 추가 증가 또는 기타 조정을 요청하려면 **다른 요청 추가**를 선택하고 필요한 세부 정보를 지정합니다.

     1. **새 할당량 값**에 요청 중인 **한도**(USD 기준)를 입력합니다.

1. **추가 세부 정보**

   1. **사례 설명**에 요청과 관련된 추가 세부 정보를 입력합니다.

   1. **연락처 옵션**에서 **선호하는 문의 언어**를 선택합니다.

1. **요청 제출**

   1. **전송**을 선택하여 지원에 요청을 제출합니다.

 지원 팀은 24시간 이내에 요청에 대한 초기 응답을 제공합니다.

시스템이 원치 않는 콘텐츠 또는 악성 콘텐츠를 전송하지 않도록 하기 위해 각 요청을 신중하게 고려합니다. 가능한 경우 이 24시간 기간 내에 요청이 승인될 것입니다. 그러나 사용자의 추가 정보가 필요한 경우 요청을 해결하는 데 시간이 오래 걸릴 수도 있습니다.

정책에 맞지 않는 사용 사례인 경우, 요청에 대한 권한을 부여하지 않을 수도 있습니다.

# Amazon SNS SMS 메시지에 대한 발신 ID
<a name="channels-sms-originating-identities"></a>

**중요**  
Amazon SNS SMS 개발자 안내서가 업데이트되었습니다. Amazon SNS는 SMS 메시지 전송을 위해 [AWS 최종 사용자 메시징 SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)와 통합되었습니다. 이 안내서에는 Amazon SNS SMS 메시지를 생성, 구성, 관리하는 방법에 대한 최신 정보가 포함되어 있습니다.

SMS 메시지의 발신 ID는 SMS 메시지 발신자를 나타내는 데 사용되는 식별자입니다. 다음 유형의 발신 ID를 사용하여 수신자가 발신자를 식별하도록 할 수 있습니다.

**발신 번호**  
SMS 메시지 발신자의 전화번호를 식별하는 숫자 문자열입니다. 길이가 긴 코드(일반적으로 10자리 이상의 표준 전화번호), 길이가 긴 10자리 코드(10DLC), 수신자 부담 번호(TFN), 길이가 짧은 코드(4\$17자리의 전화번호) 등 여러 유형의 발신 번호가 있습니다.  
현지 법률에 따라 발신 번호 대신 발신자 ID를 사용해야 하는 국가에서는 발신 번호에 대한 지원을 사용할 수 없습니다. 발신 번호를 사용하여 SMS 메시지를 보낼 때 수신자의 디바이스는 발신 번호를 발신자의 전화번호로 표시합니다. 사용 사례에 따라 다른 발신 번호를 지정할 수 있습니다.  
자세한 내용은 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [전화번호](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html)를 참조하세요.  
 AWS 계정의 모든 기존 발신 번호 목록을 보려면 [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)의 탐색 창에서 **발신 번호를** 선택합니다.

**발신자 IDs**  
SMS 메시지의 발신자로 식별되는 알파벳 이름입니다. 발신자 ID를 이용해 SMS 메시지를 보내고 수신자가 발신자 ID 인증이 지원되는 지역에 있는 경우, 수신자의 디바이스에 전화번호 대신 발신자 ID가 나타납니다. 발신자 ID는 발신자에 대하여 전화번호, 긴 코드 또는 단축 코드보다 많은 정보를 SMS 수신자에게 제공합니다.  
발신자 ID는 세계 여러 국가 및 리전에서 지원됩니다. 일부 지역에서는 기업이 개별 고객에게 SMS 메시지를 발송하는 경우, 규제기관이나 산업 그룹에 사전 등록한 발신자 ID를 써야 합니다. 발신자 ID를 지원하거나 요구하는 국가 및 리전의 전체 목록은 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [Supported countries and regions for SMS messaging with AWS 최종 사용자 메시징 SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)를 참조하세요.  
발신자 ID 사용에 따르는 추가 요금은 없습니다. 하지만 발신자 ID 인증에 대한 지원 및 요구 사항은 국가별로 다릅니다. 주요 시장(캐나다, 중국, 미국 포함)에서는 발신자 ID 사용을 지원하지 않습니다. 일부 리전에서는 기업이 개별 고객에게 SMS 메시지를 전송하는 경우, 규제기관이나 산업 그룹에 사전 등록한 발신자 ID를 써야 합니다.  
자세한 내용은 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [발신자 ID](https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id.html)를 참조하세요.

# Amazon SNS에서 SMS 메시징 구성
<a name="channels-sms-configurations"></a>

**중요**  
Amazon SNS SMS 개발자 안내서가 업데이트되었습니다. Amazon SNS는 SMS 메시지 전송을 위해 [AWS 최종 사용자 메시징 SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)와 통합되었습니다. 이 안내서에는 Amazon SNS SMS 메시지를 생성, 구성, 관리하는 방법에 대한 최신 정보가 포함되어 있습니다.

Amazon SNS SMS의 구성을 사용하여 지출 할당량 조정 및 전송 상태 로깅 설정과 같은 요구 사항에 맞게 SMS 기본 설정을 지정할 수 있습니다. 또한 이 주제에서는 Amazon SNS 콘솔 및 AWS SDK를 사용하여 주제에 SMS 메시지를 게시하고, 할당량을 효율적으로 처리하고, SMS 활동에 대한 세부 통계를 검색하는 방법에 대한 세부 정보를 제공합니다.

# Amazon SNS를 사용하여 SMS 메시지 전송
<a name="sms_sending-overview"></a>

이 섹션에서는 주제에 게시, 주제에 전화번호 구독, 메시지에 속성 설정, 휴대전화에 직접 게시 등 Amazon SNS를 사용하여 SMS 메시지를 전송하는 방법을 설명합니다.

## Amazon SNS 주제에 SMS 메시지 게시
<a name="sms_publish-to-topic"></a>

해당 전화번호에서 Amazon SNS 주제를 구독하면 단일 SMS 메시지를 수많은 전화번호에 한 번에 게시할 수 있습니다. SNS 주제는 구독자를 추가한 다음 해당 구독자 모두에게 메시지를 게시할 수 있는 통신 채널입니다. 구독자는 구독을 취소하거나 구독자가 AWS 계정에서 SMS 메시지 수신을 옵트아웃할 때까지 주제에 게시된 모든 메시지를 수신합니다.

### AWS 콘솔을 사용하여 주제에 메시지 전송
<a name="sms_publish-to-topic_console"></a>

**주제를 생성하려면**

SMS 메시지를 전송할 주제가 아직 없는 경우 다음 단계를 완료합니다.

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 콘솔 메뉴에서 [SMS 메시징을 지원하는 리전](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html)을 선택합니다.

1. 탐색 창에서 **주제**를 선택합니다.

1. **주제** 페이지에서 **주제 생성**을 선택합니다.

1. **주제 생성** 페이지의 **세부 정보**에서 다음을 수행합니다.

   1. **유형**에서 **표준**을 선택합니다.

   1. **이름**에 주제 이름을 입력합니다.

   1. (선택 사항) **표시 이름**에 SMS 메시지의 사용자 지정 접두사를 입력합니다. 주제에 메시지를 전송할 때 Amazon SNS는 오른쪽 꺽쇠괄호(>) 및 공백 다음에 표시 이름을 접두사로 추가합니다. 표시 이름은 대/소문자로 구분하지 않으며 Amazon SNS는 표시 이름을 대문자로 전환합니다. 예를 들어, 주제의 표시 이름이 `MyTopic`이고 메시지가 `Hello World!`인 경우 메시지는 다음과 같이 나타납니다.

      ```
      MYTOPIC> Hello World!
      ```

1. **주제 생성**을 선택합니다. 주제 이름과 Amazon 리소스 이름(ARN)은 **주제** 페이지에 나타납니다.

**SMS 구독을 생성하려면**

구독을 사용하여 메시지를 주제에 한 번 게시하여 SMS 메시지를 여러 수신자에게 전송할 수 있습니다.
**참고**  
Amazon SNS를 사용하여 SMS 메시지를 전송하기 시작하면 AWS 계정이 *SMS 샌드박스*에 있습니다. SMS 샌드박스는 SMS 발신자로서의 평판을 위협하지 않고 Amazon SNS 기능을 사용해 볼 수 있는 안전한 환경을 제공합니다. 계정이 SMS 샌드박스에 있는 동안 Amazon SNS의 모든 기능을 사용할 수 있지만 SMS 메시지는 확인된 대상 전화번호로만 보낼 수 있습니다. 자세한 내용은 [Amazon SNS SMS 샌드박스 사용](sns-sms-sandbox.md) 단원을 참조하십시오.

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 탐색 창에서 **Subscriptions**를 선택합니다.

1. **구독** 페이지에서 **구독 생성**을 선택합니다.

1. **구독 생성** 페이지의 **세부 정보**에서 다음을 수행합니다.

   1. **주제 ARN**에 SMS 메시지를 보낼 주제의 Amazon 리소스 이름(ARN)을 입력하거나 선택합니다.

   1. **프로토콜**에서 **SMS**를 선택합니다.

   1. **엔드포인트**에서 주제를 구독할 전화번호를 입력합니다.

1. **구독 생성**을 선택합니다. 구독 정보는 **구독** 페이지에 나타납니다.

   전화번호를 더 추가하려면 다음 단계를 반복합니다. 다른 유형의 구독을 추가할 수도 있습니다(예: 이메일).

**메시지 전송**

메시지를 주제에 게시하면 Amazon SNS는 주제를 구독하는 모든 전화번호로 해당 메시지를 전송합니다.

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)의 **주제** 페이지에서 SMS 메시지를 보낼 주제의 이름을 선택합니다.

1. 주제 세부 정보 페이지에서 [**Publish to topic**]을 선택합니다.

1. **주제에 메시지 게시** 페이지의 **메시지 세부 정보**에서 다음을 수행합니다.

   1. 주제에 이메일 구독이 포함되고 이메일 및 SMS 구독에 모두 게시하려는 경우가 아닌 한 **제목** 필드를 비워 둡니다. Amazon SNS는 귀하가 이메일 제목 줄로 입력한 **제목**을 사용합니다.

   1. (선택 사항) **유지 시간(TTL)**에 Amazon SNS가 SMS 메시지를 모바일 애플리케이션 엔드포인트 구독자에게 전송해야 하는 시간(초)을 입력합니다.

1. **메시지 본문**에서 다음을 수행합니다.

   1. **메시지 구조**에서 **모든 전송 프로토콜에 대해 동일한 페이로드**를 선택하여 주제를 구독하는 모든 프로토콜 유형에 동일한 메시지를 보냅니다. 또는 **각 전송 프로토콜에 대한 사용자 지정 페이로드**를 선택하여 다양한 프로토콜 유형의 구독자에 대한 메시지를 사용자 지정합니다. 예를 들어, 전화번호 구독자에 대한 기본 메시지와 이메일 구독자에 대한 사용자 지정 메시지를 입력할 수 있습니다.

   1. **엔드포인트로 보낼 메시지 본문**에 메시지 또는 전송 프로토콜당 사용자 지정 메시지를 입력합니다.

      주제에 표시 이름이 있는 경우 Amazon SNS는 해당 이름을 메시지에 추가하므로 메시지 길이가 증가합니다. 표시 이름 길이는 이름에 포함된 문자 수 더하기 Amazon SNS가 추가하는 오른쪽 꺾쇠괄호(>) 및 공백에 해당하는 2자입니다.

      SMS 메시지의 크기 할당량에 대한 자세한 내용은 [Amazon SNS를 사용하여 휴대전화에 SMS 메시지 게시](#sms_publish-to-phone)에서 확인하세요.

1. (선택 사항) **메시지 속성**에 타임스탬프, 서명, ID와 같은 메시지 메타데이터를 추가합니다.

1. **메시지 게시**를 선택합니다. Amazon SNS는 SMS 메시지를 전송하고 성공 메시지를 표시합니다.

### AWS SDKs를 사용하여 주제에 메시지 전송
<a name="sms_publish-to-topic_sdk"></a>

 AWS SDK를 사용하려면 자격 증명으로 구성해야 합니다. [자세한 정보는 *AWS SDK 및 도구 참조 가이드*의 공유 구성 및 자격 증명 파일](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)을 참조하세요.

다음 코드 예제에서는 작업 방법을 보여줍니다.
+ Amazon SNS 주제를 생성합니다.
+ 전화번호를 주제에 구독시킵니다.
+ 모든 구독 전화번호가 한 번에 메시지를 받을 수 있도록 주제에 SMS 메시지를 게시합니다.

------
#### [ Java ]

**SDK for Java 2.x**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.
주제를 만들고 해당 ARN을 반환합니다.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CreateTopicRequest;
import software.amazon.awssdk.services.sns.model.CreateTopicResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class CreateTopic {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <topicName>

                Where:
                   topicName - The name of the topic to create (for example, mytopic).

                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicName = args[0];
        System.out.println("Creating a topic with name: " + topicName);
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        String arnVal = createSNSTopic(snsClient, topicName);
        System.out.println("The topic ARN is" + arnVal);
        snsClient.close();
    }

    public static String createSNSTopic(SnsClient snsClient, String topicName) {
        CreateTopicResponse result;
        try {
            CreateTopicRequest request = CreateTopicRequest.builder()
                    .name(topicName)
                    .build();

            result = snsClient.createTopic(request);
            return result.topicArn();

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }
}
```
주제에 엔드포인트를 구독 설정합니다.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SubscribeTextSMS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <topicArn> <phoneNumber>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   phoneNumber - A mobile phone number that receives notifications (for example, +1XXX5550100).
                """;

        if (args.length < 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicArn = args[0];
        String phoneNumber = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        subTextSNS(snsClient, topicArn, phoneNumber);
        snsClient.close();
    }

    public static void subTextSNS(SnsClient snsClient, String topicArn, String phoneNumber) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("sms")
                    .endpoint(phoneNumber)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            System.out.println("Subscription ARN: " + result.subscriptionArn() + "\n\n Status is "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
발신자의 ID, 최고 가격 및 유형과 같은 메시지의 속성을 설정합니다. 메시지 속성은 선택 사항입니다.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesRequest;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
import java.util.HashMap;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SetSMSAttributes {
    public static void main(String[] args) {
        HashMap<String, String> attributes = new HashMap<>(1);
        attributes.put("DefaultSMSType", "Transactional");
        attributes.put("UsageReportS3Bucket", "janbucket");

        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        setSNSAttributes(snsClient, attributes);
        snsClient.close();
    }

    public static void setSNSAttributes(SnsClient snsClient, HashMap<String, String> attributes) {
        try {
            SetSmsAttributesRequest request = SetSmsAttributesRequest.builder()
                    .attributes(attributes)
                    .build();

            SetSmsAttributesResponse result = snsClient.setSMSAttributes(request);
            System.out.println("Set default Attributes to " + attributes + ". Status was "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
주제에 메시지를 게시합니다. 메시지는 모든 구독자에게 전송됩니다.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.PublishRequest;
import software.amazon.awssdk.services.sns.model.PublishResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class PublishTextSMS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <message> <phoneNumber>

                Where:
                   message - The message text to send.
                   phoneNumber - The mobile phone number to which a message is sent (for example, +1XXX5550100).\s
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String message = args[0];
        String phoneNumber = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        pubTextSMS(snsClient, message, phoneNumber);
        snsClient.close();
    }

    public static void pubTextSMS(SnsClient snsClient, String message, String phoneNumber) {
        try {
            PublishRequest request = PublishRequest.builder()
                    .message(message)
                    .phoneNumber(phoneNumber)
                    .build();

            PublishResponse result = snsClient.publish(request);
            System.out
                    .println(result.messageId() + " Message sent. Status was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```

------

## Amazon SNS를 사용하여 휴대전화에 SMS 메시지 게시
<a name="sms_publish-to-phone"></a>

Amazon SNS를 사용하여 전화번호에서 Amazon SNS 주제를 구독하지 않고도 휴대폰으로 SMS 메시지를 직접 전송할 수 있습니다.

**참고**  
하나의 메시지를 여러 전화번호에 한 번에 전송하려는 경우에도 전화번호에서 주제를 구독하면 유용할 수 있습니다. 주제에 SMS 메시지 게시에 대한 자세한 내용은 [Amazon SNS 주제에 SMS 메시지 게시](#sms_publish-to-topic)에서 확인하세요.

메시지를 전송할 때 메시지가 비용에 맞게 최적화되는지 또는 안정적 전송을 위해 최적화되는지를 제어할 수 있습니다. [발신자 ID 또는 발신 번호](channels-sms-originating-identities.md)를 지정할 수도 있습니다. Amazon SNS API 또는 AWS SDKs를 사용하여 프로그래밍 방식으로 메시지를 전송하는 경우 메시지 전송에 대한 최고 가격을 지정할 수 있습니다.

각 SMS 메시지는 140바이트까지 포함할 수 있으며 문자 할당량은 인코딩 체계에 따라 달라집니다. 예를 들어 SMS 메시지에는 다음과 같이 포함될 수 있습니다.
+ 160 GSM 문자
+ 140 ASCII 문자
+ 70 UCS-2 문자

크기 할당량을 초과하는 메시지를 게시하면 Amazon SNS에서 해당 메시지를 각각 크기 할당량 내에 맞춘 여러 메시지로 보냅니다. 메시지는 단어 중간에 잘리지 않고 대신 전체 단어의 경계선에서 잘립니다. 단일 SMS 게시 작업에 대한 전체 크기 할당량은 1,600바이트입니다.

SMS 메시지를 보낼 때 국제 통신에 사용되는 표준 전화번호 구조인 E.164 형식을 사용하여 전화번호를 지정합니다. 이 형식을 따르는 전화번호는 최대 15자리 숫자를 사용할 수 있으며 더하기 기호(\$1) 및 국가 코드가 접두사로 추가됩니다. 예를 들어, E.164 형식의 미국 전화번호는 \$11XXX5550100로 표시됩니다.

### 메시지 전송(콘솔)
<a name="sms_publish_console"></a>

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 콘솔 메뉴에서 [SMS 메시징을 지원하는 리전](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html)을 선택합니다.

1. 탐색 창에서 **문자 메시지(SMS)**를 선택합니다.

1. **모바일 문자 메시징(SMS)** 페이지에서 **문자 메시지 게시**를 선택합니다.

1. **SMS 메시지 게시**의 **메시지 유형**에서 다음 중 하나를 선택합니다.
   + **프로모션** – 중요하지 않은 메시지입니다(예: 마케팅 메시지).
   + **트랜잭션** – 고객 트랜잭션을 지원하는 중요한 메시지입니다(예: 멀티 팩터 인증을 위한 일회용 암호).
**참고**  
이 메시지 수준 설정은 계정 수준 기본 메시지 유형을 재정의합니다. **모바일 문자 메시징(SMS)** 페이지의 **문자 메시징 기본 설정** 섹션에서 계정 수준의 기본 메시지 유형을 설정할 수 있습니다.

   프로모션 및 트랜잭션 메시지에 대한 요금 정보는 [전 세계 SMS 요금](https://aws.amazon.com/sns/sms-pricing/)을 참조하세요.

1. **대상 전화번호**에 메시지를 전송하려는 전화번호를 입력합니다.

1. **메시지**에 전송할 메시지를 입력합니다.

1. (선택 사항) **발신 자격 증명**에서 수신자에게 귀하를 식별하는 방법을 지정합니다.
   + **발신자 ID**에 공백 없이 최소 1자의 문자를 포함하여 3\$111자의 영숫자로 이루어진 사용자 지정 ID를 입력합니다. 발신자 ID는 수신 디바이스에 메시지 발신자로 표시됩니다. 예를 들어, 기업 브랜드를 사용하여 메시지 소스를 더 인식하기 쉽게 만들 수 있습니다.

     발신자 ID에 대한 지원은 국가 및/또는 리전별로 다릅니다. 예를 들어, 미국 전화번호로 전달된 메시지에는 발신자 ID가 표시되지 않습니다. 발신자 ID를 지원하는 국가 및 리전을 알아보려면 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [Supported countries and regions for SMS messaging with AWS 최종 사용자 메시징 SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)를 참조하세요.

     발신자 ID를 지정하지 않으면 다음 중 하나가 발신 자격 증명으로 표시됩니다.
     + 긴 코드를 지원하는 국가에서는 긴 코드가 표시됩니다.
     + 발신자 ID만 지원되는 국가에서는 *NOTICE(알림)*가 표시됩니다.

     이 메시지 수준 발신자 ID는 [**Text messaging preferences**] 페이지에서 설정하는 기본 발신자 ID보다 우선적으로 적용됩니다.
   + **발신 번호**를 지정하려면 수신자 디바이스에 발신자의 전화번호로 표시할 5-14개의 숫자 문자열을 입력합니다. 이 문자열은 AWS 계정 대상 국가의에 구성된 발신 번호와 일치해야 합니다. 발신 번호는 10DLC 번호, 수신자 부담 전화번호, 개인 대 개인 긴 코드 또는 단축 코드일 수 있습니다. 자세한 내용은 [Amazon SNS SMS 메시지에 대한 발신 ID](channels-sms-originating-identities.md) 단원을 참조하십시오.

     발신 번호를 지정하지 않으면 Amazon SNS는 AWS 계정 구성에 따라 SMS 문자 메시지에 사용할 발신 번호를 선택합니다.

1. 인도의 수신자에게 SMS 메시지를 보내는 경우 **국가별 속성**을 확장하고 다음 속성을 지정합니다.
   + **엔터티 ID** – 인도의 수신자에게 SMS 메시지를 보내기 위한 엔터티 ID 또는 보안 주체 엔터티(PE) ID입니다. 이 ID는 인도 통신 규제 당국(TRAI)에서 TRAI에 등록한 엔터티를 식별하기 위해 제공하는 1-50자의 고유한 문자열입니다.
   + **템플릿 ID** – 인도에 있는 수신자에게 SMS 메시지를 보내기 위한 템플릿 ID입니다. 이 ID는 TRAI에 등록한 템플릿을 식별하는 1–50자의 고유한 TRAI 제공 문자열입니다. 템플릿 ID는 메시지에 대해 지정한 발신자 ID와 연결되어야 합니다.

   인도의 수신자에게 SMS 메시지를 보내는 방법에 대한 자세한 내용은 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [India sender ID registration process](https://docs.aws.amazon.com/sms-voice/latest/userguide/registrations-sms-senderid-india.html)를 참조하세요.

1. **메시지 게시**를 선택합니다.

**작은 정보**  
발신 번호에서 SMS 메시지를 보내려면 Amazon SNS 콘솔 탐색 패널에서 **발신 번호**를 선택할 수도 있습니다. **기능** 열에 **SMS**가 포함된 발신 번호를 선택한 다음 **문자 메시지 게시**를 선택합니다.

### 메시지 전송(AWS SDKs)
<a name="sms_publish_sdk"></a>

 AWS SDKs 중 하나를 사용하여 SMS 메시지를 보내려면 Amazon SNS API의 `Publish` 요청에 해당하는 해당 SDK의 API 작업을 사용합니다. 이 요청을 사용하여 SMS 메시지를 전화 번호로 직접 전송할 수 있습니다. `MessageAttributes` 파라미터를 사용하여 다음 속성 이름의 값을 설정할 수 있습니다.

**`AWS.SNS.SMS.SenderID`**  
공백 없이 최소 1자의 문자를 포함하여 3\$111자의 영숫자 또는 하이픈(-)으로 이루어진 사용자 지정 ID입니다. 발신자 ID는 수신 디바이스에 메시지 발신자로 표시됩니다. 예를 들어, 기업 브랜드를 사용하여 메시지 소스를 더 인식하기 쉽게 만들 수 있습니다.  
발신자 ID에 대한 지원은 국가 또는 리전별로 다릅니다. 예를 들어, 미국 전화번호로 전달된 메시지에는 발신자 ID가 표시되지 않습니다. 발신자 ID를 지원하는 국가 또는 리전 목록을 알아보려면 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [Supported countries and regions for SMS messaging with AWS 최종 사용자 메시징 SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)를 참조하세요.  
발신자 ID를 지정하지 않으면 지원되는 국가 또는 리전에서는 [긴 코드](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request-long-code.html)가 발신자 ID로 표시됩니다. 영문자 발신자 ID가 필요한 국가 또는 리전의 경우 *NOTICE*가 발신자 ID로 표시됩니다.  
이 메시지 수준 속성은 `SetSMSAttributes` 요청을 사용하여 설정하는 계정 수준 속성인 `DefaultSenderID`보다 우선적으로 적용됩니다.

**`AWS.MM.SMS.OriginationNumber`**  
선택적 선행 더하기 기호(`+`)를 포함할 수 있는 5–14개의 숫자로 구성된 사용자 지정 문자열입니다. 이 숫자 문자열은 수신 디바이스에서 발신자의 전화번호로 나타납니다. 문자열은 대상 국가의 AWS 계정에 구성된 발신 번호와 일치해야 합니다. 발신 번호는 10DLC 번호, 수신자 부담 전화번호, 개인 대 개인(P2P) 긴 코드 또는 단축 코드일 수 있습니다. 자세한 내용은 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [Phone numbers](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html)를 참조하세요.  
발신 번호를 지정하지 않으면 Amazon SNS는 AWS 계정 구성에 따라 발신 번호를 선택합니다.

**`AWS.SNS.SMS.MaxPrice`**  
SMS 메시지를 전송하기 위해 지출할 의사가 있는 최대 금액(USD)입니다. Amazon SNS에서 메시지 전송 시 최고 가격을 초과하는 비용이 발생한다고 판단하면 메시지를 전송하지 않습니다.  
당월 누적 SMS 비용이 `MonthlySpendLimit` 속성에 대해 설정된 할당량을 이미 초과한 경우 이 속성은 적용되지 않습니다. `SetSMSAttributes` 요청을 사용하여 `MonthlySpendLimit` 속성을 설정할 수 있습니다.  
메시지를 Amazon SNS 주제로 전송하는 경우 최고 가격은 주제를 구독하는 각 전화번호로 전송되는 각 메시지에 적용됩니다.

**`AWS.SNS.SMS.SMSType`**  
전송하는 메시지 유형은 다음과 같습니다.  
+ **`Promotional`**(기본값) – 마케팅 메시지와 같이 중요하지 않은 메시지입니다.
+ **`Transactional`** – 고객 트랜잭션을 지원하는 중요한 메시지입니다(예: 멀티 팩터 인증을 위한 일회용 암호).
이 메시지 수준 속성은 `SetSMSAttributes` 요청을 사용하여 설정하는 계정 수준 속성인 `DefaultSMSType`보다 우선적으로 적용됩니다.

**`AWS.MM.SMS.EntityId`**  
이 속성은 인도의 수신자에게 SMS 메시지를 보낼 때만 필요합니다.  
인도의 수신자에게 SMS 메시지를 보내기 위한 엔터티 ID 또는 보안 주체 엔터티(PE) ID입니다. 이 ID는 인도 통신 규제 당국(TRAI)에서 TRAI에 등록한 엔터티를 식별하기 위해 제공하는 1-50자의 고유한 문자열입니다.

**`AWS.MM.SMS.TemplateId`**  
이 속성은 인도의 수신자에게 SMS 메시지를 보낼 때만 필요합니다.  
인도에 있는 수신자에게 SMS 메시지를 보내기 위한 템플릿입니다. 이 ID는 TRAI에 등록한 템플릿을 식별하는 1–50자의 고유한 TRAI 제공 문자열입니다. 템플릿 ID는 메시지에 대해 지정한 발신자 ID와 연결되어야 합니다.

#### 메시지 전송
<a name="sms_publish_sdks"></a>

다음 코드 예제에서는 Amazon SNS를 사용하여 SMS 메시지를 게시하는 방법을 보여줍니다.

------
#### [ .NET ]

**SDK for .NET**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/SNS#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
namespace SNSMessageExample
{
    using System;
    using System.Threading.Tasks;
    using Amazon;
    using Amazon.SimpleNotificationService;
    using Amazon.SimpleNotificationService.Model;

    public class SNSMessage
    {
        private AmazonSimpleNotificationServiceClient snsClient;

        /// <summary>
        /// Initializes a new instance of the <see cref="SNSMessage"/> class.
        /// Constructs a new SNSMessage object initializing the Amazon Simple
        /// Notification Service (Amazon SNS) client using the supplied
        /// Region endpoint.
        /// </summary>
        /// <param name="regionEndpoint">The Amazon Region endpoint to use in
        /// sending test messages with this object.</param>
        public SNSMessage(RegionEndpoint regionEndpoint)
        {
            snsClient = new AmazonSimpleNotificationServiceClient(regionEndpoint);
        }

        /// <summary>
        /// Sends the SMS message passed in the text parameter to the phone number
        /// in phoneNum.
        /// </summary>
        /// <param name="phoneNum">The ten-digit phone number to which the text
        /// message will be sent.</param>
        /// <param name="text">The text of the message to send.</param>
        /// <returns>Async task.</returns>
        public async Task SendTextMessageAsync(string phoneNum, string text)
        {
            if (string.IsNullOrEmpty(phoneNum) || string.IsNullOrEmpty(text))
            {
                return;
            }

            // Now actually send the message.
            var request = new PublishRequest
            {
                Message = text,
                PhoneNumber = phoneNum,
            };

            try
            {
                var response = await snsClient.PublishAsync(request);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error sending message: {ex}");
            }
        }
    }
}
```
+  API 세부 정보는 *AWS SDK for .NET API 참조*의 [Publish](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Publish)를 참조하세요.

------
#### [ C\$1\$1 ]

**SDK for C\$1\$1**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
/**
 * Publish SMS: use Amazon Simple Notification Service (Amazon SNS) to send an SMS text message to a phone number.
 * Note: This requires additional AWS configuration prior to running example. 
 * 
 *  NOTE: When you start using Amazon SNS to send SMS messages, your AWS account is in the SMS sandbox and you can only
 *  use verified destination phone numbers. See https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html.
 *  NOTE: If destination is in the US, you also have an additional restriction that you have use a dedicated
 *  origination ID (phone number). You can request an origination number using Amazon Pinpoint for a fee.
 *  See https://aws.amazon.com/blogs/compute/provisioning-and-using-10dlc-origination-numbers-with-amazon-sns/ 
 *  for more information. 
 * 
 *  <phone_number_value> input parameter uses E.164 format. 
 *  For example, in United States, this input value should be of the form: +12223334444
 */

//! Send an SMS text message to a phone number.
/*!
  \param message: The message to publish.
  \param phoneNumber: The phone number of the recipient in E.164 format.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::publishSms(const Aws::String &message,
                             const Aws::String &phoneNumber,
                             const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::PublishRequest request;
    request.SetMessage(message);
    request.SetPhoneNumber(phoneNumber);

    const Aws::SNS::Model::PublishOutcome outcome = snsClient.Publish(request);

    if (outcome.IsSuccess()) {
        std::cout << "Message published successfully with message id, '"
                  << outcome.GetResult().GetMessageId() << "'."
                  << std::endl;
    }
    else {
        std::cerr << "Error while publishing message "
                  << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  API 세부 정보는 *AWS SDK for C\$1\$1 API 참조*의 [Publish](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Publish)를 참조하세요.

------
#### [ Java ]

**SDK for Java 2.x**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.PublishRequest;
import software.amazon.awssdk.services.sns.model.PublishResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class PublishTextSMS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <message> <phoneNumber>

                Where:
                   message - The message text to send.
                   phoneNumber - The mobile phone number to which a message is sent (for example, +1XXX5550100).\s
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String message = args[0];
        String phoneNumber = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        pubTextSMS(snsClient, message, phoneNumber);
        snsClient.close();
    }

    public static void pubTextSMS(SnsClient snsClient, String message, String phoneNumber) {
        try {
            PublishRequest request = PublishRequest.builder()
                    .message(message)
                    .phoneNumber(phoneNumber)
                    .build();

            PublishResponse result = snsClient.publish(request);
            System.out
                    .println(result.messageId() + " Message sent. Status was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  API 세부 정보는 *AWS SDK for Java 2.x API 참조*의 [Publish](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Publish)를 참조하세요.

------
#### [ Kotlin ]

**SDK for Kotlin**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
suspend fun pubTextSMS(
    messageVal: String?,
    phoneNumberVal: String?,
) {
    val request =
        PublishRequest {
            message = messageVal
            phoneNumber = phoneNumberVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        val result = snsClient.publish(request)
        println("${result.messageId} message sent.")
    }
}
```
+  API 세부 정보는 *AWS SDK for Kotlin API 참조*의 [Publish](https://sdk.amazonaws.com/kotlin/api/latest/index.html)를 참조하세요.

------
#### [ PHP ]

**SDK for PHP**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Sends a text message (SMS message) directly to a phone number using Amazon SNS.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$message = 'This message is sent from a Amazon SNS code sample.';
$phone = '+1XXX5550100';

try {
    $result = $SnSclient->publish([
        'Message' => $message,
        'PhoneNumber' => $phone,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  자세한 정보는 [AWS SDK for PHP 개발자 안내서](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#publish-to-a-text-message-sms-message)를 참조하세요.
+  API 세부 정보는 *AWS SDK for PHP API 참조*의 [Publish](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Publish)를 참조하세요.

------
#### [ Python ]

**SDK for Python (Boto3)**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    def publish_text_message(self, phone_number, message):
        """
        Publishes a text message directly to a phone number without need for a
        subscription.

        :param phone_number: The phone number that receives the message. This must be
                             in E.164 format. For example, a United States phone
                             number might be +12065550101.
        :param message: The message to send.
        :return: The ID of the message.
        """
        try:
            response = self.sns_resource.meta.client.publish(
                PhoneNumber=phone_number, Message=message
            )
            message_id = response["MessageId"]
            logger.info("Published message to %s.", phone_number)
        except ClientError:
            logger.exception("Couldn't publish message to %s.", phone_number)
            raise
        else:
            return message_id
```
+  API 세부 정보는 *AWS SDK for Python (Boto3) API 참조*의 [Publish](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Publish)를 참조하세요.

------
#### [ SAP ABAP ]

**SDK for SAP ABAP API**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
    " iv_phone_number = '+12065550101' - Phone number in E.164 format
    TRY.
        oo_result = lo_sns->publish(              " oo_result is returned for testing purposes. "
          iv_phonenumber = iv_phone_number
          iv_message = iv_message ).
        MESSAGE 'Message published to phone number.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Phone number does not exist.' TYPE 'E'.
    ENDTRY.
```
+  API에 대한 세부 정보는 *SAP ABAP용AWS SDK API 참조*의 [Publish](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)를 참조하세요.

------

# Amazon SNS에서 SMS 메시징 기본 설정 지정
<a name="sms_preferences"></a>

Amazon SNS를 사용하여 SMS 메시징에 대한 기본 설정을 지정합니다. 예를 들어 비용 또는 안정성을 위해 전송을 최적화할지 여부, 월별 지출 한도, 전송을 로그하는 방법 및 일일 SMS 사용 보고서를 구독할지 여부를 지정할 수 있습니다.

이러한 기본 설정은 계정에서 보내는 모든 SMS 메시지에 적용되지만, 개별 메시지를 전송할 때 일부 설정을 무시할 수 있습니다. 자세한 내용은 [Amazon SNS를 사용하여 휴대전화에 SMS 메시지 게시](sms_sending-overview.md#sms_publish-to-phone) 단원을 참조하십시오.

## 를 사용하여 SMS 메시징 기본 설정 지정 AWS Management Console
<a name="sms_preferences_console"></a>

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. [SMS 메시징을 지원하는 리전](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html)을 선택합니다.

1. 탐색 창에서 **모바일**, **문자 메시지(SMS)**를 차례로 선택합니다.

1. **모바일 문자 메시지(SMS)** 페이지의 **문자 메시지 기본 설정** 섹션에서 **편집**을 선택합니다.

1. **Edit text messaging preferences(문자 메시지 기본 설정 편집)** 페이지의 **세부 정보** 섹션에서 다음을 수행합니다.

   1. **기본 메시지 유형**에서 다음 중 하나를 선택합니다.
      + **프로모션** – 중요하지 않은 메시지(예: 마케팅)입니다. Amazon SNS는 최소 비용이 발생하도록 메시지 전송을 최적화합니다.
      + **트랜잭션**(기본값) – 고객 트랜잭션을 지원하는 중요한 메시지입니다(예: 멀티 팩터 인증을 위한 일회용 암호). Amazon SNS는 최고의 안정성을 달성하도록 메시지 전송을 최적화합니다.

      프로모션 및 트랜잭션 메시지에 대한 요금 정보는 [글로벌 SMS 요금](https://aws.amazon.com/sns/sms-pricing/)에서 확인하세요.

   1. (선택 사항) **계정 지출 한도**에 매월 SMS 메시지에 지출하려는 최대 금액(USD)을 입력합니다.
**중요**  
기본적으로 지출 할당량은 1.00USD로 설정됩니다. 서비스 할당량을 늘리려면 [요청을 제출하세요.](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase&limitType=service-code-sns)
콘솔에서 설정된 금액이 서비스 할당량을 초과할 경우 Amazon SNS에서 SMS 메시지 게시를 중지합니다.
Amazon SNS는 분산 시스템이므로 초과되는 지출 할당량(분) 이내에 SMS 메시지 전송을 중지합니다. 이 기간 사이에 SMS 메시지 전송을 계속하는 경우 할당량 초과 비용이 발생할 수 있습니다.

1. (선택 사항) **기본 발신자 ID**에 기업 브랜드와 같은 사용자 지정 ID를 입력합니다. 이 ID는 수신하는 디바이스의 발신자로 표시됩니다.
**참고**  
발신자 ID에 대한 지원은 국가별로 다릅니다.

1. (선택 사항) **Amazon S3 bucket name for usage reports(사용 보고서용 Amazon S3 버킷 이름)**의 이름을 입력합니다.
**참고**  
Amazon S3 버킷 정책은 Amazon SNS에 쓰기 액세스 권한을 부여해야 합니다.

1. **변경 사항 저장**을 선택합니다.

## 기본 설정 지정(AWS SDKs)
<a name="sms_preferences_sdk"></a>

 AWS SDKs 중 하나를 사용하여 SMS 기본 설정을 지정하려면 Amazon SNS API의 `SetSMSAttributes` 요청에 해당하는 해당 SDK의 작업을 사용합니다. 이 요청을 통해 월 지출 할당량 및 기본 SMS 유형(프로모션 또는 트랜잭션) 등의 다양한 SMS 속성에 값을 할당합니다. 모든 SMS 속성은 *Amazon Simple Notification Service API 참조*의 [SetSMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html)를 참조하세요.

다음 코드 예시는 `SetSMSAttributes`의 사용 방법을 보여 줍니다.

------
#### [ C\$1\$1 ]

**SDK for C\$1\$1**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.
Amazon SNS를 사용하여 DefaultSMSType 속성을 설정하는 방법입니다.  

```
//! Set the default settings for sending SMS messages.
/*!
  \param smsType: The type of SMS message that you will send by default.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::setSMSType(const Aws::String &smsType,
                             const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SetSMSAttributesRequest request;
    request.AddAttributes("DefaultSMSType", smsType);

    const Aws::SNS::Model::SetSMSAttributesOutcome outcome = snsClient.SetSMSAttributes(
            request);

    if (outcome.IsSuccess()) {
        std::cout << "SMS Type set successfully " << std::endl;
    }
    else {
        std::cerr << "Error while setting SMS Type: '"
                  << outcome.GetError().GetMessage()
                  << "'" << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  API 세부 정보는 *AWS SDK for C\$1\$1 API 참조*의 [SetSMSAttributes](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/SetSMSAttributes)를 참조하세요.

------
#### [ CLI ]

**AWS CLI**  
**SMS 메시지 속성을 설정하려면**  
다음 `set-sms-attributes`예제에서는 SMS 메시지의 기본 발신자 ID를 `MyName`으로 설정합니다.  

```
aws sns set-sms-attributes \
    --attributes DefaultSenderID=MyName
```
이 명령은 출력을 생성하지 않습니다.  
+  API 세부 정보는 *AWS CLI 명령 참조*의 [SetSMSAttributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/set-sms-attributes.html)를 참조하세요.

------
#### [ Java ]

**SDK for Java 2.x**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesRequest;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
import java.util.HashMap;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SetSMSAttributes {
    public static void main(String[] args) {
        HashMap<String, String> attributes = new HashMap<>(1);
        attributes.put("DefaultSMSType", "Transactional");
        attributes.put("UsageReportS3Bucket", "janbucket");

        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        setSNSAttributes(snsClient, attributes);
        snsClient.close();
    }

    public static void setSNSAttributes(SnsClient snsClient, HashMap<String, String> attributes) {
        try {
            SetSmsAttributesRequest request = SetSmsAttributesRequest.builder()
                    .attributes(attributes)
                    .build();

            SetSmsAttributesResponse result = snsClient.setSMSAttributes(request);
            System.out.println("Set default Attributes to " + attributes + ". Status was "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  API 세부 정보는 *AWS SDK for Java 2.x API 참조*의 [SetSMSAttributes](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/SetSMSAttributes)를 참조하세요.

------
#### [ JavaScript ]

**SDK for JavaScript (v3)**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.
별도의 모듈에서 클라이언트를 생성하고 내보냅니다.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
SDK 및 클라이언트 모듈을 가져오고 API를 호출합니다.  

```
import { SetSMSAttributesCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {"Transactional" | "Promotional"} defaultSmsType
 */
export const setSmsType = async (defaultSmsType = "Transactional") => {
  const response = await snsClient.send(
    new SetSMSAttributesCommand({
      attributes: {
        // Promotional – (Default) Noncritical messages, such as marketing messages.
        // Transactional – Critical messages that support customer transactions,
        // such as one-time passcodes for multi-factor authentication.
        DefaultSMSType: defaultSmsType,
      },
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '1885b977-2d7e-535e-8214-e44be727e265',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
  return response;
};
```
+  자세한 정보는 [AWS SDK for JavaScript 개발자 안내서](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-sending-sms.html#sending-sms-setattributes)를 참조하세요.
+  API 세부 정보는 *AWS SDK for JavaScript API 참조*의 [SetSMSAttributes](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SetSMSAttributesCommand)를 참조하세요.

------
#### [ PHP ]

**SDK for PHP**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->SetSMSAttributes([
        'attributes' => [
            'DefaultSMSType' => 'Transactional',
        ],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  자세한 정보는 [AWS SDK for PHP 개발자 안내서](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#set-sms-attributes)를 참조하세요.
+  API 세부 정보는 *AWS SDK for PHP API 참조*의 [SetSMSAttributes](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/SetSMSAttributes)를 참조하세요.

------

## 국가별 전송 시 SMS 메시징 기본 설정 지정
<a name="sms_preferences_country_specific"></a>

특정 대상 국가로만 메시지를 전송하여 SMS 트래픽을 관리하고 제어할 수 있습니다. 이렇게 하면 메시지가 승인된 국가로만 전송되므로 원치 않는 SMS 요금을 방지할 수 있습니다. 다음 설명에서는 Amazon Pinpoint의 보호 구성을 사용하여 허용하거나 차단하려는 국가를 지정합니다.

1. [https://console.aws.amazon.com/sms-voice/](https://console.aws.amazon.com/sms-voice/) AWS SMS 콘솔을 엽니다.

1. 탐색 창의 **개요**에 있는 **빠른 시작** 섹션에서 **보호 구성 생성**을 선택합니다.

1. **구성 세부 정보 보호**에 보호 구성의 **비즈니스에 적합한 이름**(예: Allow-Only-AU)을 입력합니다.

1. **SMS 국가 규칙**에서 **리전/국가** 확인란을 선택하여 모든 지원되는 국가로 메시지가 전송되는 것을 차단합니다.

1. 메시지를 보내려는 국가의 확인란은 선택 취소합니다. 예를 들어 오스트레일리아에만 메시지를 허용하려면 **오스트레일리아**의 확인란을 선택 취소합니다.

1. **보호 구성 연결** 섹션의 **연결 유형**에서 **계정 기본값**을 선택합니다. 이렇게 하면 AWS 최종 사용자 메시징 SMS 보호 구성이 Amazon SNS, Amazon [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) Amazon Pinpoint [https://docs.aws.amazon.com/pinpoint/latest/developerguide/send-messages-sms.html](https://docs.aws.amazon.com/pinpoint/latest/developerguide/send-messages-sms.html) API 호출을 통해 전송되는 모든 메시지에 영향을 미칩니다.

1. **보호 구성 생성**을 선택하여 설정을 저장합니다.

   다음의 확인 메시지가 표시됩니다.

   ```
   Success Protect configuration protect-abc0123456789 has been created.
   ```

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 인도 등의 차단된 국가 중 하나에 [**메시지를 게시**](sns-publishing.md)합니다.

   메시지가 전송되지 않습니다. [CloudWatch](sms_stats_cloudwatch.md)를 사용하여 전송 실패 로그에서 이를 확인할 수 있습니다. 로그 그룹(**sns/region/AccountID/DirectPublishToPhoneNumber/Failure**)에서 다음 예제와 유사한 응답을 검색합니다.

   ```
   {
   "notification": {
   "messageId": "bd59a509-XXXX-XXXX-82f8-fbdb8cb68217",
   "timestamp": "YYYY-MM-DD XX:XX:XX.XXXX“
   },
   "delivery": {
   "destination": "+91XXXXXXXXXX",
   "smsType": "Transactional",
   "providerResponse": "Cannot deliver message to the specified destination country",
   "dwellTimeMs": 85
   },
   "status": "FAILURE"
   }
   ```

# SNS 전화번호 및 구독 관리
<a name="sms_manage"></a>

Amazon SNS는 계정의 SMS 메시지를 누가 수신하는지를 관리하기 위한 여러 옵션을 제공합니다. 제한된 빈도수에 한하여, 계정의 SMS 메시지 수신을 옵트아웃한 전화번호를 옵트인할 수 있습니다. SMS 구독에 메시지 전송을 중지하려면 구독 또는 구독에 게시하는 주제를 제거할 수 있습니다.

## SMS 메시지 수신 옵트아웃
<a name="sms_manage_optout"></a>

현지 법률 및 규정에서 요구하는 경우(예: 미국 및 캐나다), SMS 수신자는 다음과 함께 메시지에 회신하는 방식으로 디바이스를 사용하여 옵트아웃할 수 있습니다.
+ ARRET(프랑스어)
+ CANCEL
+ END
+ OPT-OUT
+ OPTOUT
+ QUIT
+ REMOVE
+ STOP
+ TD
+ UNSUBSCRIBE

옵트아웃하려면 수신자가 Amazon SNS가 메시지를 전송하는 데 사용한 것과 동일한 [발신 번호](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html)로 회신해야 합니다. 옵트아웃 후 수신자는 전화번호를 옵트인하지 AWS 계정 않는 한 더 이상에서 배달된 SMS 메시지를 수신하지 않습니다.

전화번호에서 Amazon SNS 주제를 구독하는 경우 옵트아웃하더라도 구독이 제거되지 않지만, 전화번호를 옵트인하지 않는 한 SMS 메시지는 해당 구독으로 전송되지 않습니다.

## Amazon SNS 콘솔을 사용하여 전화번호 및 구독 관리
<a name="sms_manage_console"></a>

Amazon SNS 콘솔을 사용하여 어떤 전화번호가 계정의 SMS 메시지를 수신하는지를 제어할 수 있습니다.

### Amazon SNS 콘솔을 옵트아웃한 전화번호 옵트인
<a name="sms_manage_optout_console"></a>

어떤 전화번호가 계정의 SMS 메시지 수신을 옵트아웃했는지 볼 수 있으며, 이러한 전화번호를 옵트인하여 해당 전화번호로 메시지를 전송을 다시 시작할 수 있습니다.

30일마다 한 번만 전화번호를 옵트인할 수 있습니다.

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 콘솔 메뉴에서 리전 선택기를 [SMS 메시징을 지원하는 리전](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html)으로 설정합니다.

1. 탐색 창에서 **문자 메시지(SMS)**를 선택합니다.

1. **모바일 문자 메시지(SMS)** 페이지의 **옵트아웃된 전화번호** 섹션에 옵트아웃 전화번호가 표시됩니다.

1. 옵트인하려는 전화번호의 확인란을 선택하고 **옵트인**을 선택합니다. 더 이상 전화번호가 옵트아웃되지 않으며 전송되는 SMS 메시지를 수신합니다.

#### Amazon SNS 콘솔에서 SMS 구독 삭제
<a name="sms_manage_subscriptions_console"></a>

SMS 구독을 삭제하여 주제에 게시할 때 해당 전화번호로 SMS 메시지를 전송하는 것을 중지합니다.

1. 탐색 창에서 **구독**을 선택합니다.

1. 삭제하려는 구독의 확인란을 선택합니다. 그런 다음 [**Actions**]를 선택하고 [**Delete Subscriptions**]를 선택합니다.

1. **삭제** 창에서 **삭제**를 선택합니다. Amazon SNS는 구독을 삭제하고 성공 메시지를 표시합니다.

#### Amazon SNS 콘솔에서 주제 삭제
<a name="sms_manage_topic_console"></a>

메시지를 구독 엔드포인트에 더 이상 게시하지 않으려는 경우 주제를 삭제합니다.

1. 탐색 창에서 **주제(Topics)**를 선택합니다.

1. 삭제하려는 주제의 확인란을 선택합니다. 그런 다음 [**Actions**]를 선택하고 [**Delete Topics**]를 선택합니다.

1. **삭제** 창에서 **삭제**를 선택합니다. Amazon SNS는 주제를 삭제하고 성공 메시지를 표시합니다.

### AWS SDK를 사용하여 전화번호 및 구독 관리
<a name="sms_manage_sdk"></a>

 AWS SDKs를 사용하여 Amazon SNS에 프로그래밍 방식으로 요청하고 계정에서 SMS 메시지를 수신할 수 있는 전화번호를 관리할 수 있습니다.

 AWS SDK를 사용하려면 자격 증명으로 구성해야 합니다. 자세한 정보는 *AWS SDK 및 도구 참조 설명서*의 [공유 구성 및 자격 증명 파일](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)을 참조하세요.

#### AWS SDK를 사용하여 옵트아웃된 모든 전화번호 보기
<a name="sms_view_optout_sdk"></a>

옵트아웃한 모든 전화번호를 보려면 Amazon SNS API를 통해 `ListPhoneNumbersOptedOut` 요청을 제출합니다.

다음 코드 예시는 `ListPhoneNumbersOptedOut`의 사용 방법을 보여 줍니다.

------
#### [ CLI ]

**AWS CLI**  
**SMS 메시지 옵트아웃을 나열하려면**  
다음 `list-phone-numbers-opted-out`예제에서는 SMS 메시지 수신을 옵트아웃한 전화번호를 나열합니다.  

```
aws sns list-phone-numbers-opted-out
```
출력:  

```
{
    "phoneNumbers": [
        "+15555550100"
    ]
}
```
+  API 세부 정보는  *AWS CLI 명령 참조*의 [ListPhoneNumbersOptedOut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/list-phone-numbers-opted-out.html)을 참조하세요.

------
#### [ Java ]

**SDK for Java 2.x**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.ListPhoneNumbersOptedOutRequest;
import software.amazon.awssdk.services.sns.model.ListPhoneNumbersOptedOutResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class ListOptOut {
    public static void main(String[] args) {
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        listOpts(snsClient);
        snsClient.close();
    }

    public static void listOpts(SnsClient snsClient) {
        try {
            ListPhoneNumbersOptedOutRequest request = ListPhoneNumbersOptedOutRequest.builder().build();
            ListPhoneNumbersOptedOutResponse result = snsClient.listPhoneNumbersOptedOut(request);
            System.out.println("Status is " + result.sdkHttpResponse().statusCode() + "\n\nPhone Numbers: \n\n"
                    + result.phoneNumbers());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  API 세부 정보는 *AWS SDK for Java 2.x API 참조*의 [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/ListPhoneNumbersOptedOut)을 참조하세요.

------
#### [ PHP ]

**SDK for PHP**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Returns a list of phone numbers that are opted out of receiving SMS messages from your AWS SNS account.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->listPhoneNumbersOptedOut();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  자세한 정보는 [AWS SDK for PHP 개발자 안내서](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#list-opted-out-phone-numbers)를 참조하세요.
+  API 세부 정보는 *AWS SDK for PHP API 참조*의 [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/ListPhoneNumbersOptedOut)을 참조하세요.

------

#### AWS SDK를 사용하여 전화번호가 옵트아웃되었는지 확인
<a name="sms_check_optout_sdk"></a>

전화번호가 옵트아웃되었는지 여부를 확인하려면 Amazon SNS API를 통해 `CheckIfPhoneNumberIsOptedOut` 요청을 제출합니다.

다음 코드 예시는 `CheckIfPhoneNumberIsOptedOut`의 사용 방법을 보여 줍니다.

------
#### [ .NET ]

**SDK for .NET**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/SNS#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
    using System;
    using System.Threading.Tasks;
    using Amazon.SimpleNotificationService;
    using Amazon.SimpleNotificationService.Model;

    /// <summary>
    /// This example shows how to use the Amazon Simple Notification Service
    /// (Amazon SNS) to check whether a phone number has been opted out.
    /// </summary>
    public class IsPhoneNumOptedOut
    {
        public static async Task Main()
        {
            string phoneNumber = "+15551112222";

            IAmazonSimpleNotificationService client = new AmazonSimpleNotificationServiceClient();

            await CheckIfOptedOutAsync(client, phoneNumber);
        }

        /// <summary>
        /// Checks to see if the supplied phone number has been opted out.
        /// </summary>
        /// <param name="client">The initialized Amazon SNS Client object used
        /// to check if the phone number has been opted out.</param>
        /// <param name="phoneNumber">A string representing the phone number
        /// to check.</param>
        public static async Task CheckIfOptedOutAsync(IAmazonSimpleNotificationService client, string phoneNumber)
        {
            var request = new CheckIfPhoneNumberIsOptedOutRequest
            {
                PhoneNumber = phoneNumber,
            };

            try
            {
                var response = await client.CheckIfPhoneNumberIsOptedOutAsync(request);

                if (response.HttpStatusCode == System.Net.HttpStatusCode.OK)
                {
                    string optOutStatus = response.IsOptedOut ? "opted out" : "not opted out.";
                    Console.WriteLine($"The phone number: {phoneNumber} is {optOutStatus}");
                }
            }
            catch (AuthorizationErrorException ex)
            {
                Console.WriteLine($"{ex.Message}");
            }
        }
    }
```
+  API 세부 정보는 *AWS SDK for .NET API 참조*의 [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)을 참조하세요.

------
#### [ CLI ]

**AWS CLI**  
**전화번호의 SMS 메시지 옵트아웃을 확인하려면**  
다음 `check-if-phone-number-is-opted-out` 예제에서는 지정된 전화번호가 현재 AWS 계정에서 SMS 메시지 수신을 옵트아웃했는지 확인합니다.  

```
aws sns check-if-phone-number-is-opted-out \
    --phone-number +1555550100
```
출력:  

```
{
    "isOptedOut": false
}
```
+  API 세부 정보는 *AWS CLI 명령 참조*의 [CheckIfPhoneNumberIsOptedOut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/check-if-phone-number-is-opted-out.html)을 참조하세요.

------
#### [ Java ]

**SDK for Java 2.x**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CheckIfPhoneNumberIsOptedOutRequest;
import software.amazon.awssdk.services.sns.model.CheckIfPhoneNumberIsOptedOutResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class CheckOptOut {
    public static void main(String[] args) {

        final String usage = """

                Usage:    <phoneNumber>

                Where:
                   phoneNumber - The mobile phone number to look up (for example, +1XXX5550100).

                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String phoneNumber = args[0];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        checkPhone(snsClient, phoneNumber);
        snsClient.close();
    }

    public static void checkPhone(SnsClient snsClient, String phoneNumber) {
        try {
            CheckIfPhoneNumberIsOptedOutRequest request = CheckIfPhoneNumberIsOptedOutRequest.builder()
                    .phoneNumber(phoneNumber)
                    .build();

            CheckIfPhoneNumberIsOptedOutResponse result = snsClient.checkIfPhoneNumberIsOptedOut(request);
            System.out.println(
                    result.isOptedOut() + "Phone Number " + phoneNumber + " has Opted Out of receiving sns messages." +
                            "\n\nStatus was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  API 세부 정보는 *AWS SDK for Java 2.x API 참조*의 [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)을 참조하세요.

------
#### [ JavaScript ]

**SDK for JavaScript (v3)**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.
별도의 모듈에서 클라이언트를 생성하고 내보냅니다.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
SDK 및 클라이언트 모듈을 가져오고 API를 호출합니다.  

```
import { CheckIfPhoneNumberIsOptedOutCommand } from "@aws-sdk/client-sns";

import { snsClient } from "../libs/snsClient.js";

export const checkIfPhoneNumberIsOptedOut = async (
  phoneNumber = "5555555555",
) => {
  const command = new CheckIfPhoneNumberIsOptedOutCommand({
    phoneNumber,
  });

  const response = await snsClient.send(command);
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '3341c28a-cdc8-5b39-a3ee-9fb0ee125732',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   isOptedOut: false
  // }
  return response;
};
```
+  자세한 정보는 [AWS SDK for JavaScript 개발자 안내서](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-sending-sms.html#sending-sms-checkifphonenumberisoptedout)를 참조하세요.
+  API 세부 정보는 *AWS SDK for JavaScript API 참조*의 [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/CheckIfPhoneNumberIsOptedOutCommand)을 참조하세요.

------
#### [ PHP ]

**SDK for PHP**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Indicates whether the phone number owner has opted out of receiving SMS messages from your AWS SNS account.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$phone = '+1XXX5550100';

try {
    $result = $SnSclient->checkIfPhoneNumberIsOptedOut([
        'phoneNumber' => $phone,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  자세한 정보는 [AWS SDK for PHP 개발자 안내서](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#check-if-a-phone-number-has-opted-out)를 참조하세요.
+  API 세부 정보는 *AWS SDK for PHP API 참조*의 [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)을 참조하세요.

------

#### Amazon SNS API를 사용하여 옵트아웃된 전화번호 옵트인
<a name="sms_manage_optin_sdk"></a>

전화번호를 옵트인하려면 Amazon SNS API를 통해 `OptInPhoneNumber` 요청을 제출합니다.

30일마다 한 번만 전화번호를 옵트인할 수 있습니다.

#### AWS SDK를 사용하여 SMS 구독 삭제
<a name="sms_manage_subscriptions_sdk"></a>

Amazon SNS 주제에서 SMS 구독을 삭제하려면 Amazon SNS API를 통해 `ListSubscriptions` 요청을 제출하여 구독 ARN을 가져온 다음 ARN을 `Unsubscribe` 요청에 전달합니다.

다음 코드 예시는 `Unsubscribe`의 사용 방법을 보여 줍니다.

------
#### [ .NET ]

**SDK for .NET**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/cross-service/TopicsAndQueues#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.
구독 ARN으로 주제 구독을 취소합니다.  

```
    /// <summary>
    /// Unsubscribe from a topic by a subscription ARN.
    /// </summary>
    /// <param name="subscriptionArn">The ARN of the subscription.</param>
    /// <returns>True if successful.</returns>
    public async Task<bool> UnsubscribeByArn(string subscriptionArn)
    {
        var unsubscribeResponse = await _amazonSNSClient.UnsubscribeAsync(
            new UnsubscribeRequest()
            {
                SubscriptionArn = subscriptionArn
            });
        return unsubscribeResponse.HttpStatusCode == HttpStatusCode.OK;
    }
```
+  API 세부 정보는 [AWS SDK for .NET API 참조](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Unsubscribe)의 *Unsubscribe*를 참조하세요.

------
#### [ C\$1\$1 ]

**SDK for C\$1\$1**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
//! Delete a subscription to an Amazon Simple Notification Service (Amazon SNS) topic.
/*!
  \param subscriptionARN: The Amazon Resource Name (ARN) for an Amazon SNS topic subscription.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::unsubscribe(const Aws::String &subscriptionARN,
                              const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::UnsubscribeRequest request;
    request.SetSubscriptionArn(subscriptionARN);

    const Aws::SNS::Model::UnsubscribeOutcome outcome = snsClient.Unsubscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Unsubscribed successfully " << std::endl;
    }
    else {
        std::cerr << "Error while unsubscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  API 세부 정보는 [AWS SDK for C\$1\$1 API 참조](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Unsubscribe)의 *Unsubscribe*를 참조하세요.

------
#### [ CLI ]

**AWS CLI**  
**주제 구독을 취소하려면**  
다음 `unsubscribe`예제에서는 주제에서 지정된 구독을 삭제합니다.  

```
aws sns unsubscribe \
    --subscription-arn arn:aws:sns:us-west-2:0123456789012:my-topic:8a21d249-4329-4871-acc6-7be709c6ea7f
```
이 명령은 출력을 생성하지 않습니다.  
+  API 세부 정보는 *AWS CLI 명령 참조*의 [Unsubscribe](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/unsubscribe.html)를 참조하세요.

------
#### [ Java ]

**SDK for Java 2.x**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.UnsubscribeRequest;
import software.amazon.awssdk.services.sns.model.UnsubscribeResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class Unsubscribe {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <subscriptionArn>

                Where:
                   subscriptionArn - The ARN of the subscription to delete.
                """;

        if (args.length < 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String subscriptionArn = args[0];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        unSub(snsClient, subscriptionArn);
        snsClient.close();
    }

    public static void unSub(SnsClient snsClient, String subscriptionArn) {
        try {
            UnsubscribeRequest request = UnsubscribeRequest.builder()
                    .subscriptionArn(subscriptionArn)
                    .build();

            UnsubscribeResponse result = snsClient.unsubscribe(request);
            System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode()
                    + "\n\nSubscription was removed for " + request.subscriptionArn());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  API 세부 정보는 [AWS SDK for Java 2.x API 참조](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Unsubscribe)의 *Unsubscribe*를 참조하세요.

------
#### [ JavaScript ]

**SDK for JavaScript (v3)**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.
별도의 모듈에서 클라이언트를 생성하고 내보냅니다.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
SDK 및 클라이언트 모듈을 가져오고 API를 호출합니다.  

```
import { UnsubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} subscriptionArn - The ARN of the subscription to cancel.
 */
const unsubscribe = async (
  subscriptionArn = "arn:aws:sns:us-east-1:xxxxxxxxxxxx:mytopic:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
) => {
  const response = await snsClient.send(
    new UnsubscribeCommand({
      SubscriptionArn: subscriptionArn,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '0178259a-9204-507c-b620-78a7570a44c6',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
  return response;
};
```
+  자세한 정보는 [AWS SDK for JavaScript 개발자 안내서](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-unsubscribing)를 참조하세요.
+  API 세부 정보는 *AWS SDK for JavaScript API 참조*의 [Unsubscribe](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/UnsubscribeCommand)를 참조하세요.

------
#### [ Kotlin ]

**SDK for Kotlin**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
suspend fun unSub(subscriptionArnVal: String) {
    val request =
        UnsubscribeRequest {
            subscriptionArn = subscriptionArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        snsClient.unsubscribe(request)
        println("Subscription was removed for ${request.subscriptionArn}")
    }
}
```
+  API 세부 정보는 *AWS SDK for Kotlin API 참조*의 [Unsubscribe](https://sdk.amazonaws.com/kotlin/api/latest/index.html)를 참조하세요.

------
#### [ PHP ]

**SDK for PHP**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Deletes a subscription to an Amazon SNS topic.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$subscription = 'arn:aws:sns:us-east-1:111122223333:MySubscription';

try {
    $result = $SnSclient->unsubscribe([
        'SubscriptionArn' => $subscription,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  자세한 정보는 [AWS SDK for PHP 개발자 안내서](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-subscribing-unsubscribing-topics.html#unsubscribe-from-a-topic)를 참조하세요.
+  API 세부 정보는 *AWS SDK for PHP API 참조*의 [Unsubscribe](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Unsubscribe)를 참조하세요.

------
#### [ Python ]

**SDK for Python (Boto3)**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    @staticmethod
    def delete_subscription(subscription):
        """
        Unsubscribes and deletes a subscription.
        """
        try:
            subscription.delete()
            logger.info("Deleted subscription %s.", subscription.arn)
        except ClientError:
            logger.exception("Couldn't delete subscription %s.", subscription.arn)
            raise
```

```
class SnsWrapper:
    """Wrapper class for managing Amazon SNS operations."""

    def __init__(self, sns_client: Any) -> None:
        """
        Initialize the SnsWrapper.

        :param sns_client: A Boto3 Amazon SNS client.
        """
        self.sns_client = sns_client

    @classmethod
    def from_client(cls) -> 'SnsWrapper':
        """
        Create an SnsWrapper instance using a default boto3 client.

        :return: An instance of this class.
        """
        sns_client = boto3.client('sns')
        return cls(sns_client)


    def unsubscribe(self, subscription_arn: str) -> bool:
        """
        Unsubscribe from an SNS topic.

        :param subscription_arn: The ARN of the subscription to remove.
        :return: True if successful.
        :raises ClientError: If the unsubscribe operation fails.
        """
        try:
            self.sns_client.unsubscribe(SubscriptionArn=subscription_arn)
            
            logger.info(f"Unsubscribed: {subscription_arn}")
            return True

        except ClientError as e:
            error_code = e.response.get('Error', {}).get('Code', 'Unknown')
            
            if error_code == 'NotFound':
                logger.warning(f"Subscription not found: {subscription_arn}")
                return True  # Already unsubscribed
            else:
                logger.error(f"Error unsubscribing: {error_code} - {e}")
                raise
```
+  API 세부 정보는 *AWS SDK for Python (Boto3) API 참조*의 [Unsubscribe](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Unsubscribe)를 참조하세요.

------
#### [ SAP ABAP ]

**SDK for SAP ABAP API**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
    TRY.
        lo_sns->unsubscribe( iv_subscriptionarn = iv_subscription_arn ).
        MESSAGE 'Subscription deleted.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Subscription does not exist.' TYPE 'E'.
      CATCH /aws1/cx_snsinvalidparameterex.
        MESSAGE 'Subscription with "PendingConfirmation" status cannot be deleted/unsubscribed. Confirm subscription before performing unsubscribe operation.' TYPE 'E'.
    ENDTRY.
```
+  API에 대한 세부 정보는 *SAP ABAP용AWS SDK API 참조*의 [Unsubscribe](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)를 참조하세요.

------
#### [ Swift ]

**SDK for Swift**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        _ = try await snsClient.unsubscribe(
            input: UnsubscribeInput(
                subscriptionArn: arn
            )
        )

        print("Unsubscribed.")
```
+  API 세부 정보는 *AWS SDK for Swift API 참조*의 [Unsubscribe](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/unsubscribe(input:)) 섹션을 참조하세요.

------

#### AWS SDK를 사용하여 주제 삭제
<a name="sms_manage_topic_sdk"></a>

주제 및 해당 주제의 모든 구독을 삭제하려면 Amazon SNS API를 통해 `ListTopics` 요청을 제출하여 주제 ARN을 가져온 다음 ARN을 `DeleteTopic` 요청에 전달합니다.

다음 코드 예시는 `DeleteTopic`의 사용 방법을 보여 줍니다.

------
#### [ .NET ]

**SDK for .NET**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/cross-service/TopicsAndQueues#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.
주제 ARN으로 주제를 삭제합니다.  

```
    /// <summary>
    /// Delete a topic by its topic ARN.
    /// </summary>
    /// <param name="topicArn">The ARN of the topic.</param>
    /// <returns>True if successful.</returns>
    public async Task<bool> DeleteTopicByArn(string topicArn)
    {
        var deleteResponse = await _amazonSNSClient.DeleteTopicAsync(
            new DeleteTopicRequest()
            {
                TopicArn = topicArn
            });
        return deleteResponse.HttpStatusCode == HttpStatusCode.OK;
    }
```
+  API 세부 정보는 *AWS SDK for .NET API 참조*의 [DeleteTopic](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/DeleteTopic)을 참조하세요.

------
#### [ C\$1\$1 ]

**SDK for C\$1\$1**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
//! Delete an Amazon Simple Notification Service (Amazon SNS) topic.
/*!
  \param topicARN: The Amazon Resource Name (ARN) for an Amazon SNS topic.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::deleteTopic(const Aws::String &topicARN,
                              const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::DeleteTopicRequest request;
    request.SetTopicArn(topicARN);

    const Aws::SNS::Model::DeleteTopicOutcome outcome = snsClient.DeleteTopic(request);

    if (outcome.IsSuccess()) {
        std::cout << "Successfully deleted the Amazon SNS topic " << topicARN << std::endl;
    }
    else {
        std::cerr << "Error deleting topic " << topicARN << ":" <<
                  outcome.GetError().GetMessage() << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  API 세부 정보는 *AWS SDK for C\$1\$1 API 참조*의 [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/DeleteTopic)을 참조하세요.

------
#### [ CLI ]

**AWS CLI**  
**SNS 주제를 삭제하려면**  
다음 `delete-topic`예제에서는 지정된 SNS 주제를 삭제합니다.  

```
aws sns delete-topic \
    --topic-arn "arn:aws:sns:us-west-2:123456789012:my-topic"
```
이 명령은 출력을 생성하지 않습니다.  
+  API 세부 정보는 *AWS CLI 명령 참조*의 [DeleteTopic](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/delete-topic.html)을 참조하세요.

------
#### [ Go ]

**SDK for Go V2**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/gov2/workflows/topics_and_queues#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
import (
	"context"
	"encoding/json"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/sns"
	"github.com/aws/aws-sdk-go-v2/service/sns/types"
)

// SnsActions encapsulates the Amazon Simple Notification Service (Amazon SNS) actions
// used in the examples.
type SnsActions struct {
	SnsClient *sns.Client
}



// DeleteTopic delete an Amazon SNS topic.
func (actor SnsActions) DeleteTopic(ctx context.Context, topicArn string) error {
	_, err := actor.SnsClient.DeleteTopic(ctx, &sns.DeleteTopicInput{
		TopicArn: aws.String(topicArn)})
	if err != nil {
		log.Printf("Couldn't delete topic %v. Here's why: %v\n", topicArn, err)
	}
	return err
}
```
+  API 세부 정보는 *AWS SDK for Go API 참조*의 [DeleteTopic](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/sns#Client.DeleteTopic)을 참조하세요.

------
#### [ Java ]

**SDK for Java 2.x**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.DeleteTopicRequest;
import software.amazon.awssdk.services.sns.model.DeleteTopicResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class DeleteTopic {
    public static void main(String[] args) {
        final String usage = """

                Usage:     <topicArn>

                Where:
                   topicArn - The ARN of the topic to delete.
                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicArn = args[0];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        System.out.println("Deleting a topic with name: " + topicArn);
        deleteSNSTopic(snsClient, topicArn);
        snsClient.close();
    }

    public static void deleteSNSTopic(SnsClient snsClient, String topicArn) {
        try {
            DeleteTopicRequest request = DeleteTopicRequest.builder()
                    .topicArn(topicArn)
                    .build();

            DeleteTopicResponse result = snsClient.deleteTopic(request);
            System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  API 세부 정보는 *AWS SDK for Java 2.x API 참조*의 [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/DeleteTopic)을 참조하세요.

------
#### [ JavaScript ]

**SDK for JavaScript (v3)**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.
별도의 모듈에서 클라이언트를 생성하고 내보냅니다.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
SDK 및 클라이언트 모듈을 가져오고 API를 호출합니다.  

```
import { DeleteTopicCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic to delete.
 */
export const deleteTopic = async (topicArn = "TOPIC_ARN") => {
  const response = await snsClient.send(
    new DeleteTopicCommand({ TopicArn: topicArn }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'a10e2886-5a8f-5114-af36-75bd39498332',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
};
```
+  자세한 정보는 [AWS SDK for JavaScript 개발자 안내서](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-managing-topics-deletetopic)를 참조하세요.
+  API 세부 정보는 *AWS SDK for JavaScript API 참조*의 [DeleteTopic](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/DeleteTopicCommand)을 참조하세요.

------
#### [ Kotlin ]

**SDK for Kotlin**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
suspend fun deleteSNSTopic(topicArnVal: String) {
    val request =
        DeleteTopicRequest {
            topicArn = topicArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        snsClient.deleteTopic(request)
        println("$topicArnVal was successfully deleted.")
    }
}
```
+  API 세부 정보는 *AWS SDK for Kotlin API 참조*의 [DeleteTopic](https://sdk.amazonaws.com/kotlin/api/latest/index.html)를 참조하세요.

------
#### [ PHP ]

**SDK for PHP**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Deletes an SNS topic and all its subscriptions.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->deleteTopic([
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  API 세부 정보는 *AWS SDK for PHP API 참조*의 [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/DeleteTopic)을 참조하세요.

------
#### [ Python ]

**SDK for Python (Boto3)**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    @staticmethod
    def delete_topic(topic):
        """
        Deletes a topic. All subscriptions to the topic are also deleted.
        """
        try:
            topic.delete()
            logger.info("Deleted topic %s.", topic.arn)
        except ClientError:
            logger.exception("Couldn't delete topic %s.", topic.arn)
            raise
```

```
class SnsWrapper:
    """Wrapper class for managing Amazon SNS operations."""

    def __init__(self, sns_client: Any) -> None:
        """
        Initialize the SnsWrapper.

        :param sns_client: A Boto3 Amazon SNS client.
        """
        self.sns_client = sns_client

    @classmethod
    def from_client(cls) -> 'SnsWrapper':
        """
        Create an SnsWrapper instance using a default boto3 client.

        :return: An instance of this class.
        """
        sns_client = boto3.client('sns')
        return cls(sns_client)


    def delete_topic(self, topic_arn: str) -> bool:
        """
        Delete an SNS topic.

        :param topic_arn: The ARN of the topic to delete.
        :return: True if successful.
        :raises ClientError: If the topic deletion fails.
        """
        try:
            self.sns_client.delete_topic(TopicArn=topic_arn)
            
            logger.info(f"Deleted topic: {topic_arn}")
            return True

        except ClientError as e:
            error_code = e.response.get('Error', {}).get('Code', 'Unknown')
            
            if error_code == 'NotFound':
                logger.warning(f"Topic not found: {topic_arn}")
                return True  # Already deleted
            else:
                logger.error(f"Error deleting topic: {error_code} - {e}")
                raise
```
+  API 세부 정보는 *AWS SDK for Python (Boto3) API 참조*의 [DeleteTopic](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/DeleteTopic)를 참조하세요.

------
#### [ SAP ABAP ]

**SDK for SAP ABAP API**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
    TRY.
        lo_sns->deletetopic( iv_topicarn = iv_topic_arn ).
        MESSAGE 'SNS topic deleted.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Topic does not exist.' TYPE 'E'.
    ENDTRY.
```
+  API에 대한 세부 정보는 *SAP ABAP용AWS SDK API 참조*의 [DeleteTopic](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)을 참조하세요.

------
#### [ Swift ]

**SDK for Swift**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        _ = try await snsClient.deleteTopic(
            input: DeleteTopicInput(topicArn: arn)
        )
```
+  API 세부 정보는 *AWS SDK for Swift API 참조*의 [DeleteTopic](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/deletetopic(input:)) 섹션을 참조하세요.

------

# Amazon SNS SMS 활동 모니터링
<a name="sms_stats"></a>

SMS 활동을 모니터링하여 대상 전화번호, 전송 성공 또는 실패, 실패 이유, 비용 및 기타 정보를 추적할 수 있습니다. Amazon SNS는 콘솔에서 통계를 요약하고, Amazon CloudWatch에 정보를 보내고, 지정한 Amazon S3 버킷에 일일 SMS 사용 보고서를 전송하여 도움을 줍니다.

# Amazon SNS SMS 전송 통계 보기
<a name="sms_stats_console"></a>

Amazon SNS 콘솔을 사용하여 초신 SMS 전송에 대한 통계를 볼 수 있습니다.

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 콘솔 메뉴에서 리전 선택기를 [SMS 메시징을 지원하는 리전](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)으로 설정합니다.

1. 탐색 창에서 **문자 메시지(SMS)**를 선택합니다.

1. [**Text messaging (SMS)**] 페이지의 [**Account stats**] 섹션에서 트랜잭션 및 프로모션 SMS 메시지 전송에 대한 차트를 봅니다. 각 차트에는 이전 15일에 대한 다음 데이터가 표시됩니다.
   + 전송 비율(전송 성공 비율)
   + 보냄(전송 시도 수)
   + 실패(전송 실패 수)

이 페이지에서 **사용량** 버튼을 선택하여 일일 사용 보고서를 저장하는 Amazon S3 버킷으로 이동할 수도 있습니다. 자세한 내용은 [Amazon SNS 일일 SMS 사용 보고서 구독](sms_stats_usage.md) 섹션을 참조하세요.

# Amazon CloudWatch 지표 및 로그를 사용한 Amazon SNS SMS 전송 모니터링
<a name="sms_stats_cloudwatch"></a>

Amazon CloudWatch 및 Amazon CloudWatch Logs를 사용하여 SMS 메시지 전송을 모니터링할 수 있습니다.

## Amazon CloudWatch 지표 보기
<a name="sms_stats_cloudwatch_metrics"></a>

Amazon SNS는 SMS 메시지 전송에 대한 지표를 자동으로 수집하고 Amazon CloudWatch에 푸시합니다. CloudWatch를 사용하여 이러한 측정치를 모니터링하고 지표가 임계값을 초과할 때 알리는 경보를 생성할 수 있습니다. 예를 들어 CloudWatch 지표를 모니터링하여 사용자의 SMS 전송 속도와 당월 누적 SMS 요금을 알아볼 수 있습니다.

CloudWatch 지표 모니터링, CloudWatch 경보 설정, 사용 가능한 지표 유형에 대한 자세한 내용은 [CloudWatch를 사용하여 Amazon SNS 주제 모니터링](sns-monitoring-using-cloudwatch.md)에서 확인하세요.

## CloudWatch Logs 보기
<a name="sns-viewing-cloudwatch-logs"></a>

Amazon SNS가 Amazon CloudWatch Logs에 쓸 수 있도록 설정하여 SMS 메시지 전송 성공 및 실패에 대한 정보를 수집할 수 있습니다. 전송하는 각 SMS 메시지에 대해 Amazon SNS는 메시지 가격, 성공 또는 실패 상태, 실패 이유(메시지가 실패한 경우), 메시지 유지 시간 및 기타 정보가 포함된 로그를 작성합니다.

**SMS 메시지에 대한 CloudWatch Logs를 사용하고 보려면**

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 콘솔 메뉴에서 리전 선택기를 [SMS 메시징을 지원하는 리전](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html)으로 설정합니다.

1. 탐색 창에서 **문자 메시지(SMS)**를 선택합니다.

1. **모바일 문자 메시지(SMS)** 페이지의 **문자 메시지 기본 설정** 섹션에서 **편집**을 선택합니다.

1. 다음 페이지에서 **Delivery status logging(전송 상태 로깅)** 섹션을 확장합니다.

1. **성공 샘플 비율**에서 Amazon SNS가 CloudWatch Logs에 로그를 작성할 SMS 전송 성공 비율을 지정합니다. 예:
   + 전송 실패에 대한 로그만 작성하려면 이 값을 0으로 설정합니다.
   + 전송 성공의 10%에 대한 로그를 작성하려면 이 값을 10으로 설정합니다.

   비율을 지정하지 않으면 Amazon SNS는 모든 전송 성공에 대한 로그를 작성합니다.

1. 필요한 권한을 제공하려면 다음 중 하나를 수행하세요.
   + 새 서비스 역할을 만들려면 **새 서비스 역할 생성**을 선택한 다음 **새 역할 생성**을 선택합니다. 다음 페이지에서 **허용**을 선택하여 Amazon SNS에 계정 리소스에 대한 쓰기 액세스 권한을 부여합니다.
   + 기존 서비스 역할을 사용하려면 **기존 서비스 역할 사용**을 선택한 다음 **성공 및 실패한 전송에 대한 IAM 역할** 상자에 ARN 이름을 붙여넣습니다.

     지정하는 서비스 역할은 계정 리소스에 대한 쓰기 액세스를 허용해야 합니다. IAM 역할 생성에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 서비스에 대한 역할 생성을](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) 참조하세요.

1. **변경 사항 저장**을 선택합니다.

1. **모바일 문자 메시징(SMS)** 페이지로 돌아가서 **전송 상태 로그** 섹션으로 이동하여 사용 가능한 로그를 확인합니다.
**참고**  
대상 전화번호의 통신 사업자에 따라 Amazon SNS 콘솔에 전송 로그가 표시되는 데 최대 72시간이 걸릴 수 있습니다.

## SMS 전송 성공에 대한 로그 예제
<a name="example-log-successful-sms-delivery"></a>

SMS 전송 성공에 대한 전송 상태 로그는 다음 예제와 비슷합니다.

```
{
    "notification": {
        "messageId": "34d9b400-c6dd-5444-820d-fbeb0f1f54cf",
        "timestamp": "2016-06-28 00:40:34.558"
    },
    "delivery": {
        "phoneCarrier": "My Phone Carrier",
        "mnc": 270,
        "numberOfMessageParts": 1,
        "destination": "+1XXX5550100",
        "priceInUSD": 0.00645,
        "smsType": "Transactional",
        "mcc": 310,
        "providerResponse": "Message has been accepted by phone carrier",
        "dwellTimeMs": 599,
        "dwellTimeMsUntilDeviceAck": 1344
    },
    "status": "SUCCESS"
}
```

## SMS 전송 실패에 대한 로그 예제
<a name="example-log-failed-sms-delivery"></a>

SMS 전송 실패에 대한 전송 상태 로그는 다음 예제와 비슷합니다.

```
{
    "notification": {
        "messageId": "1077257a-92f3-5ca3-bc97-6a915b310625",
        "timestamp": "2016-06-28 00:40:34.559"
    },
    "delivery": {
        "mnc": 0,
        "numberOfMessageParts": 1,
        "destination": "+1XXX5550100",
        "priceInUSD": 0.00645,
        "smsType": "Transactional",
        "mcc": 0,
        "providerResponse": "Unknown error attempting to reach phone",
        "dwellTimeMs": 1420,
        "dwellTimeMsUntilDeviceAck": 1692
    },
    "status": "FAILURE"
}
```

## SMS 전송 실패 이유
<a name="sms_stats_delivery_fail_reasons"></a>

실패 이유는 `providerResponse` 속성을 통해 제공됩니다. SMS 메시지는 다음과 같은 이유로 전송에 실패할 수 있습니다.
+ 전화 통신사가 스팸으로 차단함
+ 대상이 차단된 목록에 있음
+ 잘못된 전화번호
+ 메시지 본문이 잘못됨
+ 전화 통신사가 이 메시지를 차단함
+ 전화 통신사가 현재 연결 불가능/이용 불가능함
+ 전화에서 SMS가 차단됨
+ 휴대폰이 차단된 목록에 있음
+ 전화가 현재 연결 불가능/이용 불가능함
+ 전화번호가 옵트아웃됨
+ 이 메시지를 전송하면 최고 가격이 초과됨
+ 전화 연결을 시도하는 중 알 수 없는 오류 발생

# Amazon SNS 일일 SMS 사용 보고서 구독
<a name="sms_stats_usage"></a>

Amazon SNS의 일일 사용 보고서를 구독하여 SMS 전송을 모니터링할 수 있습니다. 매일 하나 이상의 SMS 메시지를 전송하는 사용자의 경우, Amazon SNS는 사용 보고서를 지정된 Amazon S3 버킷에 CSV 파일로 전송합니다. SMS 사용 보고서가 Amazon S3 버킷에서 사용 가능하게 되려면 24시간이 걸립니다.

## 일일 사용 보고서 정보
<a name="daily_usage_info"></a>

사용 보고서에는 계정에서 전송한 각 SMS 메시지에 대해 다음과 같은 정보가 포함됩니다.

 보고서에는 옵트아웃한 수신자에게 전송된 메시지는 포함되지 않습니다.
+ 메시지의 게시 시간(UTC)
+ 메시지 ID
+ 대상 전화번호
+ 메시지 유형
+ 전송 상태
+ 메시지 가격(USD)
+ 부분 번호(너무 길어서 단일 메시지로 전송할 수 없는 경우 메시지가 여러 부분으로 분할됨)
+ 총 부분 수

**참고**  
Amazon SNS에서 부품 번호를 받지 못한 경우 값을 0으로 설정합니다.

## 일일 사용 보고서 구독
<a name="subscribe-to-daily-usage-reports"></a>

일일 사용 보고서를 구독하려면 적절한 권한으로 Amazon S3 버킷을 생성해야 합니다.

**일일 사용 보고서에 대한 Amazon S3 버킷을 만들려면**

1. SMS 메시지를 AWS 계정 보내는에서 [Amazon S3 콘솔](https://console.aws.amazon.com/s3/)에 로그인합니다.

1. **버킷 만들기**를 선택합니다.

1. **버킷 이름**으로는 계정과 조직에 고유한 이름을 입력하는 것이 좋습니다. 예를 들면, `<my-bucket-prefix>-<account_id>-<org-id>`. 패턴을 사용하세요.

   버킷 이름의 규칙 및 제한 사항에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [버킷 명명 규칙](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules)을 참조하세요.

1. **생성(Create)**을 선택합니다.

1. **모든 버킷** 테이블에서 버킷을 선택합니다.

1. **권한** 섹션에서 **버킷 정책**을 선택합니다.

1. **버킷 정책 편집기** 창에서 Amazon SNS 서비스 보안 주체가 버킷에 작성할 수 있도록 허용하는 정책을 제공합니다. 예제는 [버킷 정책 예제](#example_bucket_policy) 섹션을 참조하세요.

   정책 예제를 사용하는 경우 *my-s3-bucket*을 3단계에서 선택한 버킷 이름으로 대체해야 합니다.

1. **저장**을 선택합니다.

**일일 사용 보고서를 구독하려면**

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/)에 로그인합니다.

1. 탐색 창에서 **문자 메시지(SMS)**를 선택합니다.

1. **문자 메시지(SMS)** 페이지의 **문자 메시지 기본 설정** 섹션에서 **편집**을 선택합니다.  
![\[Amazon SNS 콘솔의 문자 메시지 기본 설정 섹션\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/daily-usage-report1.png)

1. **문자 메시지 기본 설정 편집** 페이지의 **세부 정보** 섹션에서 **Amazon S3 bucket name for usage reports**를 지정합니다.  
![\[Amazon SNS 콘솔의 문자 메시지 기본 설정 편집 페이지의 세부 정보 섹션\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/daily-usage-report2.png)

1. **변경 사항 저장**을 선택합니다.

### 버킷 정책 예제
<a name="example_bucket_policy"></a>

다음 정책은 Amazon SNS 서비스 보안 주체가 `s3:PutObject`, `s3:GetBucketLocation` 및 `s3:ListBucket` 작업을 수행하도록 허용합니다.

AWS 는 계정의 리소스에 대한 액세스 권한이 부여된 서비스 보안 주체가 있는 모든 서비스를 위한 도구를 제공합니다. Amazon S3 버킷 정책 스테이트먼트의 위탁자가 [혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)인 경우입니다. 버킷이 일일 사용 보고서를 수신할 수 있는 리전 및 계정을 제한하려면 아래 예와 같이 `aws:SourceArn`을 사용합니다. 이러한 보고서를 생성할 수 있는 리전을 제한하지 않으려면 `aws:SourceAccount`를 사용하여 보고서를 생성하는 계정을 기반으로 제한하세요. 리소스의 ARN을 모르는 경우 `aws:SourceAccount`를 사용합니다.

Amazon SNS로부터 일일 SMS 사용 보고서를 수신하기 위해 Amazon S3 버킷을 생성할 때 다음 예와 같이 혼동된 대리자 방지를 포함합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPutObject",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AllowGetBucketLocation",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:GetBucketLocation",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AllowListBucket",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        }
    ]
}
```

------

**참고**  
Amazon S3 정책의 `Condition` 요소에 지정된 AWS 계정 이 소유한 Amazon S3 버킷에 사용 보고서를 게시할 수 있습니다. 다른 AWS 계정 이 소유한 Amazon S3 버킷에 사용 보고서를 게시하려면 [다른에서 Amazon S3 객체를 복사하려면 어떻게 해야 합니까 AWS 계정?](https://aws.amazon.com/premiumsupport/knowledge-center/copy-s3-objects-account/)를 참조하세요.

### 일일 사용 보고서 예제
<a name="example_report"></a>

매일 일일 사용 보고서를 구독한 후 Amazon SNS는 사용 데이터가 포함된 CSV 파일을 다음 위치에 저장합니다.

```
<my-s3-bucket>/SMSUsageReports/<region>/YYYY/MM/DD/00x.csv.gz
```

각 파일에는 최대 50,000개의 레코드가 포함될 수 있습니다. 1일에 대한 레코드가 이 할당량을 초과하는 경우 Amazon SNS는 여러 파일을 추가합니다. 다음 그림에서는 보고서 예제를 보여 줍니다.

```
PublishTimeUTC,MessageId,DestinationPhoneNumber,MessageType,DeliveryStatus,PriceInUSD,PartNumber,TotalParts
2016-05-10T03:00:29.476Z,96a298ac-1458-4825-a7eb-7330e0720b72,1XXX5550100,Promotional,Message has been accepted by phone carrier,0.90084,0,1
2016-05-10T03:00:29.561Z,1e29d394-d7f4-4dc9-996e-26412032c344,1XXX5550100,Promotional,Message has been accepted by phone carrier,0.34322,0,1
2016-05-10T03:00:30.769Z,98ba941c-afc7-4c51-ba2c-56c6570a6c08,1XXX5550100,Transactional,Message has been accepted by phone carrier,0.27815,0,1
```

# Amazon SNS SMS 메시징에 대한 지원 요청
<a name="channels-sms-awssupport"></a>

**중요**  
Amazon SNS SMS 개발자 안내서가 업데이트되었습니다. Amazon SNS는 SMS 메시지 전송을 위해 [AWS 최종 사용자 메시징 SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)와 통합되었습니다. 이 안내서에는 Amazon SNS SMS 메시지를 생성, 구성, 관리하는 방법에 대한 최신 정보가 포함되어 있습니다.

Amazon SNS의 특정 SMS 옵션은 지원에 문의할 때까지 AWS 계정에 사용할 수 없습니다. 다음을 요청하려면 [AWS Support 센터](https://console.aws.amazon.com/support/home#/)에서 사례를 생성하세요.
+ 월별 SMS 지출 임계값 증가

  기본적으로 월별 지출 임계값은 \$11.00(USD)입니다. 지출 임계값에 따라 Amazon SNS에서 보낼 수 있는 메시지의 볼륨이 결정됩니다. SMS 사용 사례에 대한 예상 월별 메시지 볼륨에 맞는 지출 임계값을 요청할 수 있습니다.
+ [SMS 샌드박스](sns-sms-sandbox.md)에서 이동하여 제한 없이 SMS 메시지를 보낼 수 있습니다. 자세한 내용은 [Amazon SNS SMS 샌드박스 환경에서 나가기](sns-sms-sandbox-moving-to-production.md) 섹션을 참조하세요.
+ 전용 [발신 번호](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html)
+ 전용 [발신자 ID](https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id.html)입니다. 발신자 ID는 수신자 디바이스에 발신자로 표시되는 사용자 지정 ID입니다. 예를 들어, 기업 브랜드를 사용하여 메시지 소스를 더 인식하기 쉽게 만들 수 있습니다. 발신자 ID에 대한 지원은 국가 또는 리전별로 다릅니다. 자세한 내용을 알아보려면 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [Supported countries and regions for SMS messaging with AWS 최종 사용자 메시징 SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)를 참조하세요.

# 월별 Amazon SNS SMS 지출 할당량 증가 요청
<a name="channels-sms-awssupport-spend-threshold"></a>

Amazon SNS에서는 계정을 사용해 SMS를 전송하여 발생하는 최대 월별 비용을 관리하는 데 도움이 되는 지출 할당량을 제공합니다. 지출 할당량은 악의적인 공격 발생 시의 위험을 제한하고, 업스트림 애플리케이션이 예상보다 많은 메시지를 전송하지 못하도록 차단합니다. SMS 메시지를 보내면 이번 달 지출 할당량을 초과하는 비용이 발생할 것으로 판단되는 경우 SMS 메시지 게시를 중지하도록 Amazon SNS를 구성할 수 있습니다.

운영에 영향을 미치지 않도록 프로덕션 워크로드를 지원할 수 있을 만큼 지출 할당량을 높게 요청하는 것이 좋습니다. 자세한 내용은 [1단계: Amazon SNS SMS 사례 생성](#channels-sms-awssupport-spend-threshold-open)을 참조하세요. 할당량을 받으면 [2단계: SMS 설정 업데이트](#channels-sms-awssupport-spend-threshold-settings)에 설명된 대로 전체 할당량이나 그보다 작은 값을 적용하여 위험을 관리할 수 있습니다. 작은 값을 적용하면 필요에 따라 크기 조정 옵션을 사용하여 월별 지출을 제어할 수 있습니다.

**중요**  
Amazon SNS는 분산 시스템이므로 지출 할당량이 초과되는 경우 몇 분 이내에 SMS 메시지 전송을 중지합니다. 이 시간 동안 SMS 메시지를 계속 보내면 할당량을 초과하는 비용이 발생할 수 있습니다.

모든 새 계정의 지출 할당량은 매월 1.00 USD로 설정됩니다. 이것은 Amazon SNS의 메시지 전송 기능을 테스트할 수 있도록 마련된 할당량입니다. 계정의 SMS 지출 할당량 증가를 요청하려면 AWS 지원 센터에서 할당량 증가 사례를 엽니다.

**Topics**
+ [1단계: Amazon SNS SMS 사례 열기](#channels-sms-awssupport-spend-threshold-open)
+ [2단계: Amazon SNS 콘솔에서 SMS 설정 업데이트](#channels-sms-awssupport-spend-threshold-settings)

## 1단계: Amazon SNS SMS 사례 열기
<a name="channels-sms-awssupport-spend-threshold-open"></a>

 AWS 지원 센터에서 할당량 증가 사례를 열어 월별 지출 할당량 증가를 요청할 수 있습니다.

**참고**  
요청 양식의 일부 필드는 “선택 사항”으로 표시되어 있습니다. 그러나 지원 에서 요청을 처리하려면 아래의 단계에 언급된 정보가 전부 필요합니다. 필요한 정보를 모두 제공하지 않으면 요청 처리가 지연될 수 있습니다.

1. [https://console.aws.amazon.com/](https://console.aws.amazon.com/) AWS Management Console 에 로그인합니다.

1. **지원** 메뉴에서 **지원 센터**를 선택합니다.

1. **지원 사례** 창에서 **사례 생성**을 선택합니다.

1. **서비스 한도 증가를 원하시나요?** 링크를 선택한 후 다음 작업을 완료합니다.
   + **한도 유형**에서 **SNS 문자 메시지**를 선택합니다.
   + (선택 사항) **SMS 메시지를 보낼 사이트 또는 앱의 링크 제공**에 SMS 메시지를 보낼 웹 사이트, 애플리케이션 또는 서비스에 대한 정보를 입력합니다.
   + (선택 사항) **보낼 메시지의 유형**에서 긴 코드를 사용하여 보낼 메시지의 유형을 선택합니다.
     + **일회용 암호** - 고객이 웹 사이트 또는 애플리케이션에서 인증을 위해 사용해야 하는 암호가 담긴 메시지입니다.
     + **프로모션** - 비즈니스 또는 서비스(예: 특가 행사, 공지 사항)를 홍보하는 중요하지 않은 메시지입니다.
     + **트랜잭션** - 고객 트랜잭션을 지원하는 중요한 정보 메시지(예: 주문 확인, 계정 알림)입니다. 트랜잭션 메시지에 홍보 또는 마케팅 콘텐츠를 포함해서는 안 됩니다.
   + (선택 사항) **메시지를 보낼 AWS 리전**에서 메시지를 보낼 리전을 선택합니다.
   + (선택 사항) **메시지를 보낼 국가**에 단축 코드를 구입할 국가 또는 리전을 입력합니다.
   + (선택 사항) **고객이 메시지 수신에 옵트인하는 방법**에서 옵트인 프로세스에 대한 세부 정보를 제공합니다.
   + (선택 사항) **고객에게 메시지를 보내는 데 사용할 메시지 템플릿을 제공하세요** 필드에 사용할 메시지 템플릿을 포함시킵니다.

1. **요청**에서 다음 섹션을 작성합니다.
   + **리전**에서 메시지를 보낼 리전을 선택합니다.
**참고**  
**요청** 섹션에는 리전이 필요합니다. **사례 세부 정보** 섹션에 이 정보를 제공했더라도 여기에도 포함해야 합니다.
   + **리소스 유형**에서 **일반 한도**를 선택합니다.
   + **한도**에서 **Account Spend Threshold Increase(계정 지출 임계값 증가)**를 선택합니다.

1. 새 한도 값에 매월 SMS에 지출할 수 있는 최대 금액(USD)을 입력합니다.

1. **사례 설명**의 **사용 사례 설명**에 다음 세부 정보를 입력합니다.
   + SMS 메시지를 보내는 회사 또는 서비스의 웹 사이트 또는 앱
   + 웹 사이트 또는 앱에서 제공되는 서비스, 서비스에 대한 SMS 메시지의 기여 방법
   + 웹 사이트, 앱 또는 다른 위치에서 사용자가 SMS 메시지를 자발적으로 수신하기 위해 등록하는 방법

   요청된 지출 할당량(**새 할당량 값**에 대해 지정한 값)이 10,000 USD를 초과할 경우 메시지를 주고 받을 각 국가에 대해 다음과 같은 추가 세부 정보를 제공합니다.
   + 발신자 ID 또는 단축 코드를 사용할지 여부. 발신자 ID를 사용할 경우 다음을 제공합니다.
     + 발신자 ID
     + 발신자 ID를 해당 국가의 무선통신 사업자에 등록할지 여부
   + 메시징에 대한 최대 예상 TPS(초당 트랜잭션 수)
   + 평균 메시지 크기
   + 국가에 전송할 메시지의 템플릿
   + (선택 사항) 문자 인코딩 요구 사항(있는 경우)

1. (선택 사항) 추가 요청을 제출하려면 **다른 요청 추가**를 선택합니다. 여러 요청을 포함할 경우 각 요청에 대해 필요한 정보를 제공합니다. 필요한 정보는 [Amazon SNS SMS 메시징에 대한 지원 요청](channels-sms-awssupport.md)의 다른 섹션을 참조하세요.

1. **연락처 옵션**의 **선호하는 문의 언어**에서 이 사례에 대한 커뮤니케이션을 수신할 언어를 선택합니다.

1. 마쳤으면 **제출**을 선택합니다.

 지원 팀은 24시간 이내에 요청에 대한 초기 응답을 제공합니다.

시스템이 원치 않는 콘텐츠 또는 악성 콘텐츠를 전송하지 않도록 하기 위해 각 요청을 신중하게 고려합니다. 가능한 경우 이 24시간 기간 내에 요청이 승인될 것입니다. 그러나 사용자의 추가 정보가 필요한 경우 요청을 해결하는 데 시간이 오래 걸릴 수도 있습니다.

정책에 맞지 않는 사용 사례인 경우, 요청에 대한 권한을 부여하지 않을 수도 있습니다.

## 2단계: Amazon SNS 콘솔에서 SMS 설정 업데이트
<a name="channels-sms-awssupport-spend-threshold-settings"></a>

월별 지출 할당량이 증가되었다는 알림을 받으면 Amazon SNS 콘솔에서 해당 계정의 지출 할당량을 조정해야 합니다.

**중요**  
다음 단계를 완료해야 합니다. 그렇지 않으면 SMS 지출 한도가 증가되지 않습니다.

**콘솔에서 지출 할당량을 조정하려면**

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 왼쪽 탐색 메뉴를 열고, **모바일**을 확장한 다음, **텍스트 메시징(SMS)**을 선택합니다.

1. **모바일 문자 메시지(SMS)** 페이지의 **문자 메시지 기본 설정** 섹션에서 **편집**을 선택합니다.

1. **문자 메시지 기본 설정 편집** 페이지의 **세부 정보**에서 **계정 지출 한도**에 신규 SMS 지출 한도를 입력합니다.
**참고**  
입력한 값이 기본 지출 한도보다 크다는 경고가 나타날 수 있습니다. 이 텍스트는 무시할 수 있습니다.

1. **변경 사항 저장**을 선택합니다.
**참고**  
“잘못된 파라미터” 오류가 발생할 경우, AWS Support에서 연락처를 확인한 뒤 올바른 신규 SMS 지출 한도를 입력했는지 확인합니다. 여전히 문제가 발생하는 경우 AWS 지원 센터에서 사례를 엽니다.

지원 센터에서 사례를 생성할 때 제출하는 요청 유형에 필요한 모든 정보를 포함해야 합니다. 그렇지 않으면 지원에서 진행하기 전에 이 정보를 확인하기 위해 연락해야 합니다. 요청이 지체 없이 이행되도록 요청을 제출할 때 자세하게 작성해 주세요. 특정 SMS 요청 유형에 필요한 세부 정보는 다음 주제를 참조하세요.

 발신자 ID에 대한 자세한 내용은 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 다음 설명서를 참조하세요.


| AWS 최종 사용자 메시징 SMS 주제 | 설명 | 
| --- | --- | 
|  [지출 할당량 증가 요청](https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-spend-threshold.html)  |  지출 할당량에 따라 매달 AWS 최종 사용자 메시징 SMS을 통해 SMS 메시지를 보내는 데 사용할 수 있는 금액이 결정됩니다.  | 
|  [발신자 ID의 지원 센터에서 사례 열기](https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-sender-id.html)  |  발신자 ID가 필요한 국가에서 수신자에게 메시지를 보내려는 경우 지원 센터에서 새 사례를 생성하여 발신자 ID를 요청할 수 있습니다.  | 

# Amazon SNS SMS 메시징 모범 사례
<a name="channels-sms-best-practices"></a>

**중요**  
Amazon SNS SMS 개발자 안내서가 업데이트되었습니다. Amazon SNS는 SMS 메시지 전송을 위해 [AWS 최종 사용자 메시징 SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)와 통합되었습니다. 이 안내서에는 Amazon SNS SMS 메시지를 생성, 구성, 관리하는 방법에 대한 최신 정보가 포함되어 있습니다.

휴대폰 사용자는 원치 않는 SMS 메시지를 거의 허용하지 않습니다. 원치 않는 SMS 캠페인에 대한 응답 속도는 거의 언제나 느리므로 ROI(Return on Investment)가 낮습니다.

또한 무선통신 사업자가 대량 SMS 발신자를 지속적으로 감사하여, 원치 않는 메시지를 전송하는 것으로 확인된 번호에서 보내는 메시지를 제한하거나 차단합니다.

또한 원치 않는 콘텐츠를 전송하면 [AWS 이용 정책](https://aws.amazon.com/aup/#No_E-Mail_or_Other_Message_Abuse)을 위반하는 것입니다. Amazon SNS 팀은 SMS 캠페인을 정기적으로 감사하여 원치 않는 메시지를 전송하는 것처럼 보일 경우 메시지 전송 기능을 제한하거나 차단할 수 있습니다.

마지막으로 대부분의 국가, 리전 및 관할권에서는 원치 않는 SMS 메시지를 보낼 경우 심각한 위약금을 부과합니다. 예를 들어, 미국의 전화 소비자 보호법(TCPA)에 따르면 소비자는 원치 않는 메시지를 수신할 때마다 \$1500–\$11,500의 손해 배상금(발신자가 지불)을 받을 수 있습니다.

이 섹션에서는 고객 참여를 개선하고 높은 위약금을 방지하는 데 도움이 되는 다양한 모범 사례에 대해 설명합니다. 그러나 이 섹션에서는 법률적인 조언은 다루지 않습니다. 항상 변호사에게 문의하여 법률 자문을 받으세요.

## 법률, 규정 및 통신 사업자 요구 사항 준수
<a name="channels-sms-best-practices-understand-laws"></a>

고객이 거주하는 지역의 법률 및 규정을 위반하면 상당한 벌금 및 위약금이 부과될 수 있습니다. 따라서 사업을 영위하는 각 국가 및 리전의 SMS 메시징 관련 법률을 파악하고 있어야 합니다.

다음 목록에는 전 세계 주요 시장에서 SMS 통신에 적용되는 주요 법률에 대한 링크가 나와 있습니다.
+ **미국**: 1991년에 제정된 전화 소비자보호법(TCPA라고도 함)은 특정 유형의 SMS 메시지에 적용됩니다. 자세한 정보는 미연방 통신 위원회 웹 사이트의 [rules and regulations](https://www.fcc.gov/document/telephone-consumer-protection-act-1991)를 참조하세요.
+ **영국**: PECR이라고도 하는 Privacy and Electronic Communications(EC Directive) Regulations 2003이 특정 유형의 SMS 메시지에 적용됩니다. 자세한 정보는 영국 정보감독원(Information Commissioner's Office) 웹 사이트에 게시된 [What are PECR?](https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/guide-to-pecr/what-are-pecr/)을 참조하세요.
+ **유럽 연합**: ePrivacy Directive라고도 하는 Privacy and Electronic Communications Directive 2002가 일부 유형의 SMS 메시지에 적용됩니다. 자세한 정보는 Europa.eu 웹 사이트에 게시된 [법률 전문](http://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32002L0058)을 참조하세요.
+ **캐나다**: 주로 캐나다 스팸 방지법 또는 CASL이라고 하는 Fighting Internet and Wireless Spam Act(인터넷 및 무선통신스팸규제법)가 특정 유형의 SMS 메시지에 적용됩니다. 자세한 정보는 캐나다 의회 웹 사이트에 게시된 [법률 전문](http://www.parl.ca/DocumentViewer/en/40-3/bill/C-28/first-reading)을 참조하세요.
+ **일본**: Act on Regulation of Transmission of Specific Electronic Mail이 특정 유형의 SMS 메시지에 적용됩니다. 자세한 내용은 일본 총무성 웹 사이트에 게시된 [스팸에 대한 일본의 대응](https://www.japaneselawtranslation.go.jp/en/laws/view/3767/en)을 참조하세요.

발신자로서 회사 또는 조직이 이러한 국가 중 하나에 기반을 두지 않는 경우에도 이러한 법률이 적용될 수 있습니다. 이 목록에 나열된 일부 법률은 원래 원치 않는 이메일 또는 전화 통화 문제를 해결하기 위해 발의되었으나 SMS 메시지에도 적용되도록 해석 또는 확장되었습니다. 그 외 국가 및 리전에도 SMS 메시지 전송과 관련된 법률이 있을 수 있습니다. 법률적인 자문을 얻으려면 고객이 거주하는 각 국가 또는 리전의 변호사에게 문의하세요.

많은 국가에서는 현지 통신사가 궁극적으로 네트워크를 통해 어떤 종류의 트래픽이 흐르는지 결정할 권한을 가지고 있습니다. 이는 통신사가 현지 법률의 최소 요구 사항을 초과하는 SMS 콘텐츠에 제한을 적용할 수 있음을 의미합니다.

## 권한 획득
<a name="channels-sms-best-practices-obtain-permission"></a>

보내려는 특정 유형의 메시지를 받도록 명시적으로 요청하지 않은 수신자에게는 메시지를 보내지 마세요. 같은 회사 내의 조직 간에도 옵트인 목록을 공유하지 마세요.

수신자가 온라인 양식을 사용하여 메시지 수신을 등록할 수 있는 경우 자동 스크립트를 통해 자신도 모르게 사람들을 구독하지 않게 하는 시스템을 추가하세요. 또한 사용자가 단일 세션에서 전화번호를 제출할 수 있는 횟수를 제한해야 합니다.

SMS 옵트인 요청을 수신한 경우 메시지 수신을 확인하도록 요청하는 메시지를 수신자에게 전송합니다. 수신자가 구독을 확인할 때까지 해당 고객에게 추가 메시지를 보내지 마세요. 구독 확인 메시지는 다음 예와 비슷합니다.

`Text YES to join ExampleCorp alerts. 2 msgs/month. Msg & data rates may apply. Reply HELP for help, STOP to cancel.`

각 옵트인 요청 및 확인에 대한 날짜, 시간 및 원본을 포함하는 기록을 유지합니다. 그러면 통신업자 또는 규제 기관에서 해당 기록을 요청할 때와 고객 목록에 대한 정기 감사를 수행할 때 유용할 수 있습니다.

### 옵트인 워크플로
<a name="channels-sms-best-practices-obtain-permission-optin"></a>

일부 경우(예: 미국 수신자 부담 또는 단축 코드 등록) 이동 통신사에서는 전체 옵트인 워크플로의 목업 또는 스크린샷 제공을 요구합니다. 목업 또는 스크린샷은 수신자가 완료하는 옵트인 워크플로와 매우 유사해야 합니다.

목업 또는 스크린샷에는 최고 수준의 규정 준수를 유지하기 위해 아래 나열된 모든 필수 공개 사항이 포함되어야 합니다.

**필수 공개 사항**
+ 프로그램을 통해 보낼 메시징 사용 사례에 대한 설명
+ "메시지 및 데이터 요금이 부과될 수 있습니다."라는 문구
+ 수신자가 메시지를 받는 빈도 표시 예를 들어, 되풀이되는 메시징 프로그램은 '주당 메시지 1건'이라고 말할 수 있습니다. 일회성 암호 또는 다중 인증 사용 사례는 '다양한 메시지 빈도' 또는 '로그인 시도당 메시지 1건'이라고 말할 수 있습니다.
+ 이용 약관 및 개인정보 처리방침 문서로 연결되는 링크 

**규정을 준수하지 않는 옵트인에 대한 일반적인 거부 이유**
+ 입력된 회사 이름이 목업이나 스크린샷에 표시된 이름과 일치하지 않는 경우. 명확하지 않은 관계는 옵트인 워크플로 설명에 설명해야 합니다.
+ 메시지가 수신자에게 전송될 것으로 보이지만 그렇게 하기 전에 명시적으로 동의가 수집되지 않은 경우. 모든 메시징에는 명시적 동의가 필요합니다.
+ 서비스에 가입하기 위해 문자 메시지 수신이 필요한 것으로 보이는 경우. 워크플로에서 옵트인 메시지를 받는 대신 사용할 수 있는 대안(예: 이메일이나 음성 통화 형식)을 제공하지 않는 경우에는 규정을 준수하지 않는 것입니다.
+ 전체 옵트인 문구가 서비스 약관에만 표시되어 있는 경우. 공개 사항은 링크된 정책 문서 내에 포함하는 대신 항상 옵트인 시점에 수신자에게 제출해야 합니다.
+ 고객이 귀하로부터 한 가지 유형의 메시지를 수신하는 데 동의하고 귀하가 다른 유형의 문자 메시지를 보내는 경우. 예를 들어 고객이 일회성 암호 수신에 동의했지만 투표 및 설문조사 메시지도 받았습니다.
+ 필수 공개 사항(위에 나열됨)이 수신자에게 제공되지 않는 경우.

다음은 다중 인증 사용 사례에 대한 이동통신사의 요구 사항을 준수하는 예입니다.

![\[ExampleCorp를 사용하는 사용자 계정에서 다중 인증(MFA)을 활성화하기 위한 옵트인 워크플로의 단계별 모형입니다. 이 프로세스는 사용자가 이름 및 이메일과 같은 기본 계정 정보를 제공하는 것으로 시작됩니다. 다음으로 사용자는 보안을 강화하기 위해 MFA를 활성화할지 여부를 결정합니다. MFA가 활성화된 경우 사용자는 문자 메시지 또는 전화 통화와 같은 옵션을 사용하여 MFA 토큰을 받을 방법을 선택합니다. 사용자가 문자 메시지를 선택하면 확인 코드가 포함된 SMS를 받게 됩니다. 마지막 단계에서는 사용자가 수신된 코드를 입력하여 전화번호를 확인하고 옵트인 프로세스를 완료해야 합니다. 이 모형은 SMS 규정 준수를 위해 필요한 모든 공개가 제공되도록 합니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/best-practices-usecase.png)


여기에는 최종 텍스트와 이미지가 포함되며 전체 옵트인 흐름과 주석이 함께 표시됩니다. 옵트인 흐름에서 고객은 문자 메시지 수신에 동의하고 필요한 모든 공개 내용을 포함하기 위해 명확하고 의도적인 조치를 취해야 합니다.

### 기타 옵트인 워크플로 유형
<a name="channels-sms-best-practices-obtain-permission-other"></a>

이동통신사는 위에 설명된 내용을 준수하는 경우 애플리케이션 및 웹사이트 외부의 옵트인 워크플로(예: 구두 또는 서면 옵트인)도 수락합니다. 규정을 준수하는 옵트인 워크플로와 구두 또는 서면 스크립트는 특정 메시지 유형을 수신하기 위해 수신자로부터 명시적인 동의를 수집합니다. 이러한 예로는 지원 에이전트가 서비스 데이터베이스에 기록하기 전에 동의를 수집하기 위해 사용하는 구두 스크립트나 판촉 전단지에 기재된 전화번호가 있습니다. 이러한 옵트인 워크플로 유형의 목업을 제공하려면 옵트인 스크립트, 마케팅 자료 또는 전화번호가 수집되는 데이터베이스의 스크린샷을 제공하면 됩니다. 옵트인이 명확하지 않거나 사용 사례가 특정 용량을 초과하는 경우 이동통신사에서 이러한 사용 사례에 대해 추가 질문을 할 수 있습니다.

## 이전 목록으로 보내지 않을 것
<a name="channels-sms-best-practices-old-lists"></a>

사람들은 전화번호를 자주 바꿉니다. 2년 전에 연락 동의를 수집한 전화번호는 현재 다른 사람의 번호일 수 있습니다. 새 메시징 프로그램에 이전 전화번호 목록을 사용하지 마세요. 이전 목록을 사용하면 해당 번호가 더 이상 사용되지 않아 일부 메시지가 전달되지 않을 수 있으며, 일부 수신자는 애초에 동의한 내용을 기억하지 못해 옵트아웃할 수도 있습니다.

## 고객 목록 감사
<a name="channels-sms-best-practices-audit-lists"></a>

반복 SMS 캠페인을 전송할 경우 고객 목록을 정기적으로 감사하세요. 고객 목록 감사에서는 메시지를 수신하는 데 관심이 있는 고객에게만 메시지가 발송되는지 확인합니다.

목록을 감사할 때 각 수신 동의 고객에게 구독 사실을 알리고 구독 해지 관련 정보를 제공하는 메시지를 전송합니다. 알림 메시지는 다음 예와 비슷합니다.

`You're subscribed to ExampleCorp alerts. Msg & data rates may apply. Reply HELP for help, STOP to unsubscribe.`

## 기록 보관
<a name="channels-sms-best-practices-keep-records"></a>

각 고객이 SMS 메시지 수신을 요청한 시점과 각 고객에게 전송한 메시지가 무엇인지 알 수 있는 기록을 보관합니다. 전 세계 많은 국가 및 리전에서는 SMS 발신자에게 이러한 기록을 쉽게 검색할 수 있는 방식으로 유지 관리할 것을 요구합니다. 무선통신 사업자 역시 언제든지 이러한 정보를 요청할 수 있습니다. 이때 제공해야 하는 정확한 정보는 국가 또는 리전별로 다릅니다. 기록 보관 요건에 관한 자세한 정보는 고객이 위치한 각 국가 또는 리전의 상업용 SMS 메시징 관련 규정을 검토하세요.

이동통신사 또는 규제 기관에서 고객이 귀하의 메시지 수신을 선택했다는 증빙 자료를 요청하는 경우도 있습니다. 이러한 상황에서는 통신 사업자 또는 기관에 필요한 정보 목록을 통해 사용자에게 지원 연락합니다. 필요한 정보를 제공할 수 없는 경우 추가적으로 SMS 메시지 전송 기능이 일시 중지될 수 있습니다.

## 메시지 내용은 명확, 정직, 간결하게 작성
<a name="channels-sms-best-practices-appropriate-content"></a>

SMS는 독특한 매체입니다. 메시지당 160자 제한은 메시지 내용이 간결해야 함을 의미합니다. 이메일과 같은 다른 커뮤니케이션 채널에서 사용할 수 있는 기술은 SMS 채널에 적용되지 않을 수 있으며 SMS 메시지와 함께 사용하면 부정직하거나 기만적이 내용처럼 보일 수도 있습니다. 메시지 내용이 모범 사례와 일치하지 않는 경우 수신자는 메시지를 무시할 수 있습니다. 최악의 경우 이동통신사에서 메시지를 스팸으로 식별하고 향후 귀하의 전화번호에서 보내는 메시지를 차단할 수 있습니다.

이 섹션에서는 효과적인 SMS 메시지 본문을 만들기 위한 몇 가지 팁과 아이디어를 제공합니다.

### 발신자 신원 식별
<a name="channels-sms-best-practices-appropriate-content-identify"></a>

수신자는 귀하가 보낸 메시지임을 즉시 알 수 있어야 합니다. 이 모범 사례를 따르는 발신자는 각 메시지 시작 부분에 식별 이름('프로그램 이름')을 포함합니다.

**금지 사항:**  
`Your account has been accessed from a new device. Reply Y to confirm.`

**권장 사항:**  
`ExampleCorp Financial Alerts: You have logged in to your account from a new device. Reply Y to confirm, or STOP to opt-out.`

### 메시지를 개인 간 메시지처럼 보이게 하지 말 것
<a name="channels-sms-best-practices-appropriate-content-p2p"></a>

일부 마케터는 메시지가 개인이 보낸 것처럼 보이게 하여 SMS 메시지에 개인적인 느낌을 더하고 싶어 합니다. 하지만 이 기법을 사용하면 메시지가 피싱 시도처럼 보일 수 있습니다.

**금지 사항:**  
`Hi, this is Jane. Did you know that you can save up to 50% at Example.com? Click here for more info: https://www.example.com.`

**권장 사항:**  
`ExampleCorp Offers: Save 25-50% on sale items at Example.com. Click here to browse the sale: https://www.example.com. Text STOP to opt-out.`

### 금전적인 내용은 조심스럽게 다룰 것
<a name="channels-sms-best-practices-appropriate-content-money"></a>

사기꾼은 돈을 모으려는 사람들의 욕구를 이용합니다. 제안 내용이 믿을 수 없을 정도로 너무 좋게 보이게 하지 마세요. 돈을 미끼로 사람들을 현혹하지 마세요. 통화 기호를 사용하여 돈을 표시하지 마세요.

**금지 사항:**  
`Save big $$$ on your next car repair by going to https://www.example.com.`

**권장 사항:**  
`ExampleCorp Offers: Your ExampleCorp insurance policy gets you discounts at 2300+ repair shops nationwide. More info at https://www.example.com. Text STOP to opt-out.`

### 필요한 문자만 작성
<a name="channels-sms-best-practices-appropriate-content-characters"></a>

브랜드는 메시지에 ™ 또는 ®와 같은 상표 기호를 포함하여 상표를 보호하려는 경향이 있습니다. 그러나 이러한 기호는 160자 SMS 메시지에 포함될 수 있는 표준 문자 집합(GSM 알파벳이라고 함)의 일부가 아닙니다. 이러한 문자 중 하나가 포함된 메시지를 보내면 자동으로 메시지 본문당 70자만 지원하는 다른 문자 인코딩 시스템을 사용하여 메시지가 전송됩니다. 따라서 메시지가 여러 부분으로 나뉘어 질 수 있습니다. 보내는 부분 메시지 각각에 요금이 청구되므로 메시지 전체를 보내는 데 소요되는 비용이 예상보다 많을 수 있습니다. 또한 수신자는 메시지 1건이 아닌 여러 개의 메시지를 순차적으로 받을 수 있습니다. SMS 문자 인코딩에 관한 자세한 내용은 [Amazon SNS의 SMS 문자 수 한도](#channels-sms-limitations-characters) 섹션을 참조하세요.

**금지 사항:**  
`ExampleCorp Alerts: Save 20% when you buy a new ExampleCorp Widget® at example.com and use the promo code WIDGET.`

**권장 사항:**  
`ExampleCorp Alerts: Save 20% when you buy a new ExampleCorp Widget(R) at example.com and use the promo code WIDGET.`

**참고**  
앞의 두 가지 예는 거의 동일하지만 첫 번째 예에는 GSM 알파벳의 일부가 아닌 등록 상표 기호(®)가 포함되어 있습니다. 따라서 첫 번째 예는 두 건의 부분 메시지로 전송되고 두 번째 예는 하나의 메시지로 전송됩니다.

### 유효하고 안전한 링크 사용
<a name="channels-sms-best-practices-appropriate-content-links"></a>

메시지에 링크를 포함하는 경우 링크를 두 번 확인하여 링크가 작동하는지 확인합니다. 회사 네트워크 외부의 디바이스에서 링크를 테스트하여 링크가 제대로 연결되는지 확인합니다. SMS 메시지는 160자로 제한되어 있기 때문에 매우 긴 URL을 여러 메시지로 분할할 수 있습니다. 리디렉션 도메인을 사용하여 단축된 URL을 사용할 수 있습니다. 그러나 tinyurl.com 또는 bitly.com과 같은 무료 링크 단축 서비스를 사용하면 안 됩니다. 이동통신사는 이러한 도메인의 링크를 포함하는 메시지를 필터링하는 경향이 있기 때문입니다. 하지만 링크가 회사 또는 조직의 독점 사용 전용 도메인을 가리키는 경우에 한해 유료 링크 단축 서비스를 사용할 수 있습니다.

**금지 사항:**  
`Go to https://tinyurl.com/4585y8mr today for a special offer!`

**권장 사항:**  
`ExampleCorp Offers: Today only, get an exclusive deal on an ExampleCorp Widget. See https://a.co/cFKmaRG for more info. Text STOP to opt-out.`

### 사용하는 약어 수 제한
<a name="channels-sms-best-practices-appropriate-content-abbrev"></a>

SMS 채널의 160자 제한으로 인해 일부 발신자는 메시지에 약어를 광범위하게 사용해야 한다고 생각합니다. 그러나 약어를 과도하게 사용하면 많은 독자에게 전문성이 없는 것처럼 보일 수 있으며 일부 사용자가 메시지를 스팸으로 신고할 수 있습니다. 과도한 수의 약어를 사용하지 않고도 메시지를 조리 있게 작성할 수 있습니다.

**금지 사항:**  
`Get a gr8 deal on ExampleCorp widgets when u buy a 4-pack 2day.`

**권장 사항:**  
`ExampleCorp Alerts: Today only—an exclusive deal on ExampleCorp Widgets at example.com. Text STOP to opt-out.`

## 적절한 응답
<a name="channels-sms-best-practices-respond-appropriately"></a>

수신자가 메시지에 응답할 때 유용한 정보로 응답하는지 확인합니다. 예를 들어, 고객이 메시지 중 하나에 "HELP" 키워드로 응답할 경우 구독된 프로그램, 매월 전송할 메시지 수, 추가 정보를 문의할 수 있는 방법 등에 대한 정보를 해당 고객에게 전송합니다. HELP 응답은 다음 예와 비슷할 수 있습니다.

`HELP: ExampleCorp alerts: email help@example.com or call 425-555-0199. 2 msgs/month. Msg & data rates may apply. Reply STOP to cancel.`

고객이 "STOP" 키워드로 회신할 경우, 더 이상 메시지가 수신되지 않는다고 알려줍니다. STOP 응답은 다음 예와 비슷할 수 있습니다.

`You're unsubscribed from ExampleCorp alerts. No more messages will be sent. Reply HELP, email help@example.com, or call 425-555-0199 for more info.`

## 참여를 기반으로 전송 조정
<a name="channels-sms-best-practices-adjust-engagement"></a>

시간이 경과함에 따라 고객의 우선 순위가 변경될 수 있습니다. 고객이 메시지가 더 이상 유용하지 않다고 판단할 경우, 메시지를 완전히 수신 거부하거나 원치 않는 메시지로 보고할 수 있습니다. 따라서 고객의 참여에 따라 전송 방법을 조정하는 것이 중요합니다.

메시지에 거의 반응하지 않는 고객에 대해서는 메시지 빈도를 조정해야 합니다. 예를 들어, 참여하는 고객에게 주간 메시지를 발송하는 경우, 참여도가 낮은 고객을 위해 월간 다이제스트를 별도로 만들 수 있습니다.

마지막으로 전혀 참여하지 않는 고객을 고객 목록에서 제거합니다. 이 단계는 고객이 메시지에 대해 불만을 갖는 것을 방지할 수 있습니다. 또한 비용을 절감하고 발신자로서 평판을 보호할 수 있습니다.

## 적절한 시간에 전송
<a name="channels-sms-best-practices-appropriate-times"></a>

정상 업무 시간에만 메시지를 전송합니다. 저녁 시간이나 밤중에 메시지를 전송할 경우 고객이 방해를 받지 않기 위해 목록을 구독 해제할 수 있습니다. 또한 고객이 즉시 응답할 수 없는 시간에 SMS 메시지를 전송하는 것은 좋지 않습니다.

대규모 대상에게 캠페인이나 여정을 보내는 경우 발신자 번호의 처리량을 다시 확인합니다. 수신자 수를 처리량으로 나누어 모든 수신자에게 메시지를 보내는 데 걸리는 시간을 확인합니다.

## 크로스 채널 피로 방지
<a name="channels-sms-best-practices-cross-channel-fatigue"></a>

캠페인에서 여러 통신 채널(예: 이메일, SMS, 푸시 메시지)을 사용할 경우 동일한 메시지를 모든 채널에서 보내지 마세요. 동일한 메시지를 여러 채널에서 동시에 보낼 경우, 고객이 메시지가 도움이 된다고 생각하지 않고 귀찮게 느낄 수 있습니다.

## 전용 단축 코드 사용
<a name="channels-sms-best-practices-dedicated-short-codes"></a>

단축 코드를 사용할 경우, 브랜드와 메시지 유형별로 별도의 단축 코드를 유지합니다. 예를 들어, 회사에 두 개의 브랜드가 있다면 브랜드별로 별도의 단축 코드를 사용합니다. 마찬가지로 트랜잭션 메시지와 프로모션 메시지를 모두 전송할 경우 각 메시지 유형에 대해 별도의 단축 코드를 사용합니다. 단축 코드 요청에 대한 자세한 내용은 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [AWS 최종 사용자 메시징 SMS를 사용하여 SMS 메시징을 위한 단축 코드 요청을 참조하세요](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request-short-code.html).

## 대상 전화번호 확인
<a name="channels-sms-best-practices-verify-destination-numbers"></a>

Amazon SNS를 통해 SMS 메시지를 보낼 때 보내는 각 메시지 부분에 대해 요금이 청구됩니다. 메시지 부분당 지불하는 요금은 수신자의 국가 또는 지역에 따라 다릅니다. SMS 요금에 대한 자세한 내용은 [AWS 전 세계 SMS 요금을 참조하세요](https://aws.amazon.com/sns/sms-pricing).

Amazon SNS가 SMS 메시지 전송 요청을 수락하면([SendMessages](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#SendMessages) API 호출의 결과 또는 캠페인 또는 여정이 시작된 결과) 해당 메시지 전송에 대한 요금이 부과됩니다. 이 사항은 의도된 수신자가 실제로 메시지를 수신하지 않더라도 적용됩니다. 예를 들어 수신자의 전화번호가 더 이상 사용되지 않거나 메시지를 보낸 번호가 유효한 휴대전화 번호가 아닌 경우에도 메시지 전송 요금이 청구됩니다.

Amazon SNS는 SMS 메시지 전송에 대한 유효한 요청을 수락하고 전송을 시도합니다. 따라서 메시지를 보내는 대상 전화번호가 유효한 휴대폰 번호인지 확인해야 합니다. AWS 최종 사용자 메시징 SMS 를 사용하여 테스트 메시지를 전송하여 전화번호가 유효한지 여부와 전화번호 유형(예: 모바일, 유선 또는 VoIP)을 확인할 수 있습니다. 자세한 내용은 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [SMS 시뮬레이터로 테스트 메시지 전송](https://docs.aws.amazon.com/sms-voice/latest/userguide/getting-started-tutorial.html#getting-started-tutorial-step3)을 참조하세요.

## 중복성을 염두에 두고 설계하기
<a name="channels-sms-best-practices-redundancy"></a>

미션 크리티컬 메시징 프로그램의 경우 둘 이상의 AWS 리전에서 Amazon SNS를 구성하는 것이 좋습니다 Amazon SNS는 여러에서 사용할 수 있습니다 AWS 리전. Amazon SNS를 사용할 수 있는 리전의 전체 목록은 [AWS 일반 참조](https://docs.aws.amazon.com/general/latest/gr/sns.html) 섹션을 참조하세요.

SMS 메시지에 사용하는 전화번호(짧은 코드, 긴 코드, 무료 전화번호, 10DLC 번호 포함)는 AWS 리전간에 복제할 수 없습니다. 따라서 여러 리전에서 Amazon SNS를 사용하려면 Amazon SNS를 사용하려는 각 리전에서 별도의 전화번호를 요청해야 합니다. 예를 들어 단축 코드를 사용하여 미국의 수신자에게 문자 메시지를 보내는 경우 사용 AWS 리전 하려는 각에서 별도의 단축 코드를 요청해야 합니다.

일부 국가에서는 중복성을 추가하기 위해 여러 유형의 전화번호를 사용하기도 합니다. 예를 들어 미국에서는 단축번호, 10DLC 번호, 수신자 부담 번호를 요청할 수 있습니다. 각 전화번호 유형은 서로 다른 경로를 통해 수신자에게 전달됩니다. 동일한 AWS 리전 에서 또는 여러에 분산된 여러 전화 번호 유형을 사용할 수 있으면 추가 중복 계층이 AWS 리전제공되므로 복원력을 개선하는 데 도움이 될 수 있습니다.

## SMS 제한 및 제약 조건
<a name="channels-sms-best-practices-limits"></a>

SMS 제한 및 제약 조건에 대해서는 *AWS 최종 사용자 메시징 SMS 사용 설명서*에서 [SMS 및 MMS 제한 및 제약 조건](https://docs.aws.amazon.com/sms-voice/latest/userguide/sms-limitations.html)을 참조하세요.

## 옵트아웃 키워드 관리
<a name="channels-sms-best-practices-optout-keywords"></a>

SMS 수신자는 디바이스에서 키워드로 회신하여 메시지를 옵트아웃할 수 있습니다. 자세한 내용은 [SMS 메시지 수신 옵트아웃](sms_manage.md#sms_manage_optout) 섹션을 참조하세요.

## CreatePool
<a name="channels-sms-best-practices-createpool"></a>

새 풀을 생성하고 지정된 발신 ID를 풀에 연결하려면 `CreatePool` API 작업을 사용합니다. 자세한 내용은 *AWS 최종 사용자 메시징 SMS API 참조*의 [CreatePool](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_CreatePool.html) 섹션을 참조하세요.

## PutKeyword
<a name="channels-sms-best-practices-putkeyword"></a>

발신 전화번호 또는 풀에 대한 키워드 구성을 생성하거나 업데이트하려면 `PutKeyword` API 작업을 사용합니다. 자세한 내용은 *AWS 최종 사용자 메시징 SMS API 참조*의 [PutKeyword](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_PutKeyword.html) 섹션을 참조하세요.

## 번호 설정 관리
<a name="channels-sms-best-practices-number-settings"></a>

 AWS Support에서 요청하고 계정에 할당한 전용 단축 코드 및 긴 코드에 대한 설정을 관리하려면 [의를 사용하여 전화번호 기능 변경을 AWS CLI](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-change-capabilitiy.html) 참조하세요*AWS 최종 사용자 메시징 SMS*.

## Amazon SNS의 SMS 문자 수 한도
<a name="channels-sms-limitations-characters"></a>

SMS 메시지 하나에는 최대 140바이트의 정보를 담을 수 있습니다. SMS 메시지 하나에 포함할 수 있는 문자의 개수는 메시지에 포함된 문자의 유형에 따라 달라집니다.

메시지에서 GSM 7비트 알파벳이라고도 하는 [GSM 03.38 문자 세트에 속한 문자](#channels-sms-limitations-characters-gsm-alphabet)만 사용하는 경우 문자를 최대 160개까지 포함할 수 있습니다. 메시지에 GSM 03.38 문자 집합 이외의 문자가 포함되는 경우에는 문자를 최대 70자까지 포함할 수 있습니다. SMS 메시지를 전송할 때 Amazon SNS에서는 사용하기에 가장 효율적인 인코딩을 자동으로 결정합니다.

메시지에 최대 문자 수보다 많은 문자가 포함된 경우 메시지가 여러 부분으로 분할됩니다. 메시지가 여러 부분으로 분할되면 각 부분에는 앞에 오는 메시지 부분에 대한 추가 정보가 포함됩니다. 수신자의 디바이스가 이러한 방식으로 분리된 메시지 부분을 수신하면 이 추가 정보를 사용하여 모든 메시지 부분이 올바른 순서로 표시되도록 합니다. 수신자의 이동 통신사 및 디바이스에 따라 여러 메시지가 단일 메시지 또는 별도의 메시지 시퀀스로 표시될 수 있습니다. 따라서 각 메시지 부분의 문자 수는 153자(GSM 03.38 문자만 포함하는 메시지의 경우) 또는 67자(기타 문자를 포함하는 메시지의 경우)로 줄어듭니다. SMS 길이 계산기 도구를 사용하여 메시지를 보내기 전에 메시지에 포함된 메시지 부분의 수를 예측할 수 있습니다. 그 중 일부는 온라인에서 사용할 수 있습니다. 모든 메시지의 지원되는 최대 크기는 GSM 문자 1,600자 또는 그 외의 문자 630자입니다. 처리량 및 메시지 크기에 대한 자세한 내용은 **Amazon Pinpoint 사용 설명서에서 [SMS character limits in Amazon Pinpoint](https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-sms-limitations-mps.html)(Amazon Pinpoint의 SMS 문자 수 한도)를 참조하세요.

보내는 각 메시지의 메시지 부분 수를 보려면 먼저 [Event stream settings](https://docs.aws.amazon.com/pinpoint/latest/userguide/settings-event-streams.html)(이벤트 스트림 설정)를 활성화해야 합니다. 이렇게 하면 Amazon SNS에서는 메시지가 수신자의 모바일 공급자에게 전달될 때 `_SMS.SUCCESS` 이벤트를 생성합니다. `_SMS.SUCCESS` 이벤트 레코드에는 `attributes.number_of_message_parts`라는 속성이 포함되어 있습니다. 이 속성은 메시지에 포함된 메시지 부분의 수를 지정합니다.

**중요**  
메시지 부분이 두 개 이상 포함된 메시지를 보낼 경우 메시지에 포함된 메시지 부분 수에 대한 요금이 청구됩니다.

### GSM 03.38 문자 세트
<a name="channels-sms-limitations-characters-gsm-alphabet"></a>

다음 표에는 GSM 03.38 문자 세트에 속한 모든 문자가 나열되어 있습니다. 다음 표에 있는 문자만 포함하는 메시지를 전송하는 경우에는 메시지에 문자를 최대 160개까지 포함할 수 있습니다.


| GSM 03.38 문자 세트 | 
| --- | 
| A | B | C | D | E | F | G | H | I | J | K | L | M | 
| N | O | P | Q | R | S | T | U | V | W | X | Y | Z | 
| a | b | c | d | e | f | g | h | i | j | k | l | m | 
| n | o | p | q | r | s | t | u | v | w | x | y | z | 
| à | Å | å | Ä | ä | Ç | É | é | è | ì | Ñ | ñ | ò | 
| Ø | ø | Ö | ö | ù | Ü | ü | Æ | æ | ß | 0 | 1 | 2 | 
| 3 | 4 | 5 | 6 | 7 | 8 | 9 | & | \$1 | @ | : | , | ¤ | 
| \$1 | = | \$1 | > | \$1 | - | ¡ | ¿ | ( | < | % | . | \$1 | 
| £ | ? | " | ) | § | ; | ' | / | \$1 | ¥ | Δ | Φ | Γ | 
| Λ | Ω | Π | Ψ | Σ | Θ | Ξ |  |  |  |  |  |  | 

GSM 03.38 문자 세트에는 앞서 보여드린 표에 있는 문자 외에 몇 가지 기호가 포함되어 있습니다. 그러나 각 기호는 다음과 같이 보이지 않는 이스케이프 문자도 포함되어 있기 때문에 문자 두 개로 계수됩니다.
+ ^
+ \$1
+ \$1
+ \$1
+ [
+ ]
+ \$1
+ \$1
+ €

끝으로 GSM 03.38 문자 세트에는 다음과 같은 비인쇄 문자도 포함되어 있습니다.
+ 공백 문자
+ 텍스트 한 줄의 끝과 다른 줄의 시작을 표시하는 줄 바꿈 제어 문자
+ 텍스트 한 줄의 첫머리로 이동하는 캐리지 리턴 제어 문자(일반적으로 줄 바꿈 문자 뒤에 옴)
+ 위 목록의 문자에 자동으로 추가되는 이스케이프 제어 문자

### 예제 메시지
<a name="channels-sms-limitations-characters-example-messages"></a>

이 섹션에는 몇 가지 예제 SMS 메시지가 포함되어 있습니다. 각 예에 대해 이 섹션에는 메시지의 메시지 부분 수와 총 문자 수가 표시됩니다.

**예제 1: GSM 03.38 알파벳의 문자만 포함하는 긴 메시지**  
다음 메시지에는 GSM 03.38 알파벳에 있는 문자만 포함되어 있습니다.

`Hello Carlos. Your Example Corp. bill of $100 is now available. Autopay is scheduled for next Thursday, April 9. To view the details of your bill, go to https://example.com/bill1.`

앞의 메시지에는 180자가 포함되어 있으므로 여러 메시지 부분으로 분할되어야 합니다. 메시지가 여러 메시지 부분으로 분할되면 각 부분은 153 GSM 03.38 문자를 포함할 수 있습니다. 그 결과, 이 메시지는 두 개의 메시지 부분으로 전송됩니다.

**예제 2: 멀티바이트 문자가 포함된 메시지**  
다음 메시지에는 여러 중국어 문자가 포함되어 있으며 모두 GSM 03.38 알파벳 이외의 문자입니다.

`亚马逊公司是一家总部位于美国西雅图的跨国电子商务企业，业务起始于线上书店，不久之后商品走向多元化。杰夫·贝佐斯于1994年7月创建了这家公司。`

앞의 메시지에는 71자가 포함되어 있습니다. 그러나 메시지의 거의 모든 문자가 GSM 03.38 알파벳 이외의 문자이기 때문에 두 개의 메시지 부분으로 전송됩니다. 이러한 각 메시지 부분은 최대 67자를 포함할 수 있습니다.

**예제 3: 단일 비GSM 문자가 포함된 메시지**  
다음 메시지에는 GSM 03.38 알파벳의 일부가 아닌 단일 문자가 포함되어 있습니다. 이 예에서 문자는 일반 아포스트로피(')와 다른 문자인 닫는 작은따옴표(’)입니다. Microsoft Word와 같은 워드 프로세싱 애플리케이션에서는 주로 아포스트로피가 닫는 작은따옴표로 자동으로 바뀝니다. Microsoft Word에서 SMS 메시지 초안을 작성하여 Amazon SNS에 붙여넣는 경우, 이러한 특수 문자를 제거하고 아포스트로피로 바꿔야 합니다.

`John: Your appointment with Dr. Salazar’s office is scheduled for next Thursday at 4:30pm. Reply YES to confirm, NO to reschedule.`

앞의 메시지에는 130자가 포함되어 있습니다. 그러나 이 메시지에는 GSM 03.38 알파벳의 일부가 아닌 닫는 작은따옴표 문자가 포함되어 있기 때문에 두 개의 메시지 부분으로 전송됩니다.

이 메시지의 닫는 작은따옴표 문자를 아포스트로피(GSM 03.38 알파벳의 일부)로 바꾸면 메시지가 단일 메시지 부분으로 전송됩니다.