AWS SNS(Simple Notification Service)로 Serverless Email 알림 서비스 구축하기
마케팅 업무를 하다 보면 여러 상황에서 알림을 받아야할 때가 있다. 알림을 받기 위한 방법은 여러가지가 있다. 앱, 메신저의 Push notification은 사용하고 있는 앱이나 메신저가 있으면 알림을 받기는 좋지만 개발에 대해 고려해야 할 사항이 이메일에 비해 많은 것이 사실이다.
업무에서 이메일은 필수적으로 사용하고 있고 지금은 모바일에서 메일 수신 알림은 기본적으로 확인이 되기 때문에 이메일 알림도 많이 사용되고 있다. 그렇다고 이메일 알림 서비스를 개발하는 것이 그리 간단하진 않다. 언어별로 이메일 발송 라이브러리를 사용하여 구성하려고 해도 모듈을 돌릴 서버가 필요하고 알림을 받을 수신자 리스트를 관리하기 위한 Database도 필요하다. (물론 간단하게는 하드코딩으로 할 수도 있겠지만.. 알림 타입이 늘어나면 관리를 어떻게…)
AWS 서비스 중에 이 부분을 해결해 줄 수 있는 것이 있을까 찾아보다 SNS(Simple Notification Service)를 발견했다. SNS는 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 쉽게 분리할 수 있게 해 주는 내구적이고 안전한 고가용성의 완전 관리형 게시/구독 메시징 서비스이다.
위의 이미지처럼 SNS Topic에 메시지를 보내면 여러 가지 타입의 Subscriber들에게 전송이 가능하다. 예를 들어 슬랙 같은 업무용 메신저에 메시지를 보낼 수도 있고 우리가 지금 필요로 하는 이메일 알림도 가능하다.
SNS서비스를 이용하기 위해서는 Topic 즉, 주제를 만들고 그 주제에 구독자를 등록하면 된다. 마침 회사에서 알림 서비스가 필요하게 되어 서버리스로 빠르게 구성해 보기로 했다.
알림을 받기 위한 룰셋을 결정하는 모듈은 람다함수로 만들고, SNS에 Topic(알림주제)를 생성하고 그 메시지를 수신할 구독형태를 이메일로 하여 알림받을 사람들의 이메일을 등록하였다. 이메일을 등록하면 확인 메일이 발송되고 메일 본문에 있는 Confirm subscription 링크를 클릭하게 되면 그 때 부터 알림 수신을 받을 준비가 완료된다. 이 알림 메일은 답장을 할 수 없고 알림용으로만 사용 가능하기 때문에 답장을 할 필요가 없다. (대량 메일 발송을 위해서는 AWS SES 서비스를 사용해야 한다.) 또한 메일 본문에 opt-out 링크가 포함되어 있어 알림 수신을 언제 든지 해지 할 수도 있다.
주제(Topic)별로 구독자 리스트를 관리하기 편하고 여러 형태의 프로토콜(구독할 엔드포인트 유형)을 제공하기 때문에 메시지에 대한 알림 이후 처리를 다양하게 응용할 수 있다. 사람한테 이메일 알림을 주면서 동시에 람다함수를 호출해서 다음 단계의 로직을 수행할 수도 있다.
지금까지 람다함수와 SNS 서비스를 이용하여 간단히 이메일 알림서비스를 구현하는 방법에 대해 알아봤다. 서버리스로 구성이 가능했기 때문에 빠르게 알림 서비스를 구현하기 위해서는 AWS SNS를 사용해 보는 것도 좋은 선택같다.