

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

# Amazon SQS에서 AWS JSON 프로토콜을 사용하여 쿼리 API 요청 수행
AWS JSON 프로토콜을 사용하여 쿼리 API 요청 수행

이 주제에서는 Amazon SQS 엔드포인트를 구성하고, POST 요청을 수행하고, 응답을 해석하는 방법을 설명합니다.

**참고**  
AWS JSON 프로토콜은 대부분의 언어 변형에서 지원됩니다. 지원되는 언어 변형의 전체 목록은 [Amazon SQS APIs에서 사용되는 AWS JSON 프로토콜에는 어떤 언어가 지원되나요?](sqs-json-faqs.md#json-protocol-supported-languages) 섹션을 참조하세요.

## 엔드포인트 구성


Amazon SQS 대기열로 작업하려면 엔드포인트를 생성해야 합니다. Amazon SQS 엔드포인트에 대한 자세한 내용은 *Amazon Web Services 일반 참조*의 다음 페이지를 참조하세요.
+ [리전 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints)
+ [Amazon Simple Queue Service 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/sqs-service)

모든 Amazon SQS 엔드포인트는 독립적입니다. 예를 들어 두 대기열의 이름이 **MyQueue인데 한 대기열에는 `sqs.us-east-2.amazonaws.com` 엔드포인트가 있고 다른 대기열에는 `sqs.eu-west-2.amazonaws.com` 엔드포인트가 있는 경우 두 대기열은 서로 어떤 데이터도 공유하지 않습니다.

다음은 대기열을 생성하는 요청을 만드는 엔드포인트의 예제입니다.

```
POST / HTTP/1.1
Host: sqs.us-west-2.amazonaws.com
X-Amz-Target: AmazonSQS.CreateQueue
X-Amz-Date: <Date>
Content-Type: application/x-amz-json-1.0
Authorization: <AuthParams>
Content-Length: <PayloadSizeBytes>
Connection: Keep-Alive 
{
    "QueueName":"MyQueue",
    "Attributes": {
        "VisibilityTimeout": "40"
    },
    "tags": {
        "QueueType": "Production"
    }
}
```

**참고**  
대기열 이름과 대기열 URL은 대소문자를 구분합니다.  
*`AUTHPARAMS`*의 구조는 API 요청의 서명에 따라 달라집니다. 자세한 내용은 Amazon Web Services 일반 참조의 [AWS API 요청 서명을 참조하세요](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html). ** 

## POST 요청 만들기


Amazon SQS POST 요청은 쿼리 파라미터를 HTTP 요청 본문에 포함시켜 보냅니다.

다음은 `X-Amz-Target`이 `AmazonSQS.<operationName>`으로 설정된 HTTP 헤더와 `Content-Type`이 `application/x-amz-json-1.0`으로 설정된 HTTP 헤더의 예입니다.

```
POST / HTTP/1.1
Host: sqs.<region>.<domain>
X-Amz-Target: AmazonSQS.SendMessage
X-Amz-Date: <Date>
Content-Type: application/x-amz-json-1.0
Authorization: <AuthParams>
Content-Length: <PayloadSizeBytes>
Connection: Keep-Alive 
{
    "QueueUrl": "https://sqs.<region>.<domain>/<awsAccountId>/<queueName>/",
    "MessageBody": "This is a test message"
}
```

이 HTTP POST 요청은 Amazon SQS 대기열로 메시지를 전송합니다.

**참고**  
HTTP 헤더 `X-Amz-Target` 및 `Content-Type` 모두 필수입니다.  
HTTP 클라이언트는 클라이언트의 HTTP 버전에 따라 HTTP 요청에 다른 항목을 추가할 수 있습니다.

# 아마존 SQS JSON API 응답 해석


Amazon SQS에 요청을 보내면 결과와 함께 JSON 응답을 반환합니다. 응답 구조는 사용한 API 작업에 따라 달라집니다.

이러한 응답의 세부 정보를 이해하려면 다음을 참조하세요.
+ *Amazon Simple Queue Service API 참조*의 [API 작업](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Operations.html)에 있는 특정 API 작업
+ [Amazon SQS AWS JSON 프로토콜 FAQs](sqs-json-faqs.md)은

## 성공적인 JSON 응답 구조


요청이 성공하면 기본 응답 요소는 요청의 범용 고유 식별자(UUID)와 기타 추가된 응답 필드를 포함하는 `x-amzn-RequestId`입니다. 예를 들어 다음 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html) 응답에는 생성된 대기열의 URL이 포함된 `QueueUrl` 필드가 포함되어 있습니다.

