비동기 처리 수행에서 폴링 요청의 빈 응답(null response)을 최소화
2025. 3. 22. 11:17ㆍaws.cloud
반응형
Amazon SQS 를 사용하여 비동기 처리를 수행하는데 폴링 요청의 빈 응답(null response)을 최소화하는 방법
1. 기본 개념: 폴링(Polling)과 빈 응답 문제
Amazon SQS에서 메시지를 가져오는 방법에는 Short Polling(짧은 폴링) 과 Long Polling(긴 폴링) 이 있다.
- Short Polling(기본 설정)
- 큐에서 메시지를 가져올 때 즉시 응답을 반환한다.
- 큐에 메시지가 없으면 빈 응답 을 반환한다.
- 여러 번 요청해도 메시지가 없는 경우 불필요한 API 호출이 증가 한다.
- Long Polling(권장 방식)
- 메시지가 도착할 때까지 대기 한 후 응답을 반환한다.
- 설정된 시간(최대 20초) 동안 대기하며, 그동안 메시지가 도착하면 즉시 응답한다.
- 메시지가 없으면 대기 시간이 끝난 후 빈 응답을 반환한다.
- 빈 응답을 줄이고 API 호출 횟수를 줄여 비용을 절감 할 수 있다.
2. 해결 방법: Long Polling 활성화
✅ Long Polling을 활성화하는 방법
(1) AWS CLI에서 설정
aws sqs set-queue-attributes --queue-url <QUEUE_URL> \
--attributes ReceiveMessageWaitTimeSeconds=20
- ReceiveMessageWaitTimeSeconds 값을 최대 20초로 설정 하면 Long Polling이 활성화된다.
- 이렇게 하면 SQS는 메시지가 있을 때까지 최대 20초 동안 대기한 후 응답을 반환한다.
(2) AWS SDK에서 설정 (예: Python Boto3)
import boto3
sqs = boto3.client('sqs')
response = sqs.receive_message(
QueueUrl='<QUEUE_URL>',
MaxNumberOfMessages=10,
WaitTimeSeconds=20 # Long Polling 활성화
)
- WaitTimeSeconds=20 을 설정하면 Long Polling을 사용하여 빈 응답을 줄일 수 있다.
- MaxNumberOfMessages=10 을 설정하면 최대 10개의 메시지를 한 번에 가져와 요청 수를 최적화 할 수 있다.
3. 추가적인 최적화 방법
✅ 배치 크기 조정 (Batch Size)
한 번에 처리할 메시지 개수를 늘리면 폴링 요청 수를 줄일 수 있다.
- 기본적으로 MaxNumberOfMessages 값은 1 이지만, 최대 10개까지 요청 가능 하다.
- MaxNumberOfMessages=10 으로 설정하면 한 번의 폴링 요청으로 최대 10개의 메시지를 가져와 API 호출 횟수를 줄일 수 있다.
✅ 메시지 가시성 시간(Visibility Timeout) 조정
- 메시지를 가져온 후, 처리 중인 메시지가 다시 읽히지 않도록 Visibility Timeout을 조정 해야 한다.
- Visibility Timeout을 너무 짧게 설정하면, 처리가 끝나지 않은 메시지가 다시 큐에 나타날 수 있다.
- 적절한 값(예: 30초 이상)으로 설정하면 중복 처리를 방지 할 수 있다.
aws sqs set-queue-attributes --queue-url <QUEUE_URL> \
--attributes VisibilityTimeout=30
반응형
'aws.cloud' 카테고리의 다른 글
CRM 애플리케이션과 EC2 장애 시 영향 (0) | 2025.03.22 |
---|---|
Express.js | Single Page Application (SPA) (1) | 2024.10.20 |
HTTP 서버를 만드는 코드 (0) | 2024.09.05 |
클라우드 컴퓨팅의 5계층 모델 (0) | 2024.07.29 |
클라우드 컴퓨팅의 구성 요소 (0) | 2024.07.29 |