SQS

은채의 성장통·2025년 2월 19일
0

AWS

목록 보기
64/79

Amazon SQS: 확장성과 안정성을 높이는 메시지 큐 서비스

대규모 트래픽을 처리하는 애플리케이션에서 가장 중요한 것은 안정성, 확장성, 그리고 비동기 처리이다.

Amazon SQS(Simple Queue Service)는 생산자(Producer)와 소비자(Consumer) 간의 비동기 메시지 큐 역할을 수행하며, 트래픽의 급증에도 안정적인 시스템 운영을 가능하게 한다.

이 글에서는 SQS의 주요 개념과 활용 방법을 살펴보고, 실제 애플리케이션에서 어떻게 적용할 수 있는지 알아보겠다.


1. SQS란 무엇인가?

Amazon SQS는 AWS에서 제공하는 완전 관리형 메시지 큐 서비스로,

마이크로서비스, 분산 시스템, 서버리스 애플리케이션 등에서 비동기식 메시지 처리를 위해 사용된다.

SQS를 사용하면 시스템 구성 요소 간의 결합도를 낮추고, 유연하고 확장 가능한 시스템을 구축할 수 있다.

SQS의 핵심 기능

무제한 확장성: 이론적으로 무제한 처리량을 가질 수 있으며, 트래픽이 증가해도 대기열이 자동으로 확장됨.

비동기 메시징: 생산자(Producer)가 메시지를 대기열에 넣고, 소비자(Consumer)가 필요할 때 메시지를 가져가서 처리하는 방식.

버퍼 역할 수행: 트래픽 급증 시에도 서버 과부하를 방지하고, 요청을 안정적으로 처리할 수 있도록 지원.

메시지 보존 기간: 메시지는 기본 4일간 유지되며, 최대 14일까지 연장 가능.

유연한 메시지 처리 방식: EC2 인스턴스, Lambda, 컨테이너 서비스 등 다양한 방식으로 메시지를 처리 가능.


2. SQS의 주요 개념과 설정

① 메시지 큐의 기본 구조

SQS는 생산자(Producer)가 메시지를 대기열(Queue)에 넣고, 소비자(Consumer)가 메시지를 가져가서 처리하는 방식으로 동작한다.

이는 비동기 방식으로 작동하며, 메시지가 처리될 때까지 대기열에 남아 있게 된다.

📌 메시지 흐름 예시

  1. 생산자가 SQS 대기열로 메시지를 전송.
  2. 소비자는 SQS 대기열에서 메시지를 가져와 처리.
  3. 메시지 처리가 완료되면, 소비자가 메시지를 삭제하여 중복 처리를 방지.

!https://docs.aws.amazon.com/images/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-architecture.png


② SQS 가시성 초과(Visibility Timeout)

SQS에서 소비자가 메시지를 가져가면, 메시지는 일정 시간 동안 다른 소비자에게 보이지 않게 된다.

이 시간을 가시성 제한 시간(Visibility Timeout)이라고 하며, 기본값은 30초이다.

왜 필요할까?

  • 메시지가 소비자에게 전달된 후 일정 시간이 지나야 다른 소비자가 동일한 메시지를 가져가지 않도록 하기 위함.
  • 만약 메시지가 가시성 제한 시간 내에 처리되지 않으면, 다시 대기열에 나타나 다른 소비자가 중복 처리할 가능성이 생긴다.

해결 방법

  • 적절한 가시성 제한 시간 설정: 작업이 완료될 수 있는 시간보다 약간 긴 시간이 적절함.
  • ChangeMessageVisibility API 사용: 메시지 처리가 오래 걸릴 경우 동적으로 가시성 제한 시간을 연장 가능.

③ 롱 폴링(Long Polling) – API 호출 비용 절감

일반적으로 소비자는 SQS에서 메시지를 가져오기 위해 폴링(Polling, 주기적인 요청)을 수행한다.

하지만 대기열에 메시지가 없을 경우 불필요한 API 호출이 증가하게 된다.