```
HTTP/1.1 200 OK
x-amzn-RequestId: <requestId>
Content-Length: <PayloadSizeBytes>
Date: <Date>
Content-Type: application/x-amz-json-1.0
{
    "QueueUrl":"https://sqs.us-east-1.amazonaws.com/111122223333/MyQueue"
}
```

## JSON 오류 응답 구조


요청이 실패하면 Amazon SQS는 HTTP 헤더와 본문을 포함한 기본 응답을 반환합니다.

HTTP 헤더에서 `x-amzn-RequestId`에는 요청의 UUID가 포함됩니다. `x-amzn-query-error`에는 오류 유형, 오류가 생산자 오류인지 소비자 오류인지 여부라는 두 가지 정보가 포함되어 있습니다.

응답 본문에서 `"__type"`은 기타 오류 세부 정보를 나타내고, `Message`는 오류 조건을 읽을 수 있는 형식으로 나타냅니다.

다음은 JSON 형식의 오류 응답 예제입니다.

```
HTTP/1.1 400 Bad Request
x-amzn-RequestId: 66916324-67ca-54bb-a410-3f567a7a0571
x-amzn-query-error: AWS.SimpleQueueService.NonExistentQueue;Sender
Content-Length: <PayloadSizeBytes>
Date: <Date>
Content-Type: application/x-amz-json-1.0
{
    "__type": "com.amazonaws.sqs#QueueDoesNotExist",
    "message": "The specified queue does not exist."
}
```

# Amazon SQS AWS JSON 프로토콜 FAQs


이 주제에서는 Amazon SQS에서 AWS JSON 프로토콜을 사용하는 방법에 대해 자주 묻는 질문을 다룹니다.

## AWS JSON 프로토콜이란 무엇이며 기존 Amazon SQS API 요청 및 응답과 어떻게 다릅니까?


JSON은 이기종 시스템 간 통신에 가장 널리 사용되고 수용되는 연결 방법 중 하나입니다. Amazon SQS는 JSON을 매체로 사용하여 AWS SDK 클라이언트(예: Java, Python, Golang, JavaScript)와 Amazon SQS 서버 간에 통신합니다. Amazon SQS API 작업의 HTTP 요청은 JSON 형식의 입력을 수락합니다. Amazon SQS 작업이 실행되고 실행 응답이 JSON 형식으로 SDK 클라이언트에 다시 공유됩니다. JSON은 AWS 쿼리에 비해 클라이언트와 서버 간에 데이터를 전송하는 데 효율적입니다.
+ Amazon SQS AWS JSON 프로토콜은 Amazon SQS 클라이언트와 서버 간의 매개자 역할을 합니다.
+ 서버는 Amazon SQS 작업이 생성되는 프로그래밍 언어를 이해하지 못하지만 AWS JSON 프로토콜을 이해합니다.
+ Amazon SQS AWS JSON 프로토콜은 Amazon SQS 클라이언트와 서버 간의 직렬화(객체를 JSON 형식으로 변환) 및 역직렬화(JSON 형식을 객체로 변환)를 사용합니다.

## Amazon SQS용 AWS JSON 프로토콜을 시작하려면 어떻게 해야 하나요? Amazon SQS


Amazon SQS에 대한 더 빠른 메시징을 위해 최신 AWS SDK 버전을 시작하려면 AWS SDK를 지정된 버전 또는 후속 버전으로 업그레이드하세요. SDK 클라이언트에 대해 자세히 알아보려면 아래 표의 안내서 열을 참조하세요.

