AWS

SQS를 이용한 사용자 우선순위 처리 아키텍처 설계

heesoohi 2025. 5. 17. 16:47

서비스에서 유료 회원(프리미엄 사용자)의 요청을 무료 회원보다 우선 처리해야 하는 상황에서, AWS SQS를 활용해 어떤 방식으로 아키텍처를 구성할 수 있을지에 대해 학습하고 정리해본다.

 

1. 문제 상황 가정

웹사이트에서 프리미엄 사용자와 무료 사용자 모두 사진을 업로드하고, 이를 비디오로 변환해 다운로드하는 기능을 제공한다고 가정한다. 모든 요청은 SQS 대기열을 통해 EC2 인스턴스에서 처리된다. 이때 프리미엄 사용자의 요청을 무료 사용자보다 먼저 처리해야 하는 요구사항이 존재한다.

 

2. 단일 SQS의 한계

프리미엄 사용자와 무료 사용자의 요청이 단일 SQS 대기열에 저장되고, EC2 인스턴스가 이를 처리하는 구조같은 경우 SQS가 메시지의 우선순위를 자체적으로 지원하지 않기 때문에, 프리미엄 요청을 먼저 처리할 수 있는 방법이 없다.

 

3. 개선 구조 설계

이를 해결하기 위해 다음과 같이 대기열을 분리하는 구조를 설계할 수 있다.

  • Premium Queue: 프리미엄 요청 전용 SQS
  • Free Queue: 무료 요청 전용 SQS

EC2 인스턴스의 폴링 로직은 다음과 같이 구성할 수 있다.

  1. 우선 Premium Queue에서 메시지를 폴링한다.
  2. Premium Queue가 비어 있는 경우에만 Free Queue에서 메시지를 폴링한다.

이 방식은 프리미엄 요청을 항상 우선 처리하도록 한다.

 

4. 추가 고려 사항

프리미엄 사용자가 많은 경우, Premium Queue가 비는 일이 드물 수 있다. 이럴 경우 Free Queue는 계속해서 처리되지 않아, 무료 사용자 경험이 크게 저하될 수 있다. 이런 상황에서는 다음과 같은 스케일링 전략도 함께 사용할 수 있을것이다.

  • 큐별 인스턴스 그룹 분리
    • 프리미엄 전용 인스턴스 그룹과 무료 전용 인스턴스 그룹을 구성
  • Auto Scaling 정책 차등 적용
    • 프리미엄 큐는 빠르게 확장
    • 무료 큐는 느리게 확장하거나, 리소스 여유가 있을 때만 처리

이런 전략을 통해 프리미엄 처리 우선순위를 유지하면서도, 무료 요청도 최소한으로나마 지속적으로 처리할 수 있도록 한다.

 

 

이번 학습을 통해 SQS는 기본적으로 메시지 우선순위를 제공하지 않기 때문에, 큐 분리 + 애플리케이션 로직 + 스케일링 전략을 함께 구성해야 한다는 점을 이해하게 되었다.