Amazon SQS란? 비동기 통신과 큐 개념 정리
# Amazon SQS
SQS는 Simple Queue Service로, 비동기 통신 방식으로 애플리케이션을 분리할 수 있게 하는 서비스이다.
🧐 Queue란 뭘까?
Queue는 메시지가 쌓여있는 대기열이라고 생각하면 된다.
하나 또는 여러개의 프로듀서는 메시지를 만들고 SQS 대기열로 메시지를 전송할 수 있다. 전송된 메시지는 Queue에 쌓인다.
Queue에 저장된 메시지는 컨슈머가 폴링하여 읽을 수 있다. 컨슈머 또한 하나이거나 여러 개일 수도 있다.
🧐 Polling이란?
폴링은 메시지를 읽는 방식 중 하나로, 컨슈머가 직접 메시지를 가져오는 방식이다. 컨슈머는 SQS에 저장된 메시지를 폴링해오는데, 저장된 메시지가 없을 때에 폴링을 하면 빈 데이터를 가져오게 된다. SQS에서는 폴링 요청 수에 따라 비용이 청구되니, 폴링 횟수를 적절하게 선택할 필요가 있다.
이미 한 컨슈머에 의해 폴링된 메시지가 또 다른 컨슈머에 의해 폴링되어, 중복 처리 되는 경우가 발생할 수도 있다. 이를 방지하기 위해 한 번 폴링된 메시지를 일정 시간동안 보이지 않게 하거나, 삭제해야 한다.
메시지의 기본 보유 기한은 4일이고, 최대 14일까지 유지할 수 있다. 그 이상으로 메시지를 가지고 있고 싶다면 백업 처리 해야 한다.
# SQS를 사용하여 애플리케이션 분리
예를 들어 어떤 영상을 처리하라는 요청이 들어왔을 때를 생각해보자. 해당 요청을 영상 애플리케이션으로 직접 전송하지 않고, 메시지를 SQS 대기열에 보낼 수 있다. 영상 애플리케이션의 인스턴스가 대기열에서 메시지를 읽어오고 작업을 수행할 수 있다.
웹 서버와 영상 처리가 SQS 대기열에 의해 두 계층으로 완전히 분리되고, 각 애플리케이션이 독립적으로 조정될 수 있다. 이로 인해 비용 효율과 규모 조정 문제 등이 해결된다.
# FIFO
SQS의 대기열은 FIFO 방식을 따를 수 있다. First In First Out, 즉 선입선출을 뜻하며, 대기열 안에 메시지를 들어온 순서대로 배열한다. FIFO 대기열을 사용할 경우, 가장 먼저 들어온 메시지가 가장 먼저 컨슈머에 의해 처리될 것이다.