Amazon Simple Queue Service(Amazon SQS)는 컴퓨터끼리 주고 받는 메시지를 저장하기 위한 안정적이고 확장성이 뛰어난 호스팅 대기열을 제공합니다. Amazon SQS를 이용하여 개발자는 모든 구성 요소를 항상 대기 상태로 두거나 메시지를 분실할 염려 없이, 서로 다른 작업을 수행하는 분산된 애플리케이션 구성 요소 간에 데이터를 간단히 이동할 수 있습니다. Amazon SQS는 Amazon Elastic Compute Cloud(Amazon EC2) 및 기타 AWS 인프라 웹 서비스와 긴밀하게 연계되어 작동하기 때문에 자동화된 워크플로 구축도 쉬워집니다.
Amazon SQS는 Amazon의 웹 규모 메시징 인프라를 웹 서비스로 사용하는 것이기 때문에 인터넷에 연결된 모든 컴퓨터에서 특정 소프트웨어를 설치하거나 방화벽을 따로 구성하지 않고도 메시지를 추가하거나 읽을 수 있습니다. Amazon SQS를 사용하는 애플리케이션의 구성 요소는 각자 독립적으로 실행될 수 있어, 같은 기술로 개발된 같은 네트워크에 존재하거나 동시에 실행될 필요가 없습니다.
개발자는 메시지 수에 제한이 없는 Amazon SQS 대기열을 무제한으로 생성할 수 있습니다.
대기열은 어느 지역에나 생성할 수 있습니다.
메시지 본문은 형식에 관계없이 최대 64KB까지 작성할 수 있습니다.
메시지는 최대 10개 메시지 또는 64KB 크기 단위로 송수신되거나 삭제될 수 있습니다. 일괄 처리에 대한 요금은 단일 메시지와 같습니다. 따라서 일괄 처리를 사용하면 비용이 적게 듭니다.
메시지는 최대 14일 동안 대기열에 보관됩니다.
메시지는 동시에 전송하고 읽을 수 있습니다.
메시지를 수신하면 처리하는 동안 "잠김" 상태가 되는데, 다른 컴퓨터에서 동시에 메시지를 처리하지 못하도록 하기 위함입니다. 메시지 처리에 실패하면 잠금이 해제되면서 메시지가 다시 처리 가능한 상태로 바뀝니다. 애플리케이션에서 메시지를 처리할 시간이 더 필요하면 ChangeMessageVisibility 작업을 통해 "잠김" 제한 시간을 동적으로 바꿀 수 있습니다.
개발자는 다른 사람과 Amazon SQS 대기열을 안전하게 공유할 수 있습니다. 대기열은 다른 AWS 계정 및 익명 사용자하고도 공유되며, IP 주소와 특정 시간으로 대기열 공유를 제한할 수도 있습니다.
Amazon Simple Notification Service(SNS)를 함께 사용하면 동일한 메시지를 여러 SQS 대기열에 병렬로 '팬아웃'할 수 있습니다. 개발자가 여러 패스에서 메시지를 처리하는 경우 팬아웃은 특정 단계에서의 병목 현상으로 인한 지연을 줄여 좀 더 신속하게 메시지를 처리할 수 있도록 합니다. 예를 들어 팬아웃은 또한 다양한 데이터베이스에서 중복 메시지를 더 쉽게 기록할 수 있게 합니다.
Amazon SQS는 자체 개발 메시징 시스템의 복잡성 또는 라이선스 또는 호스팅 시스템의 운용비를 뛰어넘는 상당한 이점을 지니고 있습니다.
안정성 – Amazon SQS는 Amazon의 고가용성 데이터 센터에서 실행되므로 애플리케이션에서 필요하면 언제든지 대기열을 사용할 수 있습니다. 메시지가 유실되거나 손상되지 않도록 모든 메시지는 여러 서버와 데이터 센터에 걸쳐 중복 저장됩니다.
간편함 – 개발자는 CreateQueue, SendMessage, ReceiveMessage, ChangeMessageVisibility 및 DeleteMessage의 5개 API만으로 Amazon SQS를 시작할 수 있습니다. 고급 기능을 가진 추가 API도 사용할 수 있습니다.
확장성 – Amazon SQS는 무제한의 서비스가 언제든 무제한의 메시지를 읽고 쓸 수 있도록 설계되었습니다.
보안 – 인증 메커니즘이 갖추어져 있어 Amazon SQS 대기열에 저장된 메시지가 무단 액세스로부터 확실하게 보호됩니다.
저렴한 비용 – 사전 확약금이나 고정비가 없습니다. Amazon SQS를 통한 메시지 전송 비용은 요청당 처리 비용과 데이터 전송 비용뿐으로 저렴합니다.
Amazon SQS는 애플리케이션이 좀 더 유연하고 확장 가능할 수 있도록 Amazon EC2 및 Amazon S3, Amazon SimpleDB와 함께 사용할 수 있습니다. 일반 사용 사례는 통합적이고 자동화된 워크플로를 만드는 것입니다. 이 경우 여러 구성 요소 또는 모듈이 서로 통신해야 하지만 같은 양의 작업을 동시에 처리할 수는 없습니다. 이 경우 SQS 대기열은 메시지를 전달합니다. 메시지는 Amazon EC2 인스턴스에서 실행되는 사용자의 애플리케이션별로 순서에 따라 처리됩니다. Amazon EC2 인스턴스는 대기열을 읽고, 작업을 처리할 수 있으며, 다른 애플리케이션에서 추가로 처리할 수 있도록 다른 SQS 대기열에 결과를 메시지로 게시할 수 있습니다. Amazon EC2를 이용하면 애플리케이션을 역동적으로 확장 및 축소할 수 있기 때문에 애플리케이션 개발자들은 컴퓨팅 인스턴스의 숫자를 SQS 대기열 작업의 양을 바탕으로 다양하게 설정할 수 있습니다. 따라서 작업을 시기적절하게 실행할 수 있습니다.
예를 들어, 여기에서는 비디오 코드 변환 웹 사이트에서 Amazon EC2, Amazon SQS, Amazon S3, Amazon SimpleDB를 함께 사용하는 방법을 알아봅니다. 최종 사용자가 코드 변환할 동영상을 웹 사이트에 제출합니다. 동영상은 Amazon S3에 저장되며 메시지(“요청 메시지”)가 Amazon SQS 대기열(“수신 대기열”)에 배치됩니다. 이때 동영상에 대한 포인터 및 대상 동영상 형식에 대한 포인터가 메시지 내에 포함됩니다. 그러면 Amazon EC2 인스턴스에서 실행되는 코드 변환 엔진이 수신 대기열에서 요청 메시지를 읽고, 지시자를 사용하여 Amazon S3에서 해당 동영상을 검색해 대상 형식으로 코드를 변환합니다. 변환된 동영상은 Amazon S3로 반환되고 다른 메시지(“응답 메시지”)는 변환된 동영상 포인터와 함께 기타 Amazon SQS 대기열(“발신 대기열”)에 배치됩니다. 동시에 쿼리가 간편하게 이루어지도록 동영상에 대한 메타데이터(예: 형식, 생성 날짜 및 길이)를 Amazon SimpleDB로색인 처리될 수 있습니다. 이 전체 워크플로 동안 전용 Amazon EC2 인스턴스가 수신 대기열을 꾸준히 모니터링하다가 수신 대기열의 메시지 수를 기준으로 고객의 응답 시간 요건에 맞게 코드 변환을 처리하는 Amazon EC2 인스턴스 수를 동적으로 조정해 줍니다.
아래의 요금은 Amazon SQS에서 "수신"하거나 "전송"된 데이터를 기준으로 책정된 것입니다.
데이터 "수신" 및 "전송"은 Amazon SQS에서 데이터를 수신하고 전송하는 것을 말합니다. 같은 지역에 있는 Amazon SQS와 Amazon EC2 간의 테이터 전송 요금은 무료(GB당 0.00 USD)입니다. 서로 다른 지역에 있는 Amazon SQS와 Amazon EC2 간의 테이터 전송 요금은 양쪽의 인터넷 데이터 전송 요금에 따라 과금됩니다.
* 무료 사용량은 모든 지역에서 매월 계산되어 청구서에 자동으로 적용됩니다. 무료 사용량은 누적되지 않습니다. **AWS의 프리 티어의 일환으로, 신규 AWS 고객은 모든 AWS 서비스를 합산해 1년 동안 매달 15GB의 무료 데이터 전송 혜택을 받게 됩니다. *** 데이터 전송량은 Amazon EC2, Amazon EBS, Amazon S3, Amazon Glacier, Amazon RDS, Amazon SimpleDB, Amazon SQS, Amazon SNS, Amazon DynamoDB, AWS Storage Gateway 및 Amazon VPC 전체에 걸친 아웃바운드 데이터 전송량을 합하여 계산합니다.
Amazon SQS는 AWS Management Console을 통해 쉽게 액세스할 수 있습니다. 사용자는 포인트 앤 클릭 방식으로 이 웹 기반 인터페이스를 이용해서 Amazon SQS를 설치하고 관리합니다.
기본 대기열 요청
Amazon SQS는 사용하기 쉽고 매우 유연한 인터페이스를 제공합니다. 또한 다음과 같은 요청을 제공합니다.
CreateQueue: AWS 계정을 이용하기 위한 대기열 생성
ListQueues: 기존 대기열 나열
DeleteQueue: 대기열 중 하나 삭제
SendMessage: 지정된 대기열에 메시지 추가
SendMessageBatch: 지정된 대기열에 여러 메시지 추가
ReceiveMessage: 지정된 대기열로부터 하나 이상의 메시지 반환
ChangeMessageVisibility: 이전에 수신된 메시지의 제한 시간 초과 변경
ChangeMessageVisibilityBatch: 이전에 수신된 여러 메시지의 제한 시간 초과 변경
DeleteMessage: 지정된 대기열로부터 이전에 수신된 메시지 제거
DeleteMessageBatch: 지정된 대기열로부터 이전에 수신된 여러 메시지 제거
SetQueueAttributes: 대기열 설정(예: 메시지를 다시 읽을 수 없도록 메시지 확인 후 잠그기까지의 시간 설정) 제어
GetQueueAttributes: 대기열에 대한 정보(예: 대기열에 있는 메시지 수) 확인
GetQueueUrl: 대기열 URL 확인
AddPermission: 지정된 대기열에 대한 대기열 공유에 다른 AWS 계정 추가
RemovePermission: 지정된 대기열에 대한 대기열 공유에서 AWS 계정 제거
Amazon SQS 메시지 수명 주기
Amazon SQS에 저장된 메시지에는 관리가 용이하면서도 모든 메시지가 처리되도록 보장하는 수명 주기가 있습니다.
메시지를 보내야 하는 시스템에서는 Amazon SQS 대기열을 찾아 새 메시지를 추가하기 위해 SendMessage를 사용합니다.
메시지를 처리하는 다른 시스템은 처리하기 위한 메시지가 더 많이 필요해지므로 ReceiveMessage를 호출하고, 이로 인해 메시지가 반환됩니다.
ReceiveMessage에 의해 메시지가 반환되면 해당 메시지는 제한 시간이 초과될 때까지 기타 다른 ReceiveMessage에 의해서 반환되지 않습니다. 이는 다수의 컴퓨터가 동일한 메시지를 동시에 처리하는 것을 방지합니다.
메시지를 처리하는 시스템에서 메시지 작업을 성공적으로 완료하면 해당 시스템에서는 모든 시스템에서 해당 메시지를 다시는 처리하지 않도록 DeleteMessage를 호출하여 메시지를 대기열에서 제거합니다. 시스템에서 메시지 처리에 실패하는 경우, 제한 시간을 초과하는 즉시 ReceiveMessage를 통해 해당 메시지가 처리됩니다.
Amazon SQS의 현재 버전은 WSDL 버전 2011-10-01입니다. 이전 버전은 WSDL 버전 2009-02-01로, WSDL 2008-01-01과 호환됩니다. 2008년 2월 공지한 바와 같이 WSDL 버전 2007-05-01 및 2006-04-01은 더 이상 사용하지 않게 되었습니다. 신규 사용자는 위의 구 버전을 사용할 수 없습니다. 대신 사용 중인 애플리케이션을 가능한 한 신속히 지원 가능한 Amazon SQS WSDL 버전으로 마이그레이션할 것을 권해드립니다.
일부 라이브러리 또는 애플리케이션은 해당 서비스(2007-05-01 또는 2006-04-01)의 이전 버전에서도 구축될 수 있음을 알려드립니다. Amazon SQS를 사용하는 라이브러리 또는 애플리케이션을 사용하는 경우, 해당 서비스의 어떤 버전을 사용하고 있는지 서비스 공급자에게 문의하시기 바랍니다.