다음은 Amazon SQS API와 함께 사용할 수 있는 AWS JSON 프로토콜의 언어 변형 간 SDK 버전 목록입니다. APIs


| 언어 | SDK 클라이언트 리포지토리 | 필수 SDK 클라이언트 버전 | 안내서 | 
| --- | --- | --- | --- | 
|  C\$1\$1  |  [aws/aws-sdk-cpp](https://github.com/aws/aws-sdk-cpp)  |  [1.11.98](https://github.com/aws/aws-sdk-cpp/releases/tag/1.11.198)  |  [AWS SDK for C\$1\$1](https://aws.amazon.com/sdk-for-cpp/)  | 
|  Golang 1.x  |  [aws/aws-sdk-go](https://github.com/aws/aws-sdk-go)  |  [v1.47.7](https://github.com/aws/aws-sdk-go/releases/tag/v1.47.7)  |  [AWS SDK for Go](https://aws.amazon.com/sdk-for-go/)  | 
|  Golang 2.x  |  [aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2)  |  [v1.28.0](https://github.com/aws/aws-sdk-go-v2/blob/release-2023-11-09/service/sqs/CHANGELOG.md#v1270-2023-11-09)  |  [AWS SDK for Go V2](https://aws.github.io/aws-sdk-go-v2/docs/)  | 
|  Java 1.x  |  [aws/aws-sdk-java](https://github.com/aws/aws-sdk-java)  |  [1.12.585](https://github.com/aws/aws-sdk-java/releases/tag/1.12.585)  |  [AWS SDK for Java](https://aws.amazon.com/sdk-for-java/)  | 
|  Java 2.x  |  [aws/aws-sdk-java-v2](https://github.com/aws/aws-sdk-java-v2)  |  [2.21.19](https://github.com/aws/aws-sdk-java-v2/releases/tag/2.21.19)  |  [AWS SDK for Java](https://aws.amazon.com/sdk-for-java/)  | 
|  JavaScript v2.x  |  [aws/aws-sdk-js](https://github.com/aws/aws-sdk-js)  |  [의 JavaScript AWS](https://aws.amazon.com/developer/language/javascript/)  | 
|  JavaScript v3.x  |  [aws/aws-sdk-js-v3](https://github.com/aws/aws-sdk-js-v3)  |  [v3.447.0](https://github.com/aws/aws-sdk-js-v3/releases/tag/v3.447.0)  |  [의 JavaScript AWS](https://aws.amazon.com/developer/language/javascript/)  | 
|  .NET  |  [aws/aws-sdk-net](https://github.com/aws/aws-sdk-net)  |  [3.7.681.0](https://github.com/aws/aws-sdk-net/releases/tag/3.7.681.0)  |  [AWS SDK for .NET](https://aws.amazon.com/sdk-for-net/)  | 
|  PHP  |  [aws/aws-sdk-php](https://github.com/aws/aws-sdk-php)  |  [3.285.2](https://github.com/aws/aws-sdk-php/releases/tag/3.285.2)  |  [AWS SDK for PHP](https://aws.amazon.com/sdk-for-php/)  | 
|  Python-boto3  |   [boto/boto3](https://github.com/boto/boto3)   |  [1.28.82](https://github.com/boto/boto3/releases/tag/1.28.82)  |  [AWS SDK for Python (Boto3)](https://aws.amazon.com/sdk-for-python/)  | 
|  Python-botocore  |   [boto/botocore](https://github.com/boto/botocore/)   |  [1.31.82](https://github.com/boto/botocore/releases/tag/1.31.82)  |  [AWS SDK for Python (Boto3)](https://aws.amazon.com/sdk-for-python/)  | 
|  awscli  |  [AWS CLI](https://github.com/aws/aws-cli)  |  [1.29.82](https://github.com/aws/aws-cli/releases/tag/1.29.82)  |  [AWS Command Line Interface](https://aws.amazon.com/cli/)  | 
|  Ruby  |  [aws/aws-sdk-ruby](https://github.com/aws/aws-sdk-ruby)  |  [1.67.0](https://rubygems.org/gems/aws-sdk-sqs/versions/1.67.0)  |  [AWS SDK for Ruby](https://aws.amazon.com/sdk-for-ruby/)  | 

## Amazon SQS 워크로드에 JSON 프로토콜을 활성화하면 어떤 위험이 있나요?


 AWS SDK의 사용자 지정 구현 또는 사용자 지정 클라이언트와 AWS SDK의 조합을 사용하여 AWS 쿼리 기반(XML 기반) 응답을 생성하는 Amazon SQS와 상호 작용하는 경우 AWS JSON 프로토콜과 호환되지 않을 수 있습니다. 문제가 발생하면 AWS Support에 문의하세요.

## 이미 최신 AWS SDK 버전을 사용하고 있지만 오픈 소스 솔루션이 JSON을 지원하지 않는 경우 어떻게 해야 합니까?


SDK 버전을 사용 중인 것보다 이전 버전으로 변경해야 합니다. [Amazon SQS용 AWS JSON 프로토콜을 시작하려면 어떻게 해야 하나요? Amazon SQS](#json-protocol-getting-started) 자세한 내용은 섹션을 참조하세요.에 나열된 AWS SDK 버전은 Amazon SQS APIs용 JSON 유선 프로토콜을 [Amazon SQS용 AWS JSON 프로토콜을 시작하려면 어떻게 해야 하나요? Amazon SQS](#json-protocol-getting-started) 사용합니다. AWS SDK를 이전 버전으로 변경하면 Amazon SQS APIs AWS 쿼리를 사용합니다.

## Amazon SQS APIs에서 사용되는 AWS JSON 프로토콜에는 어떤 언어가 지원되나요?


Amazon SQS는 AWS SDKs을 지원합니다. 현재 Kotlin, Rust 또는 Swift는 지원하지 않습니다. 다른 언어 변형에 대해 자세히 알아보려면 [AWS에서의 빌드를 위한 도구](https://aws.amazon.com/developer/tools/)를 참조하세요.

## Amazon SQS APIs에서 사용되는 AWS JSON 프로토콜에 지원되는 리전


Amazon SQS는 Amazon SQS를 사용할 수 있는 모든 [AWS 리전](https://docs.aws.amazon.com/general/latest/gr/sqs-service.html)에서 AWS JSON 프로토콜을 지원합니다.

## AWS JSON 프로토콜을 사용하여 Amazon SQS용 지정된 AWS SDK 버전으로 업그레이드할 때 어떤 지연 시간 개선을 기대할 수 있습니까?


AWS JSON 프로토콜은 AWS 쿼리 프로토콜에 비해 요청 및 응답의 직렬화 및 역직렬화에 더 효율적입니다. 5KB 메시지 페이로드에 대한 AWS 성능 테스트를 기반으로 Amazon SQS용 JSON 프로토콜은 end-to-end 메시지 처리 지연 시간을 최대 23% 줄이고 애플리케이션 클라이언트 측 CPU 및 메모리 사용량을 줄입니다.

## AWS 쿼리 프로토콜이 더 이상 사용되지 않나요?


AWS 쿼리 프로토콜은 계속 지원됩니다. AWS SDK 버전이 Amazon SQS용 JSON 프로토콜을 시작하려면 어떻게 해야 합니까?에 나열된 다른 이전 버전으로 설정되어 있는 한 AWS 쿼리 프로토콜을 계속 사용할 수 있습니다. [AWS Amazon SQS](#json-protocol-getting-started)

## AWS JSON 프로토콜에 대한 자세한 내용은 어디에서 확인할 수 있습니까?


**Smithy 설명서의 [AWS JSON 1.0 프로토콜](https://smithy.io/2.0/aws/protocols/aws-json-1_0-protocol.html)에서 JSON 프로토콜에 대한 자세한 내용을 확인할 수 있습니다. AWS JSON 프로토콜을 사용하는 Amazon SQS API 요청에 대한 자세한 내용은 [Amazon SQS에서 AWS JSON 프로토콜을 사용하여 쿼리 API 요청 수행](sqs-making-api-requests-json.md) 섹션을 참조하세요.