Amazon Simple Queue Service(Amazon SQS)는 처리되길 기다리는 메시지를 저장하는 메시지 대기열에 대한 액세스를 제공하는 웹 서비스입니다. Amazon SQS에서는 어느 컴퓨터에서나 실행할 수 있는 메시지 대기열 애플리케이션을 신속하게 구축할 수 있습니다.

Amazon SQS는 컴퓨터 간에 전송되는 메시지를 저장할 수 있는 안정적이고 안전하며 고도로 확장 가능한 호스팅된 대기열 서비스를 제공합니다. Amazon SQS에서는 메시지를 손실하거나 각 구성 요소를 항상 가용 상태로 유지하지 않고도 다양한 분산 애플리케이션 구성 요소 간에 데이터를 이동할 수 있습니다. AWS Key Management Service(KMS)와 통합된 Amazon SQS 서버 측 암호화(SSE)를 사용하면 애플리케이션 간에 민감한 데이터를 교환할 수 있습니다.

Amazon SQS를 사용하면 비결합된 구성 요소로 분산 애플리케이션을 구축하고 Amazon Elastic Compute Cloud(EC2) 및 다른 AWS 인프라 웹 서비스와 긴밀하게 연동할 수 있습니다.

Amazon SQS는 서로 다른 애플리케이션 요구 사항에 맞춰 2가지 유형의 대기열을 제공합니다.

표준 대기열
Amazon SQS가 제공하는 기본 대기열 유형은 표준 대기열입니다. 표준 대기열은 거의 무제한의 초당 트랜잭션 수를 제공합니다. 표준 대기열은 메시지가 최소 1회 전달되는 것을 보장합니다. 하지만 때때로(높은 처리량을 가능케 하는 고도로 분산된 아키텍처로 인해) 하나 이상의 메시지 사본이 잘못된 순서로 전달될 수 있습니다. 표준 대기열은 메시지가 송신된 순서와 전반적으로 동일하게 전달되는 최선 노력(best-effort) 순서화를 제공합니다.

FIFO 대기열 – 신규!
FIFO 대기열은 표준 대기열을 보완합니다. 이 대기열 유형의 가장 중요한 기능은 FIFO(선입선출) 전송 및 정확히 한 번 처리입니다. 다시 말해 메시지가 전송되고 수신되는 순서가 엄격하게 지켜지며 메시지는 한 번 전달되고, 소비자가 이를 처리 및 삭제할 때까지 유지되며, 중복 메시지는 대기열에 올라가지 않습니다. 또한, FIFO 대기열은 순서가 서로 다른 스트림을 단일 대기열 내에 허용하는 메시지 그룹을 지원합니다. FIFO 대기열은 API 작업별로 초당 300회의 트랜잭션(TPS)으로 제한되지만 표준 대기열이 지원하는 모든 기능을 가지고 있습니다.

 

무료로 AWS 시작하기

무료 계정 생성
또는 콘솔에 로그인

AWS 프리 티어는 Amazon Simple Queue Service(SQS) 요청 1백만 건을 포함합니다.

AWS 프리 티어 세부 정보 보기 »

Capital One에서 Amazon SQS를 사용해 핵심 뱅킹 애플리케이션을 클라우드로 마이그레이션하는 방법을 공유합니다.

sqs_thumb_reInvent2016-migrating-ent-messaging

Amazon SQS는 AWS Management Console을 통해 쉽게 액세스할 수 있습니다. 사용자는 포인트 앤 클릭 방식의 웹 기반 인터페이스를 이용해서 Amazon SQS를 설치하고 관리합니다.

Amazon SQS는 사용이 간편하고 매우 유연한 간단한 인터페이스를 제공합니다. 또한, 다음과 같은 요청을 제공합니다.

기본 메시지 작업

  • SendMessage: 지정된 대기열에 메시지 전송
  • ReceiveMessage: 지정된 대기열로부터 하나 이상의 메시지 반환
  • DeleteMessage: 지정된 대기열로부터 이전에 수신된 메시지 제거
  • ChangeMessageVisibility: 이전에 수신된 메시지의 제한 시간 초과 변경

배치 메시지 작업

  • SendMessageBatch: 지정된 대기열에 여러 메시지 전송
  • DeleteMessageBatch: 지정된 대기열로부터 이전에 수신된 여러 메시지 제거
  • ChangeMessageVisibilityBatch: 이전에 수신된 여러 메시지의 제한 시간 초과 변경

