본문 바로가기
Amazon Web Services

AWS SQS(Simple Queue Service) Polling 방식

sstdio.h·2017년 11월 17일·조회 2,899

1. 개요

SQS의 Polling 방식에 대한 내용이다. Amazon SQS에서 메시지를 가져올 때는 ReceiveMessage 요청을 보내며, 이때 대기 시간 설정에 따라 Short Polling과 Long Polling으로 동작이 나뉜다.

  • Short Polling
  • Long Polling

2. Polling

서버의 업데이트 사항을 가장 손쉽게 받는 방법은 클라이언트가 서버를 계속 확인하는 것이다. 웹 애플리케이션에서는 XHR 등을 사용해 주기적으로 백그라운드 요청을 보낼 수 있고, SQS에서는 소비자가 큐에 ReceiveMessage 요청을 반복해서 보내 메시지를 확인한다.

Polling 방식은 구현이 단순하지만, 메시지가 없을 때도 요청이 발생할 수 있다. 따라서 요청이 즉시 반환되는지, 일정 시간 동안 메시지를 기다리는지에 따라 효율이 달라진다.


3. Short Polling

SQS는 기본적으로 Short Polling 방식을 사용할 수 있다. Short Polling에서는 ReceiveMessage 요청을 보내면 SQS가 일부 서버만 샘플링해서 메시지를 찾고, 메시지가 없으면 바로 빈 응답을 반환할 수 있다.

Short Polling은 ReceiveMessage 호출의 WaitTimeSeconds 파라미터 설정에 따른다.

  • ReceiveMessage 호출에서 WaitTimeSeconds = 0으로 설정한 경우
  • ReceiveMessage 호출에서 WaitTimeSeconds를 설정하지 않았고, 큐 설정인 ReceiveMessageWaitTimeSeconds가 0인 경우

이 방식은 응답이 빠르다는 장점이 있지만, 큐에 메시지가 거의 없을 때 빈 응답이 많아질 수 있다. 빈 응답도 요청이므로 불필요한 호출이 늘어날 수 있다는 점을 고려해야 한다.


4. Long Polling

Long Polling은 메시지가 없을 때 즉시 빈 응답을 반환하지 않고, 설정한 시간 동안 메시지가 도착하기를 기다리는 방식이다. SQS에서는 WaitTimeSeconds 값을 0보다 크게 설정하면 Long Polling으로 동작한다.

Long Polling은 Amazon 콘솔을 통해 큐 설정에서 활성화할 수 있고, 애플리케이션에서 ReceiveMessage 호출 시 WaitTimeSeconds를 지정해서 사용할 수도 있다. 큐의 기본 대기 시간은 ReceiveMessageWaitTimeSeconds 속성으로 설정한다.

이 방식은 빈 응답을 줄이고, 메시지가 도착했을 때 더 효율적으로 소비할 수 있다는 장점이 있다. 일반적으로 메시지가 항상 많은 큐가 아니라면 Short Polling보다 Long Polling이 요청 수를 줄이는 데 유리하다.

ReceiveMessage
WaitTimeSeconds = 10

위와 같이 설정하면 메시지가 없을 경우 최대 10초 동안 대기한다. 그 사이 메시지가 도착하면 응답이 반환되고, 끝까지 메시지가 없으면 빈 응답이 반환된다.


5. 간단한 확인 방법

동작 차이는 큐에 메시지가 없는 상태에서 확인해보면 쉽다. Short Polling은 요청을 보내면 대부분 즉시 빈 응답이 돌아오고, Long Polling은 설정한 대기 시간에 가깝게 기다린 뒤 빈 응답이 돌아온다.

  • 큐에 메시지가 없는 상태에서 WaitTimeSeconds = 0으로 호출한다.
  • 같은 큐에서 WaitTimeSeconds를 0보다 큰 값으로 설정해 호출한다.
  • 응답이 돌아오는 시간을 비교한다.

실제 애플리케이션에서는 메시지 처리 시간, Visibility Timeout, 재시도 정책도 함께 고려해야 하지만, Polling 방식 자체의 차이는 WaitTimeSeconds 설정으로 이해할 수 있다.

관련 글

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.