1단계: Amazon SNS 메시지를 처리하도록 엔드포인트를 준비합니다. - Amazon Simple Notification Service

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

1단계: Amazon SNS 메시지를 처리하도록 엔드포인트를 준비합니다.

사용자는 주제에 대한 HTTP 엔드포인트 또는 HTTPS 엔드포인트를 구독하기 전에 HTTP 엔드포인트 또는 HTTPS 엔드포인트가 구독 확인 및 알림 메시지를 전송하기 위해 Amazon SNS가 사용하는 HTTP POST 요청을 처리할 수 있는 능력이 있는지 확인해야 합니다. 일반적으로 이는 Amazon SNS에서 HTTP 요청을 처리하는 웹 애플리케이션의 생성 및 배포(예. endpoint host가 Linux, Apache 및 Tomcat을 실행할 경우 Java servlet)를 의미합니다. HTTP 엔드포인트 구독 시 Amazon SNS는 이를 구독 확인 요청에 전송합니다. 사용자가 구독을 생성할 때 Amazon SNS는 이 요청을 전송하므로 엔드포인트는 이 요청을 수신하고 처리하도록 준비되어야 합니다. Amazon SNS는 구독을 확인할 때까지 엔드포인트에 알림을 보내지 않습니다. 구독을 확인하고 나면 Amazon SNS는 구독하는 주제에 대해 게시 작업이 수행될 때 엔드포인트에 알림을 전송합니다.

