

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

# Amazon Simple Notification Service 작업
<a name="examples-simple-notification-service"></a>

Amazon Simple Notification Service를 사용하면 여러 통신 채널을 통해 애플리케이션의 실시간 알림 메시지를 구독자에게 쉽게 푸시할 수 있습니다. 이 항목에서는 Amazon SNS의 기본 기능을 수행하는 방법을 설명합니다.

## 주제 생성
<a name="sns-create-topic"></a>

**주제**는 메시지를 전송할 시스템을 정의하는 통신 채널의 논리적 그룹화입니다(예: 메시지를 AWS Lambda 및 HTTP Webhook에 팬 아웃). 메시지를 Amazon SNS에 전송하면 메시지는 주제에 정의된 채널로 배포됩니다. 이렇게 하면 구독자가 메시지를 사용할 수 있게 됩니다.

주제를 생성하려면 먼저 빌더의 `name()` 메서드를 사용하여 세트 이름을 설정하여 [CreateTopicRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/CreateTopicRequest.html) 객체를 빌드합니다. 그런 다음 [SnsClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/SnsClient.html)의 `createTopic()` 메서드를 사용하여 요청 객체를 Amazon SNS에 전송합니다. 다음 코드 조각과 같이, 이 요청의 결과를 [CreateTopicResponse](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/CreateTopicResponse.html) 객체로 캡처할 수 있습니다.

 **가져옵니다**.

```
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;
```

 ** 코드** 

```
    public static String createSNSTopic(SnsClient snsClient, String topicName ) {

        CreateTopicResponse result = null;
        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 "";
    }
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/sns/src/main/java/com/example/sns/CreateTopic.java)를 참조하세요.

## Amazon SNS 주제 나열
<a name="sns-crelistate-topics"></a>

기존 Amazon SNS 주제의 목록을 검색하려면 [ListTopicsRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/ListTopicsRequest.html) 객체를 빌드합니다. 그런 다음 Amazon SNS의 `listTopics()` 메서드를 사용하여 요청 객체를 `SnsClient`에 전송합니다. 이 요청의 결과를 [ListTopicsResponse](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/ListTopicsResponse.html) 객체로 캡처할 수 있습니다.

다음 코드 조각은 요청의 HTTP 상태 코드와 Amazon SNS 주제의 Amazon 리소스 이름(ARN) 목록을 인쇄합니다.

 **가져옵니다**.

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.ListTopicsRequest;
import software.amazon.awssdk.services.sns.model.ListTopicsResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
```

 ** 코드** 

```
    public static void listSNSTopics(SnsClient snsClient) {

        try {
            ListTopicsRequest request = ListTopicsRequest.builder()
                   .build();

            ListTopicsResponse result = snsClient.listTopics(request);
            System.out.println("Status was " + result.sdkHttpResponse().statusCode() + "\n\nTopics\n\n" + result.topics());

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

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/sns/src/main/java/com/example/sns/ListTopics.java)를 참조하세요.

## 주제에 엔드포인트 구독 설정
<a name="sns-subscribe-endpoint-topic"></a>

주제를 생성한 후 해당 주제의 엔드포인트가 될 통신 채널을 구성할 수 있습니다. Amazon SNS가 메시지를 수신한 후 메시지는 이러한 엔드포인트에 배포됩니다.

통신 채널을 주제의 엔드포인트로 구성하려면 해당 엔드포인트가 주제에 구독하도록 설정합니다. 시작하려면 [SubscribeRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/SubscribeRequest.html) 객체를 빌드합니다. 통신 채널(예: `lambda` 또는 `email`)을 `protocol()`로 지정합니다. `endpoint()`을 관련 출력 위치(예: Lambda 함수의 ARN 또는 이메일 주소)로 설정한 다음, 구독하려는 주제의 ARN을 `topicArn()`으로 설정합니다. 그런 다음 `SnsClient`의 `subscribe()` 메서드를 사용하여 요청 객체를 Amazon SNS에 전송합니다. 이 요청의 결과를 [SubscribeResponse](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/SubscribeResponse.html) 객체로 캡처할 수 있습니다.

다음 코드 조각은 전자 메일 주소가 주제를 구독하도록 설정하는 방법을 보여 줍니다.

 **가져옵니다**.

```
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;
```

 ** 코드** 

```
    public static void subEmail(SnsClient snsClient, String topicArn, String email) {

        try {
            SubscribeRequest request = SubscribeRequest.builder()
                .protocol("email")
                .endpoint(email)
                .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);
        }
    }
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/sns/src/main/java/com/example/sns/SubscribeEmail.java)를 참조하세요.

