

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

# Amazon SNS 메시지 형식 구문 분석
<a name="sns-message-and-json-formats"></a>

Amazon SNS가 HTTP/HTTPS 엔드포인트로 메시지를 전송할 때 HTTP 헤더와 JSON 메시지 본문이 모두 포함됩니다. 이러한 메시지는 메시지 유형, 주제 ARN, 타임스탬프 및 디지털 서명과 같은 메타데이터를 포함하는 구조화된 형식을 따릅니다. Amazon SNS 메시지를 올바르게 구문 분석하면 메시지가 구독 확인, 알림 또는 구독 취소 확인인지 확인하고, 관련 데이터를 추출하고, 서명 검증을 사용하여 신뢰성을 확인할 수 있습니다.

# HTTP/HTTPS 헤더
<a name="http-header"></a>

Amazon SNS가 구독 확인, 알림 또는 구독 해지 확인 메시지를 HTTP/HTTPS 엔드포인트에 전송할 때 Amazon SNS에 특정한 여러 헤더 값과 함께 POST 메시지를 전송합니다. 이러한 작업의 헤더 값을 사용하면 `Type` 값을 읽기 위해 JSON 메시지 본문을 구문 분석할 필요 없이 메시지 유형을 파악할 수 있습니다. 기본적으로 Amazon SNS는 `text/plain; charset=UTF-8`로 설정된 `Content-Type`로 모든 알림을 HTTP/S 엔드포인트로 전송합니다. 텍스트/일반(기본값) 외 `Content-Type`을 선택하려면 [HTTP/S 전송 정책 생성](sns-message-delivery-retries.md#creating-delivery-policy)의 `headerContentType`를 참조하세요.

**`x-amz-sns-message-type`**  
메시지 유형. 가능한 값은 `SubscriptionConfirmation`, `Notification`, `UnsubscribeConfirmation`입니다.

**`x-amz-sns-message-id`**  
범용 고유 식별자(UUID)로 게시되는 각 메시지마다 고유합니다. 재시도 중에 Amazon SNS가 재전송하는 알림의 경우 원본 메시지의 메시지 ID가 사용됩니다.

**`x-amz-sns-topic-arn`**  
이 메시지가 게시된 주제에 대한 Amazon Resource Name(ARN)입니다.

**`x-amz-sns-subscription-arn`**  
이 엔드포인트에 대한 구독의 ARN입니다.

다음의 HTTP POST 헤더는 HTTP 엔드포인트에 대한 `Notification` 메시지 헤더의 예입니다.

```
POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
Content-Length: 1336
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent
```

# HTTP/HTTPS 구독 확인 JSON 형식
<a name="http-subscription-confirmation-json"></a>

사용자가 HTTP/HTTPS 엔드포인트를 구독한 후에 Amazon SNS는 구독 확인 메시지를 HTTP/HTTPS 엔드포인트에 전송합니다. 이 메시지는 구독을 확인하기 위해 방문해야 하는 `SubscribeURL` 값을 담고 있습니다(또는, `Token` 값을 [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html)과 함께 사용할 수 있습니다).

**참고**  
Amazon SNS는 구독이 확인되기 전에는 알림을 이 엔드포인트로 전송하지 않습니다.

구독 확인 메시지는 다음의 이름/값 쌍을 갖는 JSON 문서를 포함하는 메시지 본문으로 된 POST 메시지입니다.

**`Type`**  
메시지 유형. 구독 확인의 경우 유형은 `SubscriptionConfirmation`입니다.

**`MessageId`**  
범용 고유 식별자(UUID)로 게시되는 각 메시지마다 고유합니다. 재시도 중에 Amazon SNS가 재전송하는 메시지의 경우 원본 메시지의 메시지 ID가 사용됩니다.

**`Token`**  
구독 확인을 위해 [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) 작업에 사용할 수 있는 값입니다. 또는, 간단히 `SubscribeURL`을 방문하면 됩니다.

**`TopicArn`**  
이 메시지가 구독된 주제에 대한 Amazon Resource Name(ARN)입니다.

**`Message`**  
메시지를 설명하는 문자열입니다. 구독 확인의 경우 이 문자열은 다음과 같습니다.  

```
You have chosen to subscribe to the topic arn:aws:sns:us-east-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.
```

**`SubscribeURL`**  
구독 확인을 위해 방문해야 하는 URL입니다. 또는 `Token`을 [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) 작업으로 사용하여 구독을 확인하면 됩니다.

**`Timestamp`**  
구독 확인이 전송된 시간(GMT)입니다.

**`SignatureVersion`**  
사용한 Amazon SNS 서명의 버전입니다.  
+ `SignatureVersion`이 **1**인 경우, `Signature`는, `Message`, `MessageId`, `Type`, `Timestamp`, 및 `TopicArn` 값의 Base64로 인코딩된 `SHA1withRSA` 서명입니다.
+ `SignatureVersion`이 **2**인 경우, `Signature`는 `Message`, `MessageId`, `Type`, `Timestamp` 및 `TopicArn` 값의 Base64로 인코딩된 `SHA256withRSA` 서명입니다.

**`Signature`**  
`Message`, `MessageId`, `Type`, `Timestamp`, 및 `TopicArn` 값의 Base64로 인코딩된 `SHA1withRSA` 또는 `SHA256withRSA` 서명입니다.

**`SigningCertURL`**  
메시지에 서명하기 위해 사용된 인증서의 URL입니다.

다음의 HTTP POST 메시지는 HTTP 엔드포인트에 대한 `SubscriptionConfirmation` 메시지의 예입니다.

```
POST / HTTP/1.1
x-amz-sns-message-type: SubscriptionConfirmation
x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
Content-Length: 1336
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
  "Type" : "SubscriptionConfirmation",
  "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b",
  "Token" : "2336412f37...",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.",
  "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...",
  "Timestamp" : "2012-04-26T20:45:04.751Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEpH+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH81mtnPk5uvvolIC1CXGu43obcgFxeL3khZl8IKvO61GWB6jI9b5+gLPoBc1Q=",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
}
```

# HTTP/HTTPS 알림 JSON 형식
<a name="http-notification-json"></a>

Amazon SNS가 구독된 HTTP 또는 HTTPS 엔드포인트에 알림을 전송할 때 엔드포인트에 전송된 POST 메시지는 다음의 이름/값 쌍으로 된 JSON 문서를 구성하는 메시지 본문을 보유합니다.

**`Type`**  
메시지 유형. 알림의 경우 유형은 `Notification`입니다.

**`MessageId`**  
범용 고유 식별자(UUID)로 게시되는 각 메시지마다 고유합니다. 재시도 중에 Amazon SNS가 재전송하는 알림의 경우 원본 메시지의 메시지 ID가 사용됩니다.

**`TopicArn`**  
이 메시지가 게시된 주제에 대한 Amazon Resource Name(ARN)입니다.

**`Subject`**  
알림이 주제에 게시되었을 때 `Subject` 매개 변수입니다.  
이는 선택 가능한 파라미터입니다. `Subject`이 지정되지 않을 경우에는 이 이름-값 쌍은 본 JSON 문서에 표시되지 않습니다.

**`Message`**  
알림이 주제에 게시되었을 때 지정되는 `Message` 값입니다.

**`Timestamp`**  
알림이 게시된 시간(GMT)입니다.

**`SignatureVersion`**  
사용한 Amazon SNS 서명의 버전입니다.  
+ `SignatureVersion`이 **1**인 경우, `Signature`는 `Message`, `MessageId`, `Subject`(있는 경우), `Type`, `Timestamp`, `TopicArn` 값의 Base64로 인코딩된 `SHA1withRSA` 서명입니다.
+ `SignatureVersion`가 **2**인 경우, `Signature`는 `Message`, `MessageId`, `Subject`(있는 경우), `Type`, `Timestamp`, `TopicArn` 값의 Base64로 인코딩된 `SHA256withRSA` 서명입니다.

**`Signature`**  
`Message`, `MessageId`, `Subject`(있는 경우), `Type`, `Timestamp`, `TopicArn` 값의 Base64로 인코딩된 `SHA1withRSA` 또는 `SHA256withRSA` 서명입니다.

**`SigningCertURL`**  
메시지에 서명하기 위해 사용된 인증서의 URL입니다.

**`UnsubscribeURL`**  
이 주제에서 엔드포인트를 구독 해지하는데 사용하는 URL입니다. 이 URL을 방문하면 Amazon SNS는 엔드포인트를 구독 해지하고 이 엔드포인트로 전송하는 알림을 중지합니다.

다음의 HTTP POST 메시지는 HTTP 엔드포인트에 대한 `Notification` 메시지의 예입니다.

```
POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96
Content-Length: 773
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
  "Type" : "Notification",
  "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Subject" : "My First Message",
  "Message" : "Hello world!",
  "Timestamp" : "2012-05-02T00:54:06.655Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEw6JRN...",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
  "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96"
  }
```

# HTTP/HTTPS 구독 해지 확인 JSON 형식
<a name="http-unsubscribe-confirmation-json"></a>

주제에서 HTTP/HTTPS 엔드포인트가 구독 해지된 후 Amazon SNS는 엔드포인트에 구독 해지 확인 메시지를 전송합니다.

구독 해지 확인 메시지는 다음의 이름/값 쌍을 갖는 JSON 문서를 포함하는 메시지 본문으로 된 POST 메시지입니다.

**`Type`**  
메시지 유형. 구독 해지 확인의 경우 유형은 `UnsubscribeConfirmation`입니다.

**`MessageId`**  
범용 고유 식별자(UUID)로 게시되는 각 메시지마다 고유합니다. 재시도 중에 Amazon SNS가 재전송하는 메시지의 경우 원본 메시지의 메시지 ID가 사용됩니다.

**`Token`**  
구독 재확인을 위해 [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) 작업에 사용할 수 있는 값입니다. 또는, 간단히 `SubscribeURL`을 방문하면 됩니다.

**`TopicArn`**  
이 엔드포인트가 구독 해지된 주제에 대한 Amazon Resource Name(ARN)입니다.

**`Message`**  
메시지를 설명하는 문자열입니다. 구독 해지 확인의 경우 이 문자열은 다음과 같습니다.  

```
You have chosen to deactivate subscription arn:aws:sns:us-east-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.
```

**`SubscribeURL`**  
구독 재확인을 위해 방문해야 하는 URL입니다. 또는, 그 대신 `Token`을 [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) 작업으로 사용하여 구독을 재확인하면 됩니다.

**`Timestamp`**  
구독 해지 확인이 전송된 시간(GMT)입니다.

**`SignatureVersion`**  
사용한 Amazon SNS 서명의 버전입니다.  
+ `SignatureVersion`이 **1**인 경우, `Signature`는, `Message`, `MessageId`, `Type`, `Timestamp`, 및 `TopicArn` 값의 Base64로 인코딩된 `SHA1withRSA` 서명입니다.
+ `SignatureVersion`이 **2**인 경우, `Signature`는 `Message`, `MessageId`, `Type`, `Timestamp` 및 `TopicArn` 값의 Base64로 인코딩된 `SHA256withRSA` 서명입니다.

**`Signature`**  
`Message`, `MessageId`, `Type`, `Timestamp`, 및 `TopicArn` 값의 Base64로 인코딩된 `SHA1withRSA` 또는 `SHA256withRSA` 서명입니다.

**`SigningCertURL`**  
메시지에 서명하기 위해 사용된 인증서의 URL입니다.

다음의 HTTP POST 메시지는 HTTP 엔드포인트에 대한 `UnsubscribeConfirmation` 메시지의 예입니다.

```
POST / HTTP/1.1
x-amz-sns-message-type: UnsubscribeConfirmation
x-amz-sns-message-id: 47138184-6831-46b8-8f7c-afc488602d7d
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
Content-Length: 1399
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
  "Type" : "UnsubscribeConfirmation",
  "MessageId" : "47138184-6831-46b8-8f7c-afc488602d7d",
  "Token" : "2336412f37...",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Message" : "You have chosen to deactivate subscription arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.",
  "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37fb6...",
  "Timestamp" : "2012-04-26T20:06:41.581Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEHXgJm...",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
}
```

# SetSubscriptionAttributes 전송 정책 JSON 형식
<a name="set-sub-attributes-delivery-policy-json"></a>

`SetSubscriptionAttributes` 작업에 요청을 전송하고 `DeliveryPolicy`의 값에 대해 `AttributeName` 매개 변수를 설정할 경우, `AttributeValue` 매개 변수의 값은 유효한 JSON 객체이어야 합니다. 예를 들어, 다음의 예는 최대 5회 재시도하도록 전송 정책을 설정합니다.

```
http://sns.us-east-2.amazonaws.com/
?Action=SetSubscriptionAttributes
&SubscriptionArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic%3A80289ba6-0fd4-4079-afb4-ce8c8260f0ca
&AttributeName=DeliveryPolicy
&AttributeValue={"healthyRetryPolicy":{"numRetries":5}}
...
```

`AttributeValue` 매개 변수의 값에 다음의 JSON 형식을 사용합니다.

```
{
    "healthyRetryPolicy" : {
        "minDelayTarget" :  int,
        "maxDelayTarget" : int,
        "numRetries" : int,
        "numMaxDelayRetries" : int,
        "backoffFunction" : "linear|arithmetic|geometric|exponential"
    },
    "throttlePolicy" : {
        "maxReceivesPerSecond" : int
    },
    "requestPolicy" : {
        "headerContentType" : "text/plain | application/json | application/xml"
    }
}
```

`SetSubscriptionAttribute` 작업에 대한 자세한 내용을 확인하려면 *Amazon Simple Notification Service API 참조*의 [SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html)로 이동하세요. 지원되는 HTTP 콘텐츠 유형 헤더에 대한 자세한 내용은 [HTTP/S 전송 정책 생성](sns-message-delivery-retries.md#creating-delivery-policy)을 참조하세요.

# SetTopicAttributes 전송 정책 JSON 형식
<a name="set-topic-attributes-delivery-policy-json"></a>

`SetTopicAttributes` 작업에 요청을 전송하고 `DeliveryPolicy`의 값에 대해 `AttributeName` 매개 변수를 설정할 경우, `AttributeValue` 매개 변수의 값은 유효한 JSON 객체이어야 합니다. 예를 들어, 다음의 예는 최대 5회 재시도하도록 전송 정책을 설정합니다.

```
http://sns.us-east-2.amazonaws.com/
?Action=SetTopicAttributes
&TopicArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic
&AttributeName=DeliveryPolicy
&AttributeValue={"http":{"defaultHealthyRetryPolicy":{"numRetries":5}}}
...
```

`AttributeValue` 매개 변수의 값에 다음의 JSON 형식을 사용합니다.

```
{
    "http" : {
        "defaultHealthyRetryPolicy" : {
            "minDelayTarget":  int,
            "maxDelayTarget": int,
            "numRetries": int,
            "numMaxDelayRetries": int,
            "backoffFunction": "linear|arithmetic|geometric|exponential"
        },
        "disableSubscriptionOverrides" : Boolean,
        "defaultThrottlePolicy" : {
            "maxReceivesPerSecond" : int
        },
        "defaultRequestPolicy" : {
            "headerContentType" : "text/plain | application/json | application/xml"
        }
    }
}
```

`SetTopicAttribute` 작업에 대한 자세한 내용을 확인하려면 *Amazon Simple Notification Service API 참조*의 [SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)로 이동하세요. 지원되는 HTTP 콘텐츠 유형 헤더에 대한 자세한 내용은 [HTTP/S 전송 정책 생성](sns-message-delivery-retries.md#creating-delivery-policy)을 참조하세요.