View a markdown version of this page

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

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

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

HTTP 또는 HTTPS 엔드포인트에서 주제를 구독하기 전에 엔드포인트가 Amazon SNS가 구독 확인 및 알림 메시지를 보내는 데 사용하는 HTTP POST 요청을 처리할 수 있는지 확인해야 합니다. 일반적으로 이는 Amazon SNS의 HTTP 요청을 처리하는 웹 애플리케이션을 생성하고 배포하는 것을 의미합니다. 예를 들어 엔드포인트 호스트가 Apache 및 Tomcat과 함께 Linux를 실행하는 경우 Java 서블릿을 사용합니다. HTTP 엔드포인트 구독 시 Amazon SNS는 이를 구독 확인 요청에 전송합니다. 구독을 생성할 때이 요청을 수신하고 처리할 수 있도록 엔드포인트를 준비해야 합니다. Amazon SNS는 해당 시점에이 요청을 보냅니다. Amazon SNS는 구독을 확인할 때까지 엔드포인트에 알림을 보내지 않습니다. 확인하면 주제에 대한 게시 작업이 수행되면 Amazon SNS가 엔드포인트에 알림을 보냅니다.

구독 확인 및 알림 메시지 처리를 위한 엔드포인트 설정
  1. 사용자의 코드는 Amazon SNS가 엔드포인트에 전송한 HTTP POST 요청의 HTTP 헤더를 읽어야 합니다. 코드는 헤더 필드를 찾아야 합니다x-amz-sns-message-type. 이 필드는 Amazon SNS가 전송한 메시지 유형을 알려줍니다. 헤더를 보면 HTTP 요청의 본문을 구문 분석하지 않고도 메시지 유형을 확인할 수 있습니다. 처리해야 할 두 가지 유형 SubscriptionConfirmation와 Notification이 있습니다. 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 작업을 호출합니다.

    알림

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

    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초입니다. 엔드포인트가 제시간에 응답하지 않으면 Amazon SNS는 전송을 실패한 시도로 간주합니다. 엔드포인트가 200~4xx 범위를 벗어난 상태 코드를 반환하는 경우에도 마찬가지입니다.

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

    참고

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

    Amazon SNS는 x-amz-sns-message-id 헤더 필드를 사용하여 Amazon SNS 주제에 게시된 각 메시지를 식별합니다. 처리된 메시지의 IDs 수신 메시지와 비교하여 메시지가 재시도인지 여부를 확인할 수 있습니다.

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

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