구독 확인 및 알림 메시지 처리를 위한 엔드포인트 설정
  1. 사용자의 코드는 Amazon SNS가 엔드포인트에 전송한 HTTP POST 요청의 HTTP 헤더를 읽어야 합니다. 사용자의 코드는 Amazon SNS가 사용자에게 전송한 메시지 유형을 나타내는 헤더 필드 x-amz-sns-message-type을 찾아야 합니다. 헤더를 확인함으로써 사용자는 HTTP 요청의 본문을 분석하지 않고도 메시지 유형을 결정할 수 있습니다. 처리해야 할 두 가지 유형 SubscriptionConfirmationNotification이 있습니다. UnsubscribeConfirmation 메시지는 주제에서 구독이 삭제된 때에만 사용됩니다.

    HTTP 헤더에 대한 세부 정보는 HTTP/HTTPS 헤더에서 확인하세요. 다음의 HTTP POST 요청은 구독 확인 메시지의 예입니다.

    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: example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "SubscriptionConfirmation", "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b", "Token" : "2336412f37f...", "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+...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem" }
  2. 사용자의 코드는 HTTP POST 요청 및 content-type text/plain 본문의 JSON 문서를 분석하여 Amazon SNS 메시지를 구성하는 이름-값 쌍을 읽어야 합니다. JSON 분석을 사용해 제어 문자의 escaped 상태를 ASCII 문자 값으로 변환 처리합니다(예. \n을 줄바꿈 문자로 변환). Jackson JSON Processor 등의 기존 JSON 구문 분석기를 사용하거나 자체적으로 쓸 수 있습니다. 제목 및 메시지 필드의 텍스트를 유효한 JSON으로 보내려면 Amazon SNS에서 일부 제어 문자를 JSON 문서에 포함될 수 있는 이스케이프된 표현으로 변환해야 합니다. 엔드포인트에 전송된 POST 요청의 본문에 있는 JSON 문서를 수신하면 사용자는 주제에 게시된 원래 제목과 메시지의 정확한 표현을 원하는 경우 이스케이프된 문자를 다시 원본 문자 값으로 변환해야 합니다. 서명은 원본 형식의 메시지 및 제목을 서명할 문자열의 일부로 사용하기 때문에 이는 알림의 서명을 확인하고자 할 경우 아주 중요합니다.

  3. 사용자의 코드는 Amazon SNS가 보낸 알림의 신뢰성, 구독 확인 또는 구독 해지 확인 메시지를 확인해야 합니다. 엔드포인트는 Amazon SNS 메시지에 포함된 정보를 사용해 서명을 재생성할 수 있으며 사용자는 Amazon SNS가 메시지로 보낸 서명을 자신의 서명과 비교함으로써 메시지의 콘텐츠를 확인할 수 있습니다. 메시지의 서명 확인에 대한 자세한 정보는 Amazon SNS 메시지의 서명 확인에서 확인하세요.

  4. 사용자의 코드는 헤더 필드 x-amz-sns-message-type가 지정하는 유형에 기초하여 HTTP 요청의 본문에 담긴 JSON 문서를 읽고 메시지를 처리해야 합니다. 다음은 두 가지 주요 메시지 유형 처리 지침입니다.

    SubscriptionConfirmation

    SubscribeURL의 값을 읽고 해당 URL을 방문합니다. 구독을 확인하고 엔드포인트에서 알림 수신을 시작하려면 SubscribeURL URL을 방문해야 합니다(예. URL에 HTTP GET 요청을 전송). SubscribeURL를 확인하려면 이전 단계의 HTTP 요청 예제를 확인합니다. SubscriptionConfirmation 메시지의 형식에 대한 자세한 정보는 HTTP/HTTPS 구독 확인 JSON 형식에서 확인하세요. URL을 방문하면 다음의 XML 문서와 같은 응답을 받게 됩니다. 문서는 ConfirmSubscriptionResult 요소 내 엔드포인트에 대한 구독 ARN을 되돌립니다.

    <ConfirmSubscriptionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/"> <ConfirmSubscriptionResult> <SubscriptionArn>arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55</SubscriptionArn> </ConfirmSubscriptionResult> <ResponseMetadata> <RequestId>075ecce8-8dac-11e1-bf80-f781d96e9307</RequestId> </ResponseMetadata> </ConfirmSubscriptionResponse>

    사용자는 SubscribeURL 방문 외에도 ConfirmSubscription 작업과 함께 Token(SubscriptionConfirmation 메시지의 해당 값으로 설정된)을 사용해 구독을 확인할 수 있습니다. 주제 소유자 및 구독 소유자만 엔드포인트를 구독 해지할 수 있도록 허용하고자 하는 경우 AWS 서명을 사용해 ConfirmSubscription 작업을 호출합니다.

    알림

    SubjectMessage에 대한 값을 읽어 주제에 게시된 알림 정보를 획득합니다.

    Notification 메시지 형식에 대한 세부 정보는 HTTP/HTTPS 헤더에서 확인하세요. 다음의 HTTP POST 요청은 endpoint example.com에 전송된 알림 메시지의 예입니다.

    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: 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" }
  5. 엔드포인트가 적절한 상태 코드로 Amazon SNS의 HTTP POST 메시지에 응답하도록 확인해야 합니다. 연결은 15초 내에 끊어집니다. 엔드포인트가 연결 시간이 끊기기 전까지 응답하지 않거나 엔드포인트가 상태 코드를 200–4xx 범위 외로 되돌릴 경우 Amazon SNS는 메시지 전송이 실패한 것으로 간주합니다.

  6. Amazon SNS로부터의 메시지 전송 재시도를 처리할 수 있도록 코드를 확인해야 합니다. Amazon SNS는 엔드포인트에서 성공적인 응답을 수신하지 않을 경우 메시지를 다시 전송하는 시도를 합니다. 이는 구독 확인 메시지를 포함한 모든 메시지에 적용됩니다. 기본 설정에서 메시지의 초기 전송이 실패할 경우 Amazon SNS는 최대 3회 재시도를 실시하며 실패한 시도 사이에 설정된 지연 시간은 20초입니다.

    참고

    15초가 경과하면 메시지 요청 시간이 초과됩니다. 따라서 시간이 초과되어 메시지 전송이 실패하는 경우 Amazon SNS는 이전 전송 시도의 약 35초 후에 재시도를 합니다. 엔드포인트에 대해 다른 전송 정책을 설정할 수 있습니다.

    Amazon SNS는 x-amz-sns-message-id 헤더 필드를 사용하여 Amazon SNS 주제에 게시된 각 메시지를 고유하게 식별합니다. 사용자는 수신 메시지와 처리한 메시지의 ID를 비교함으로써 메시지가 재전송을 시도하는지 여부를 판단할 수 있습니다.

  7. HTTPS 엔드포인트를 구독할 경우 엔드포인트에 신뢰할 수 있는 인증 기관(CA)의 서버 인증서가 있는지 확인해야 합니다. Amazon SNS는 Amazon SNS가 신뢰하는 CA의 서명이 있는 서버 인증서를 보유한 HTTPS 엔드포인트에만 메시지를 보냅니다.

  8. Amazon SNS 메시지를 수신하기 위해 생성한 코드를 배포합니다. 엔드포인트를 구독할 때 엔드포인트는 적어도 구독 확인 메시지를 받을 준비가 되어야 합니다.