본문 바로가기

Programming/AWS

[AWS] SNS vs SQS 차이점

SNS, SQS 이름도 비슷하고 얼핏 보면 하는 일도 비슷한 것 같아 보이는 서비스들이다. 그래서 막 검색을 하던 중, SNS와 SQS에 대해 잘 설명해둔 영상이 있어서 보면서 정리를 해보았다.

https://www.youtube.com/watch?v=mXk0MNjlO7A

 

SNS SQS
Simple Notification Service Simple Queue Service
Publisher(게시자)가 Subscriber(구독자)에게 메세지를 전송하는 관리형 서비스 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 쉽게 분리하고 확장할 수 있도록 지원하는 완전관리형 메세지 대기열 서비스
Publisher는 Topic(주제)에 메세지를 발행한다.
Topic은 수많은 Subscribers(구독자들)에게 전달될 수 있다.(fan out)
이때 전달 방식은 다양하다.(Lambda, SQS, Email ...)

시스템은 Queue로부터 새로운 이벤트를 실시할 수 있다.
Queue에 있는 메세지들은 한 명의 consumer(고객) 또는 하나의 서비스에서 실행된다.
다른 시스템들이 이벤트에 신경쓰는가?
Topic에 메세지를 publish(발행)하고 싶어하고, 사람들에게 발행되었다고 알리고 싶을 때
이 시스템이 이벤트에 신경쓰는가?
내가 이벤트의 수신자일 때

해당 영상에서는 직접 예시를 들어 설명해주었다.

위 영상에 나오는 그림을 다시 그려보았다.

 

사용자가 웹사이트에서 물건을 구매했다. 이때 웹서비스가 갖는 결제 정보를 활용해서 서비스를 만든다고 가정해보자. 우리는 이 결제정보를 publish(발행)할 것이다. 이때 우리는 SNS를 사용할 수 있다. 사용자가 웹사이트에서 물건을 구매했고 해당 결제 정보는 다음과 같아요!! 를 알리며 결제 정보를 메시지에 담아 SNS Topic에 발행한다. 우리는 이 메시지를 활용하여 각각 다른 서비스들을 만들어 볼 것이다.

 

첫 번째, Lambda에 전달해볼 것이다.

Lambda는 사용자에게 결제정보를 이메일로 보내주는 역할을 한다.

 

두 번째, SQS Queue에 전달해볼 것이다.

하루 동안 웹사이트에서 일어난 거래를 분석하는 서비스를 만들어볼 것이다. 하루에 총 몇 건의 결제가 이루어졌는지, 총금액은 얼마인지 등등을 분석하려고 한다. 결제가 이루어질 때마다 결제 정보를 SNS Queue에 저장한 후, EC2를 사용하여 Queue에 있는 메시지를 꺼내와서(poll) 분석을 진행한다.

 

세 번째도 SQS Queue에 전달해볼 것이다.

이번에는 거래 정보가 사기인지를 탐색하는 서비스를 만들어볼 것이다. 결제건에 대하여 정상적인 결제인지, 사기인지를 판단하는 서비스이다. 이 서비스도 마찬가지로 결제 정보를 SNS Queue에 저장한 후, EC2를 사용하여 Queue에 있는 메시지를 꺼내와서(poll) 분석을 진행한다.

 

세 서비스는 각자 다른 일을 하지만, 결제 정보라는 동일한 이벤트를 기반으로 운영된다. 서로 다른 사용자(서비스)들이 동일한 하나의 이벤트에 관해 각각의 동작을 진행하는 방식이다. 이때 우리는 SNS가 필요하다.

 

위의 세 가지 서비스중에서 Lambda는 서비스에 문제가 생겼을 때 해당 결제건에 대해 이메일 발송이 안될 수 있다. 하지만 SQS Queue에 들어온 메세지는 삭제하기 전에는 지워지지 않는다는 장점이 있기에 최소한 한 번은 꼭! 실행이 보장된다.

 

만약, 이 서비스들을 한 번에 실행하게 되면 어떻게 될까? 사용자가 결제를 진행한 후, 해당 결제 정보를 통해 사용자에게 이메일을 보내고, 해당 거래건에 대해 분석을 하고, 해당 거래건이 사기인지 아닌지 판단하는 서비스를 순차적으로 진행한다고 생각해보자. 이건 매우 비효율적이고 좋지 않은 방식이다. 그 이유는, 순차적으로 진행하면서 오류가 발생할 수 있는 구간이 너무 많기 때문이다. 이메일을 보내다가 오류가 발생되면, 처음부터 다시 실행해야 한다. 그럼 사용자는 결제를 다시 해야 하는 말도 안 되는 상황이 벌어질 수 있다. 따라서 서비스를 최대한 쪼개어(decouple) 독립적으로 실행될 수 있도록 하는 것이 중요하다.

 

마지막으로 키워드로 정리를 해보면 다음과 같다.

SNS SQS
Topic(Pub/Sub) Queue
Push: 사용자에게 메세지 전송 Pull: 사용자가 메세지를 가져온다
Fanout: 같은 메세지를 여러 방향으로 발행 Decouple: 여러 서비스로 분리하여 병렬식 비동기 처리
메세지를 받는 사용자가 없으면 몇 번 시도하다가 삭제된다. 메세지는 일정 기간동안 유지된다.
하나의 메세지를 사용자들이 각각 다른 방식으로 활용 하나의 메세지를 사용자들이 동일한 방식으로 활용

 

반응형