기본 대기열 관리

  • CreateQueue: AWS 계정에서 사용할 대기열 생성
  • ListQueues: 기존 대기열 나열
  • DeleteQueue: 대기열 중 하나 삭제
  • PurgeQueue: 대기열의 모든 메시지 삭제

고급 대기열 관리

  • SetQueueAttributes: 제한 시간 초과(메시지를 읽은 후 다시 읽을 수 없도록 메시지가 잠겨있는 시간), 지연 값 또는 배달 못한 편지 대기열 파라미터와 같은 대기열 설정 제어
  • GetQueueAttributes: 제한 시간 초과, 대기열의 메시지 수 또는 최대 메시지 크기 같은 대기열에 관한 정보 확인
  • GetQueueUrl: 대기열 URL 확인
  • AddPermission: 지정된 대기열에 대한 대기열 공유에 다른 AWS 계정 추가
  • RemovePermission: 지정된 대기열에 대한 대기열 공유에서 AWS 계정 제거
  • ListDeadLetterSourceQueues: 배달 못한 편지 대기열에 연결된 대기열 나열

자세한 내용은 Amazon SQS API Reference를 참조하십시오.

Amazon SQS에 저장된 메시지에는 관리가 쉬우면서도 모든 메시지가 처리되도록 보장하는 수명 주기가 있습니다.

  1. 메시지를 보내야 하는 시스템에서는 Amazon SQS 대기열을 선택하고 SendMessage를 사용하여 새 메시지를 전송합니다.
  2. 메시지를 처리하는 다른 시스템은 처리할 메시지가 더 많이 필요해지므로 ReceiveMessage를 호출하고, 해당 메시지가 반환됩니다.
  3. ReceiveMessage에 의해 메시지가 반환되면 해당 메시지는 제한 시간이 초과할 때까지는 다른 어떤 ReceiveMessage에 의해서도 반환되지 않습니다. 이는 다수의 소비자가 동일한 메시지를 동시에 처리하는 것을 방지합니다.
  4. 메시지를 처리하는 시스템에서 메시지 작업을 성공적으로 완료하면, 해당 시스템에서는 다른 시스템에서 해당 메시지를 다시 처리하지 않도록 DeleteMessage를 호출하여 메시지를 대기열에서 제거합니다. 시스템에서 메시지 처리에 실패하는 경우, 제한 시간이 초과하는 즉시 다른 ReceiveMessage 호출을 통해 해당 메시지를 읽습니다.
  5. 소스 대기열에 배달 못한 편지 대기열이 연결되어 있는 경우 지정한 최대 배달 시도 횟수에 도달한 이후에는 메시지가 배달 못한 편지 대기열로 이동됩니다.
  • 개발자는 메시지 수에 제한이 없는 Amazon SQS 대기열을 원하는 만큼 생성할 수 있습니다.
    • 대기열은 어느 리전에나 생성할 수 있습니다.
    • 메시지 페이로드는 형식과 관계없이 최대 256KB의 텍스트를 포함할 수 있습니다. 페이로드 64KB '청크'당 1개의 요청으로 청구됩니다. 예를 들어, 256KB 페이로드를 사용하는 단일 API 호출은 4개의 요청으로 청구됩니다.
    • 메시지는 최대 10개 메시지 또는 256KB 배치로 송수신되거나 삭제될 수 있습니다. 배치 요금은 단일 메시지와 같습니다. 따라서 배치를 사용하면 SQS 비용을 좀 더 절약할 수 있습니다.
    • 256KB보다 큰 메시지를 전송하려면 Amazon S3에 메시지 페이로드를 저장하는 Java용 Amazon SQS 확장 클라이언트 라이브러리 사용하면 됩니다.  메시지 페이로드에 대한 참조는 SQS를 사용하여 전송됩니다.
    • 긴 폴링은 관계없는 폴링을 줄여 가능한 한 빨리 새 메시지를 받으면서 비용을 최소화하는 데 도움이 됩니다. 대기열이 비어 있는 경우 긴 폴링 요청은 다음 메시지가 도착할 때까지 최대 20초를 대기합니다. 긴 폴링 요청은 정기적인 요청과 비용이 같습니다.
    • 메시지는 최대 14일 동안 대기열에 보관됩니다.
    • 메시지는 동시에 전송하고 읽을 수 있습니다.
  • 메시지를 수신하면 처리하는 동안 '잠김' 상태가 되는데, 이를 통해 다른 컴퓨터에서 같은 메시지를 동시에 처리하지 못하게 됩니다. 메시지 처리에 실패하면 잠금이 해제되면서 메시지가 다시 처리 가능한 상태로 바뀝니다. 애플리케이션에서 메시지를 처리할 시간이 더 필요하면 ChangeMessageVisibility 작업을 통해 '잠김' 제한 시간을 동적으로 바꿀 수 있습니다.
  • 개발자는 Amazon SQS 대기열을 익명으로 또는 특정 AWS 계정과 안전하게 공유할 수 있습니다. IP 주소와 특정 시간으로 대기열 공유를 제한할 수도 있습니다.
  • 신규! 서버 측 암호화(SSE)는 AWS Key Management Service(AWS KMS)에서 관리하는 키를 사용하여 Amazon SQS 대기열의 메시지 콘텐츠를 보호합니다. SSE는 Amazon SQS가 메시지를 수신하자마자 이를 암호화합니다. 메시지는 암호화된 형태로 저장되며 Amazon SQS 는 권한이 있는 사용자에게 전송할 때만 메시지를 복호화합니다.
  • Amazon Simple Notification Service(SNS)와 결합하면 개발자가 동일한 메시지를 여러 SQS 표준 대기열에 '팬아웃'할 수 있습니다. 팬아웃의 경우, SNS 주제에 게시된 메시지가 여러 SQS 표준 대기열에 병렬로 분산됩니다.  개발자는 팬아웃을 사용하여 병렬 비동기 처리를 활용하는 애플리케이션을 구축할 수 있습니다.  예를 들어 개발자는 새로운 이미지가 업로드될 때마다 메시지를 주제에 게시할 수 있습니다.  독립적인 프로세스(별도 대기열에서 각각 읽기)는 썸네일을 생성하고, 이미지 인식을 수행하며, 이미지에 관한 메타데이터를 저장할 수 있습니다. 현재 SNS는 FIFO 순서를 지원하지 않으며 FIFO 대기열에 대한 팬아웃도 지원하지 않습니다.
  • 개발자는 중간에 걸린 메시지(소비자가 성공적으로 처리하지 못한 메시지)를 배달 못한 편지 대기열로 처리할 수 있습니다. 메시지에 대한 최대 수신 개수가 초과하면 해당 메시지는 원래 대기열에 연결된 배달 못한 편지 대기열(DLQ)로 이동됩니다. 개발자는 메시지 전달이 중단된 이유를 분석하고 이해하는 데 도움이 될 수 있는 DLQ에 대해 별도의 소비자 프로세스를 설정할 수 있습니다. DLQ는 원본 대기열(표준 또는 FIFO)과 같은 유형이어야 합니다.