롱 폴링이란?

  • 소비자가 SQS에서 메시지를 가져오려 할 때, 대기열에 메시지가 없으면 일정 시간(1~20초) 동안 대기 후 응답하는 방식.
  • 불필요한 API 호출을 줄이고, 비용 절감 및 성능 최적화 가능.

롱 폴링 vs. 짧은 폴링

짧은 폴링 (Short Polling)롱 폴링 (Long Polling)
메시지 검색즉시 응답메시지가 없으면 일정 시간 대기
비용호출 횟수 많아 비용 증가호출 횟수 줄어 비용 절감
성능빠른 응답 가능하지만 오버헤드 존재대기 시간이 있지만 더 효율적

④ FIFO 대기열 (First-In-First-Out)

일반적인 SQS 대기열(Standard Queue)은 순서 보장이 안 되며, 중복 메시지가 발생할 수 있다.

하지만 FIFO Queue(선입선출 큐)는 메시지 순서를 엄격히 보장하며, 중복 방지 기능도 제공한다.

FIFO 대기열 특징

  • 메시지는 생산된 순서대로 소비자에게 전달됨.
  • 메시지 중복을 방지하기 위해 중복 제거(Deduplication) 기능 제공.
  • 처리량 제한이 존재(일반적으로 초당 300개 메시지).

📌 사용 사례

  • 금융 거래 시스템
  • 티켓 예약 시스템
  • 주문 처리 시스템

3. SQS와 오토스케일링(Auto Scaling) 연계

SQS + Auto Scaling 활용 사례

트래픽이 급증하는 환경에서는 서버 리소스를 자동으로 확장할 수 있는 메커니즘이 필요하다.

이를 위해 SQS와 Auto Scaling을 연계하면 다음과 같은 이점이 있다.

사용 시나리오

  • 대규모 이벤트: 대량의 요청이 발생할 때 즉각적으로 대응 가능.
  • 데이터베이스 보호: RDS 또는 Aurora와 같은 DB가 오버로드되지 않도록 함.
  • 확장성 및 유연성 확보: 필요한 만큼 인스턴스를 자동으로 확장/축소.

구현 방법

  1. CloudWatch를 이용해 SQS 대기열 길이 모니터링
    • 대기열 길이가 일정 임계치를 초과하면 경고 발생.
  2. CloudWatch 알람이 Auto Scaling 그룹과 연동
    • 인스턴스 추가 또는 제거가 자동으로 이루어짐.
  3. Auto Scaling 그룹이 새로운 소비자를 추가하여 처리량 증가

📌 예제

  • 고객이 온라인 주문을 하면 SQS 대기열에 메시지가 추가됨.
  • 주문량이 급증하면 CloudWatch가 대기열 길이를 모니터링하고, Auto Scaling 그룹이 EC2 인스턴스를 추가함.
  • 주문이 처리되면 메시지는 소비되고 삭제됨, 이후 EC2 인스턴스는 다시 줄어듦.

4. SQS 보안 – 안전한 메시징 시스템 구축

SQS는 강력한 보안 옵션을 제공하며, 주요 보호 기능은 다음과 같다.

1) 메시지 암호화

  • KMS(Key Management Service) 암호화 지원.
  • 클라이언트 측에서 추가적인 AES-256 암호화 가능.

2) IAM 권한 설정

  • 특정 사용자/서비스만 SQS에 접근하도록 IAM 정책을 적용.
  • SQS 액세스 정책을 활용하여 세부 권한 설정 가능.

3) 네트워크 보호

  • VPC 엔드포인트를 사용하여 SQS를 안전하게 운영 가능.
  • 외부 접근을 차단하고 내부 네트워크에서만 사용 가능.

결론: 확장성과 안정성을 높이는 SQS 활용법

Amazon SQS는 확장 가능하고 안정적인 메시지 큐 시스템을 구축하는 데 필수적인 서비스이다.

오토스케일링과의 결합, 가시성 초과 처리, 롱 폴링 최적화 등의 기능을 활용하면

대량 트래픽을 효율적으로 처리할 수 있으며, 분산 시스템과 마이크로서비스 환경에서 중요한 역할을 수행할 수 있다.

profile
인생 별거 없어

0개의 댓글