

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

# Amazon SQS에서 DLQ(Dead Letter Queue) 사용
<a name="examples-sqs-dead-letter-queues"></a>

Amazon SQS는 *Dead Letter Queue(DLQ)*를 지원합니다. Dead Letter Queue(DLQ)는 성공적으로 처리할 수 없는 메시지에 대해 다른 대기열이 대상으로 지정할 수 있는 대기열입니다. 배달 못한 편지 대기열에서 이 메시지를 구분하고 격리하여 처리에 실패한 이유를 확인할 수 있습니다.

Dead Letter Queue(DLQ)를 생성하려면 먼저 *리드라이브 정책*을 생성한 후 대기열의 속성에 해당 정책을 설정해야 합니다.

**중요**  
Dead Letter Queue(DLQ)는 소스 대기열과 동일한 유형의 대기열(FIFO 또는 표준)이어야 합니다. 또한 소스 대기열 AWS 리전 과 동일한 AWS 계정 및를 사용하여 생성해야 합니다.

## 사전 조건
<a name="codeExamplePrereq"></a>

시작하기 전에 [AWS SDK for C\$1\$1사용 시작하기](getting-started.md)를 읽어보시기 바랍니다.

예제 코드를 다운로드하고 [코드 예제 시작하기](getting-started-code-examples.md)에 설명된 대로 솔루션을 빌드합니다.

예제를 실행하려면 코드에서 요청을 만드는 데 사용하는 사용자 프로필에 AWS (서비스 및 작업에 대한) 적절한 권한이 있어야 합니다. 자세한 내용은 자격 [AWS 증명 제공을](credentials.md) 참조하세요.

## 리드라이브 정책 생성
<a name="sqs-dead-letter-queue-create-redrive-policy"></a>

리드라이브 정책은 JSON으로 지정됩니다. 이 정책을 생성하려면 AWS SDK for C\$1\$1와 함께 제공된 JSON 유틸리티 클래스를 사용할 수 있습니다.

다음은 Dead Letter Queue(DLQ)의 ARN과 메시지가 DLQ로 전송되기 전에 수신되었으나 처리되지 않은 최대 횟수를 제공하여 리드라이브 정책을 생성하는 예시 함수입니다.

 **포함 파일** 

```
#include <aws/core/Aws.h>
#include <aws/core/utils/json/JsonSerializer.h>
```

 **코드** 

```
Aws::String MakeRedrivePolicy(const Aws::String &queueArn, int maxReceiveCount) {
    Aws::Utils::Json::JsonValue redrive_arn_entry;
    redrive_arn_entry.AsString(queueArn);

    Aws::Utils::Json::JsonValue max_msg_entry;
    max_msg_entry.AsInteger(maxReceiveCount);

    Aws::Utils::Json::JsonValue policy_map;
    policy_map.WithObject("deadLetterTargetArn", redrive_arn_entry);
    policy_map.WithObject("maxReceiveCount", max_msg_entry);

    return policy_map.View().WriteReadable();
}
```

[전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/dead_letter_queue.cpp)를 참조하세요.

## 소스 대기열에서 리드라이브 정책 설정
<a name="sqs-dead-letter-queue-set-redrive-policy"></a>

Dead Letter Queue(DLQ) 설정을 완료하려면 SQSClient 클래스의 `SetQueueAttributes` 멤버 함수를 직접적으로 호출합니다. 이때 JSON 재전송 정책으로 `RedrivePolicy` 속성을 설정한 [SetQueueAttributesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_set_queue_attributes_request.html) 객체를 함께 사용합니다.

 **포함 파일** 

```
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/SetQueueAttributesRequest.h>
#include <iostream>
```

 **코드** 

```
    Aws::SQS::Model::SetQueueAttributesRequest request;
    request.SetQueueUrl(srcQueueUrl);
    request.AddAttributes(
            Aws::SQS::Model::QueueAttributeName::RedrivePolicy,
            redrivePolicy);

    const Aws::SQS::Model::SetQueueAttributesOutcome outcome =
            sqsClient.SetQueueAttributes(request);
    if (outcome.IsSuccess()) {
        std::cout << "Successfully set dead letter queue for queue  " <<
                  srcQueueUrl << " to " << deadLetterQueueARN << std::endl;
    }
    else {
        std::cerr << "Error setting dead letter queue for queue " <<
                  srcQueueUrl << ": " << outcome.GetError().GetMessage() <<
                  std::endl;
    }
```

[전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/dead_letter_queue.cpp)를 참조하세요.

## 추가 정보
<a name="more-info"></a>
+  Amazon Simple Queue Service 개발자 안내서의 [Dead Letter Queue(DLQ) 사용](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html)
+  Amazon Simple Queue Service API 참조의 [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)