AWS SQS (Amazon Simple Queue Service)는 분산 시스템에서 메시지 기반 아키텍처를 구축하기 위해 사용되는 완전 관리형 메시지 대기열 서비스이다. SQS는 기본적으로 프로듀서와 컨슈머 간의 비동기식 통신을 용이하게 해주는 중개자 역할을 한다. 다른 컴포넌트나 서비스 간에 안정적으로 메시지를 교환하고 처리할 수 있는 기능을 제공한다.
AWS SQS의 주요 개념은 다음과 같다.
1.Queue(대기열): SQS는 메시지를 저장하는 데 사용되는 대기열이다. 대기열은 메시지의 저장소이며, 메시지가 비동기적으로 보내지고 처리된다. 각 대기열은 고유한 이름을 가지며, 여러 프로듀서 및 컨슈머가 동시에 대기열에 접근할 수 있다.
2.Message(메시지): 메시지는 프로듀서가 컨슈머에게 전송하는 데이터 단위다. 메시지는 최대 256KB까지의 페이로드를 가질 수 있다. SQS는 메시지의 정확한 순서를 보장하지는 않지만, 컨슈머가 메시지를 처리하는 순서를 제어할 수 있다.
SQS FIFO(선입선출)를 사용하면 메세지의 순서를 보장한다.
3.Producer(프로듀서): 프로듀서는 메시지를 SQS 대기열에 보내는 애플리케이션 또는 서비스다. 프로듀서는 메시지를 대기열에 전송하고, 필요에 따라 메시지 속성과 디바운스(딜레이) 시간을 설정할 수 있다.
4.Consumer(컨슈머): 컨슈머는 SQS 대기열에서 메시지를 받아 처리하는 애플리케이션 또는 서비스다. 컨슈머는 대기열에서 메시지를 읽고, 해당 메시지에 대한 작업을 수행한 후 메시지를 삭제한다. 여러 컨슈머가 대기열에서 동시에 작업을 처리할 수 있으며, SQS는 메시지의 가용성과 처리 성능을 보장한다.
AWS SQS를 사용하는 이유는 다음과 같다:
1.확장성: SQS는 분산 아키텍처에서 사용하기에 이상적이다. 여러 프로듀서와 컨슈머가 동시에 작업을 처리할 수 있으며, 대기열의 처리량은 요청 수에 따라 자동으로 조절된다.
2.신뢰성: SQS는 안정적인 메시지 전달을 보장한다. 메시지는 대기열에 저장되므로, 송신자와 수신자 간의 비동기 통신으로 인해 발생할 수 있는 장애나 지연 시간에 영향을 받지 않는다.
3.유연성: SQS는 다양한 애플리케이션 및 서비스 간에 메시지를 교환하기 위한 기능을 제공한다. 다른 AWS 서비스와 통합할 수 있으며, 다양한 프로그래밍 언어 및 플랫폼에서 사용할 수 있다.
SQS 프로듀서와 컨슈머의 파이썬 예제 코드를 살펴보겠다. 이 예제는 Boto3 라이브러리를 사용하여 AWS SQS에 액세스한다. 다음과 같은 명령어로 Boto3 설치를 실행할 수 있다.
Boto3 설치:
pip install boto3 |
프로듀서 예제 코드:
import boto3 # SQS 큐 URL queue_url = 'YOUR_QUEUE_URL' # SQS 클라이언트 생성 sqs = boto3.client('sqs') # 메시지 전송 response = sqs.send_message( QueueUrl=queue_url, MessageBody='Hello, SQS!' ) # 응답 출력 print(response['MessageId']) |
위의 코드에서 'YOUR_QUEUE_URL' 부분에는 실제로 사용하는 SQS 대기열의 URL을 입력해야 한디. aws 웹콘솔화면에서 SQS를 생성 후 생성된 URL를 입력하면 된다.프로듀서는 send_message 메서드를 사용하여 메시지를 대기열로 전송한다. 메시지 본문은 'Hello, SQS!'로 설정되어 있다. 응답에서 'MessageId'를 통해 전송된 메시지의 고유 식별자를 얻을 수 있다.
컨슈머 예제 코드:
import boto3 # SQS 큐 URL queue_url = 'YOUR_QUEUE_URL' # SQS 클라이언트 생성 sqs = boto3.client('sqs') # 메시지 수신 response = sqs.receive_message( QueueUrl=queue_url, MaxNumberOfMessages=1 ) # 수신된 메시지 처리 if 'Messages' in response: message = response['Messages'][0] receipt_handle = message['ReceiptHandle'] # 메시지 처리 작업 수행 print('Received message:', message['Body']) # 메시지 삭제 sqs.delete_message( QueueUrl=queue_url, ReceiptHandle=receipt_handle ) else: print('No messages in the queue.') |
위의 코드에서도 'YOUR_QUEUE_URL' 부분에 실제로 사용하는 SQS 대기열의 URL을 입력해야 한다. 컨슈머는receive_message 메서드를 사용하여 대기열에서 메시지를 가져온다. 응답에서 'Messages' 키를 확인하여 수신된 메시지가 있는지 확인한다. 수신된 메시지가 있는 경우, 'Body' 키를 통해 메시지의 본문을 얻을 수 있다. 메시지 처리 작업 후 delete_message 메서드를 사용하여 메시지를 대기열에서 삭제한다.
간단한예제라 실제 애플리케이션에서는 더 많은 처리 로직과 예외 처리가 필요할 수 있다. 또한, 프로듀서와 컨슈머는 다른 애플리케이션 또는 서비스로 분리될 수 있으며, 동일한 큐를 공유하여 메시지를 교환할 수 있다.
'클라우드 서비스 > AWS' 카테고리의 다른 글
AWS EC2 인스턴스 구매옵션 (0) | 2023.09.19 |
---|---|
AWS SAA-C03 합격 후기, 팁 (11) | 2023.09.17 |
AWS CloudFront란? (0) | 2023.06.23 |
댓글