Amazon SQS 메시지 대기열 서비스를 Redshift, DynamoDB, RDS, EC2, ECS, LambdaS3 등 다른 AWS 서비스와 함께 사용하면 분산 애플리케이션의 안정성과 확장성을 더욱 향상할 수 있습니다. 몇 가지 일반 설계 패턴은 다음과 같습니다.

  • 작업 대기열: 동일한 양의 작업 일부를 동시에 처리하지 못할 수 있는 분산 애플리케이션의 구성 요소를 분리합니다.
  • 버퍼 및 일괄 작업: 아키텍처에 확장성과 안정성을 더하고, 메시지를 손실하거나 지연 시간을 늘리지 않고 일시적인 볼륨 스파이크를 원활하게 처리합니다.
  • 요청 분산: 요청을 전송하여 대화식 요청 경로에서 속도가 느린 작업을 제거합니다.
  • 팬아웃: SQS를 Simple Notification Service(SNS)와 결합하여 메시지의 동일한 사본을 여러 대기열에 병렬로 전송합니다.
  • 우선순위: 별도의 대기열을 사용하여 작업의 우선순위를 지정합니다.
  • 확장성: 메시지 대기열에서 프로세스를 분리하므로, 다른 프로세스를 추가하기만 하면 손쉽게 메시지 송신이나 수신 속도를 높일 수 있습니다. 
  • 복원력: 시스템 일부에 장애가 발생하더라도 전체 시스템에는 영향을 주지 않습니다. 메시지 대기열에서 시스템의 구성 요소를 분리하므로 대기열에서 메시지를 읽어오는 프로세스가 실패한 경우에도, 시스템이 복구되면 처리되도록 메시지를 대기열에 추가할 수 있습니다.

이 서비스 사용은 Amazon Web Services 고객 계약에 따릅니다.