## 주제에 메시지 게시
<a name="sns-publish-message-topic"></a>

주제를 생성하고 주제에 대해 하나 이상의 엔드포인트를 구성한 후에는 메시지를 주제에 게시할 수 있습니다. 시작하려면 [PublishRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/PublishRequest.html) 객체를 빌드합니다. 전송할 `message()`와 메시지를 전송할 주제의 ARN(`topicArn()`)을 지정합니다. 그런 다음 Amazon SNS의 `publish()` 메서드를 사용하여 요청 객체를 `SnsClient`에 전송합니다. 이 요청의 결과를 [PublishResponse](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/PublishResponse.html) 객체로 캡처할 수 있습니다.

 **가져옵니다**.

```
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;
```

 ** 코드** 

```
    public static void pubTopic(SnsClient snsClient, String message, String topicArn) {

        try {
            PublishRequest request = PublishRequest.builder()
                .message(message)
                .topicArn(topicArn)
                .build();

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

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

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/sns/src/main/java/com/example/sns/PublishTopic.java)를 참조하세요.

## 주제에서 엔드포인트 구독 취소
<a name="sns-unsubscribe-endpoint-topic"></a>

주제의 엔드포인트로 구성된 통신 채널을 제거할 수 있습니다. 이렇게 한 후에도 주제 자체는 계속 존재하며 해당 주제에 대해 구성된 다른 엔드포인트에 메시지를 배포합니다.

주제의 엔드포인트로 구성된 통신 채널을 제거하려면 주제에서 해당 엔드포인트의 구독을 해지합니다. 시작하려면 [UnsubscribeRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/UnsubscribeRequest.html) 객체를 빌드하고 구독 해지할 주제의 ARN을 `subscriptionArn()`으로 설정합니다. 그런 다음 `unsubscribe()`의 `SnsClient` 메서드를 사용하여 요청 객체를 SNS에 전송합니다. 이 요청의 결과를 [UnsubscribeResponse](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/UnsubscribeResponse.html) 객체로 캡처할 수 있습니다.

 **가져옵니다**.

```
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;
```

 ** 코드** 

```
    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);
        }
    }
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/sns/src/main/java/com/example/sns/Unsubscribe.java)를 참조하세요.

## 주제 삭제
<a name="sns-delete-topic"></a>

Amazon SNS 주제를 삭제하려면 먼저 빌더에서 주제 세트의 ARN을 `topicArn()` 메서드로 사용하여 [DeleteTopicRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/DeleteTopicRequest.html) 객체를 빌드합니다. 그런 다음 Amazon SNS의 `deleteTopic()` 메서드를 사용하여 요청 객체를 `SnsClient`에 전송합니다. 다음 코드 조각과 같이, 이 요청의 결과를 [DeleteTopicResponse](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/DeleteTopicResponse.html) 객체로 캡처할 수 있습니다.

 **가져옵니다**.

```
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;
```

 ** 코드** 

```
    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);
        }
    }
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/sns/src/main/java/com/example/sns/DeleteTopic.java)를 참조하세요.

자세한 내용은 [Amazon Simple Notification Service 개발자 안내서](https://docs.aws.amazon.com/sns/latest/dg/)를 참조하세요.