[AWS] SNS , SQS 란 ?

개발새발·2022년 3월 17일
0

AWS

목록 보기
1/1
post-thumbnail

SNS (Simple Notification Service)

구독 중인 서비스나 사용자에게 메시지 전달 및 전송을 해주는 서비스

  • 완전관리형 pub/sub 메시징
    pub/sub : 메시지를 처리하는 곳과 수신하는 곳을 분리하는 비동기 메시징 서비스

주제(Topic)와 구독(Subscribe)

SNS 는 주제와 구독으로 이루어져 있습니다.

주제(Topic)
: 메세지를 수신하는 액세스 포인트

구독(Subscirbe)
: 주제를 통해 발생된 메시지들을 엔드포인트와 이어주는 역할

구조

① Publisher 에서 메세지 전송
② Amazon SNS
- SNS Topic 에서 메세지 수신
- 설정된 endpoint 에서 메세지를 수신할 수 없는 경우 DLQ 에서 재처리
- 메시지를 설정되어 있는 엔드포인트에 전송
③ Subscriber 에서 메세지 수신

SQS (Simple Queue Service)

마이크로 서비스, 분산 시스템 및 서버리스 애플리케이션을 쉽게 분리하고 확장할 수 있도록 지원하는 완전관리형 메시지 대기열 서비스

  1. 해야 할 일을 나중에 처리하거나, 다른 시스템이 처리 할 수 있도록 하기 위한 비동기 메시징 서비스
  2. 시스템이 처리해야할 TO-DO List
  3. 애플리케이션 간 비동기 처리를 도와줌

대기열

SQS 의 대기열은 총 두가지 종류가 있습니다.
① 표준 대기열
   최대 처리량, 최선 노력 순서, 최소 1회 전달

② FIFO 대기열
   메시지가 전송된 정확한 순서대로 정확히 한 번 전달

보통 메시지의 순서가 상관 없는 경우 표준 대기열을, 메시지의 순서가 중요한 경우 FIFO 대기열을 사용합니다.

메시지 수명 주기

① 생산자 는 메시지 A 를 대기열로 전송
: 해당 메시지는 Amazon SQS 서버에 중복 분산

② 소비자는 메시지를 처리할 준비가 되면 대기열에서 메시지를 소비하고 처리가 끝나면 Queue 로 ACK 를 전송한다. (ACK 는 보통 메시지 아이디)
: 소비자가 메시지를 처리할 동안 해당 메시지를 대기열에 그대로 남아 있고, 제한 시간 초과가 지속되는 동안은 후속 수신 요청으로 반환되지 않음.

③ ACK 를 받은 대기열은 해당 ACK 에 대한 메시지를 삭제한다.
: 제한 시간 초과가 되면 이 메시지가 다시 처리 되지 않도록 삭제함.
: 만일 제한 시간 내 삭제하지 못하는 경우 다시 처리될 수 있음

SNS - SQS 구현해보기

그러면 이론은 어느정도 배웠으니 실제로 AWS 에서 SNS 와 SQS 를 만들어보고 메시징 테스트까지 진행해보겠습니다. 🙂

1. 주제 생성

SNS > 주제에서 주제 생성 버튼을 눌러줍니다.

기본적으로 유형과 이름을 지정해주면 됩니다. 유형은 FIFO, 표준 중 하나를 선택할 수 있는데 각 항목 별 설명은 아래를 참고해주세요.

FIFO표준
엄격하게 보존된 메시지 순서 지정
정확히 1회 메시지 전송
높은 처리량, 초당 최대 300회 게시
구독 프로토콜: SQS

➡️ 메시지 순서 지정 및 중복 제거시 사용
SQS FIFO 인 경우에만 연결 가능
최선의 메시지 순서 지정
최소 1회 메시지 전송
가장 높은 처리량(초당 게시 횟수)
구독 프로토콜: SQS, Lambda, HTTP, SMS, 이메일, 모바일 애플리케이션 엔드포인트

➡️ 메시지 전송 순서 및 가능한 메시지 중복이 중요하지 않은 경우 사용
엔드포인트로 여러개를 지정할 수 있어 보통 많이 사용함

저는 정확히 1회, 순서를 지켜서 메시지를 받을 필요가 없기 때문에 유형은 표준으로, 이름은 임의로 지어주도록 하겠습니다. sns와 sqs 가 통신하기 때문에 soyeon-sns-to-sqs-test 로 지어줬습니다.

2. Dead SQS 생성

SNS 구독 같은 경우는 엔드포인트를 지정해줘야 하기 때문에 SQS 를 먼저 생성해줍니다.
SQS 에선 DLQ (배달 못한 편지 대기열) 을 지정해줄 수 있기 때문에 Dead 를 먼저 생성해주겠습니다.

유형의 경우 선입선출 전송이 필요하지 않기 때문에 표준으로 생성해줍니다.
이름은 dead SQS 를 알아볼 수 있도록 뒤에 -dead 를 붙여줍니다.

3. SQS 생성

Dead SQS 를 만들어줬으니 이젠 실제 사용할 SQS 를 만들어주겠습니다.

이름은 아까 dead SQS 에서 -dead 만 지워서 만들어줍니다.
그다음 액세스 정책을 설정해줘야 하는데 sns 로 부터 통신할 수 있도록 규칙을 지정해줍니다.

그리고 배달 못한 편지 대기열에 아까 생성한 dead queue 를 설정해줍니다.

4. SNS 구독 만들기

이전에 만든 주제 를 선택해 아래에 있는 구독 생성 버튼을 클릭해줍니다.

구독 ARN은 이미 선택되어 있기 때문에 프로토콜을 Amazon SQS, 엔드포인트를 이전에 만든 SQS로 설정해줍니다.

5. SNS-SQS 연동 테스트

다시 SNS 주제로 돌아와 오른쪽 상단에 있는 메시지 게시 버튼을 눌러줍니다.

테스트 용도이기 때문에 메시지 본문에 아무렇게나 값을 써주고

해당 SNS 에 연결되어 있는 SQS 를 보면 사용가능한 메시지가 1개 와 있는 걸 볼 수 있습니다.

⚠️ 사용 가능한 메시지가 없는 경우
대상이 되는 sqs 를 선택해 들어간 다음 오른쪽 상단에 있는 메시지 전송 및 수신 버튼을 클릭 하고

메시지 폴링 버튼을 누르면 메시지가 정상적으로 도착한 걸 확인할 수 있습니다.

레퍼런스

Amazon Simple Notification Service
Simple Queue Service (SQS)
Amazon Simple Queue Service
AWS SQS (Simple Queue Service)

0개의 댓글