본문 바로가기

스터디/인프라

Amazon SQS 사용법

AWS SQS 다루기

이번 글에서는 SQS 대한 사용법간단한 주의사항에 대해 다뤄볼 것이다.

SQS란 ?

Simple Queue Service(sqs)분산 시스템를 구성할때 시스템간 메세지를 주고 받을 수 있는 메세지통으로 생각하면 된다.

SQS전송,수신,삭제 3가지 기능을 제공한다

간단한 아키텍처를 보고 SQS의 기능을 이해해보자..

SQS 기본 아키텍쳐

  • 메시지 전송을 하면 Queue가 수신한다.
  • 수신된 메시지를 처리하는 Worker가 존재한다.
  • Worker에서 수신된 메시지를 처리완료하면 방금 수신받은 메시지를 삭제해달라는 요청을 날린다.

위 설명은 기본적으로 분산시스템에서 Queue를 사용하는 방식이다.

위와 같이 요청 받은 Server가 바로 성공 실패 여부를 알려줄 필요가 없을때 위와 같은 아키텍쳐로 서버를 구성할 수 있다.

SQS 생성하기

AWS서비스에서 SQS서비스로 들어가 대기열 생성을 누르면 2가지 종류의 큐를 고르는 화면이 나온다.

Standard Queue(표준 대기열)

장점

1.Standard Queue초당 무제한에 가까운 TPS를 지원하는것이 특징이다.

2.SNS와 사용할 경우 메시지 유실 가능성은 없다.

 * **SQS와 함께 활용하는 SNS**에 대해서는 **다음글에서 다룰 예정**이다.

단점

1.메세지의 순차성을 보장해 주지 않는다.

2.동시에 메시지를 읽으려 할 경우 하나의 메시지를 중복으로 수신할 수 있다.

그렇기 떄문에 **중복수신에 대한 방어로직을 꼭 넣어야한다!!!**

FIFO Queue(순차 대기열)

장점

  1. 메시지의 순차성보장해 준다.
  2. 메시지 중복수신 가능성이 없다.

단점
1.Standard Queue 보다 느리다. (초당 300개의 메시지 전송,수신,삭제)
2.Standard Queue보다 비싸다.

Standard QueueFIFO Queue는 위와 같은 장단점을 가지고 있다.

일반적으로 저렴한 가격과 높은 트래픽을 받을 수 있다는 장점때문에 Standard Queue 를 많이 활용한다.

Queue 옵션

다음은 큐 생성시 옵션에 대해 살펴보자

기본 제한 시간 초과

  • 큐에 들어있는 메시지를 가져가면 최대 몇초동안 다른곳에 수신되지 않도록 안보이게 할건지에 대한 설정이다.

메시지 보존 기간

  • 큐에 들어온 메시지를 언제까지 보관할 건지에 대한 설정이다.
  • 설정한 일자만큼만 보관하고, 기간이 지나면 메시지를 삭제한다.

전송지연 시간

  • 큐에 추가된 메시지가 얼마동안 다른곳에 전송되지 못하도록 할건지에 대한 설정이다.

메세지 수신 대기 시간

  • Sqs에 수신메시지를 가져올 때 얼마동안 sqs수신대기를 할지 결정하는 설정이다.
  • 해당 설정은 java SDK AmazonSQS 클래스에서 런타임에도 설정 가능하다.
    (메시지 별 waitTime을 런타임에 변경가능)

DLQ란?

Queue를 생성하면 DLQ라는 전송실패에 대한 실패큐가 같이 생성된다.

메시지를 받아서 처리후 큐에 해당 메시지를 잘 처리고 이 메시지는 삭제해 주세요라는 요청을 날려야 한다.

메세지를 가져간 흔적은 있는데 삭제에 대한 요청이 오지 않는다면, DLQ로 해당 메세지는 빠지게된다.

리드라이브 정책 사용

  • 전송받지 못한 메시지를 담아놓을 DLQ를 만들건지에 대한 설정

최대 수신 수

  • 어플리케이션에서 최대 몇번 동안 수신가능하도록 할건지에 대한 설정
  • 예를들어 최대 수신수를 3으로 지정한다면, Worker에서 3번 메시지를 수신했는데 3번 전부 처리 실패하여 삭제요청을 안 날린 경우
    해당 메시지는 DLQ에 저장된다.

위와 같이 두단계의 간단한 설정으로 SQS를 생성하여 사용할 수 있다.

Queue를 이용하여 시스템 아키텍쳐를 구성한다면 실시간으로 응답할 필요가 없는 작업들을 Queue에 넣어두고 처리 가능한 양만큼 꺼내서 처리하므로, 더 많은 트래픽을 받을 수 있는 비동기 모델을 완성 시킬 수 있다.