AWS 메시징 서비스로 디커플링하기

AWS에서 애플리케이션 개발하기

Ricardo Sueiras

Principal Technologist

Amazon SQS 기본 개념

 

sqs overview

  • 생산자와 무관하게 트래픽 급증을 처리합니다.
  • 비동기 메시징을 위한 관리형 메시지 큐입니다.
  • 생산자가 큐에 메시지를 보냅니다.
  • 소비자가 큐에서 메시지를 가져옵니다.
  • 소비자가 가져갈 때까지 메시지가 보관됩니다.
  • 보존 기간: 기본 4일, 최대 14일.
  • 소비자는 큐를 폴링하며 자신의 속도로 처리합니다.
AWS에서 애플리케이션 개발하기

메시지 가시성

  • 소비자가 메시지를 읽으면 해당 메시지는 보이지 않게 됩니다.
  • 가시성 제한 시간이 숨겨지는 기간을 제어합니다.
  • 처리에 실패하고 메시지가 삭제되지 않으면:
    • 메시지가 다시 보이게 됩니다.
    • 다시 처리할 수 있습니다.
  • 가시성 제한 시간: 기본값 30초.
  • 최대 가시성 제한 시간은 12시간입니다.

 

message visibility

AWS에서 애플리케이션 개발하기

메시지 크기

 

image size

  • 메시지 크기는 최대 256KB까지 가능합니다.
  • SQS Extended Client 라이브러리로 더 큰 메시지를 사용할 수 있습니다.
  • 대용량 페이로드는 Amazon S3에 저장합니다.
  • 메시지 페이로드에는 S3 포인터를 전송합니다.
AWS에서 애플리케이션 개발하기

짧은 폴링

  • 폴링 전략은 비용과 효율성에 영향을 줍니다.
  • 짧은 폴링이 기본값입니다.
  • SQS 서버의 일부만 조회하고 즉시 응답합니다.
  • 메시지가 있어도 빈 응답이 올 수 있습니다.
  • API 호출이 늘어나 비용이 높아집니다.

 

polling

AWS에서 애플리케이션 개발하기

긴 폴링

  • 긴 폴링은 모든 SQS 서버를 조회합니다.
  • 메시지를 받을 때까지 최대 20초 대기합니다.
  • 불필요한 빈 응답을 없앱니다.
  • API 호출을 줄여 비용을 낮춥니다.

 

polling

AWS에서 애플리케이션 개발하기

표준 큐

  • SQS는 두 가지 유형의 큐를 제공합니다.
  • 표준 큐:
    • 최소 한 번 전달.
    • 최선 노력 순서 보장.
    • 거의 무제한에 가까운 처리량.

 

queue types

AWS에서 애플리케이션 개발하기

FIFO 큐

 

queue types

  • FIFO 큐:
    • 정확히 한 번 처리.
    • 엄격한 메시지 순서 보장.
    • 내장된 메시지 중복 제거.
  • 기본 300 TPS
    • 배치 처리 시 3,000까지, 고처리량 모드 사용 시 그 이상으로 증가.
  • 사용 사례에 따라 큐 유형을 선택하세요:
    • 규모와 처리량에는 표준 큐.
    • 순서와 중복 제거에는 FIFO 큐.
AWS에서 애플리케이션 개발하기

문제 메시지 처리하기

 

dlq

  • 데드 레터 큐(DLQ)는 처리에 실패한 메시지를 저장합니다.
  • 메시지가 maxReceiveCount를 초과하면 DLQ로 이동합니다.
  • 이를 통해 문제 메시지를 무한정 재시도하지 않습니다.
  • DLQ는 원본 큐와 동일한 유형이어야 합니다.
  • 메시지를 원본 큐로 다시 옮겨 재처리할 수 있습니다.
AWS에서 애플리케이션 개발하기

큐 보안

 

securing SQS

  • 기본적으로 HTTPS를 사용해 전송 중 암호화합니다.
  • AWS KMS를 사용한 저장 데이터의 서버 측 암호화.
  • AWS Encryption SDK로 클라이언트 측에서 페이로드를 암호화할 수 있습니다.
  • IAM 정책이 SQS 큐 접근 권한을 관리합니다.
  • 리소스 기반 정책으로 큐 단위의 세밀한 제어가 가능합니다.
AWS에서 애플리케이션 개발하기

Amazon SNS 기본 개념

  • 관리형 발행-구독(pub/sub) 서비스입니다.
  • 푸시 모델을 사용합니다.
  • 발행자가 토픽으로 메시지를 보냅니다.
    • 최대 메시지 크기는 256KB입니다.
  • 소비자는 토픽을 구독합니다.
  • 구독자는 수동적으로 메시지를 받습니다.

 

sns overview

AWS에서 애플리케이션 개발하기

확장성

  • 토픽당 최대 1,250만 개의 구독을 지원합니다.
  • 메시지 보존 없음:
    • 구독자를 사용할 수 없으면 메시지가 유실됩니다.
    • 메시지 유실을 막으려면 DLQ나 내구성 있는 구독자(SQS 큐)를 사용하세요.
  • 하나의 이벤트를 여러 소비자에게 분산 전달합니다(팬아웃).

 

scaling sns

AWS에서 애플리케이션 개발하기

메시지 필터링

  • SNS는 메시지 필터링 정책을 지원합니다.
  • 구독자는 관심 있는 메시지만 받습니다.
  • 필터가 없으면 구독자는 모든 메시지를 받습니다.
  • 필터 정책은 토픽이 아닌 구독 수준에서 적용됩니다.

 

filter

AWS에서 애플리케이션 개발하기

필터 로직과 평가

 

filter polices

  • 필터는 JSON으로 정의됩니다.
  • 메시지 속성과 비교하여 일치 여부를 확인합니다.
  • 여러 조건은 AND로 평가됩니다.
  • 한 조건 내 여러 값은 OR로 평가됩니다.
  • 다양한 필터 연산을 지원합니다:
    • 정확한 문자열, 숫자, 접두사, 제외, 범위 일치.
AWS에서 애플리케이션 개발하기

SNS 보안

 

sns security

  • 기본적으로 HTTPS를 사용해 전송 중 데이터를 암호화합니다.
  • AWS KMS를 사용한 저장 데이터의 서버 측 암호화.
    • SNS가 KMS 키를 사용하도록 권한을 부여하세요.
  • IAM 정책이 접근 제어를 제공합니다.
    • 토픽에 발행하거나 구독할 수 있는 권한을 관리합니다.
AWS에서 애플리케이션 개발하기

연습해 봅시다!

AWS에서 애플리케이션 개발하기

Preparing Video For Download...