서울 시위/행사 알리미 앱 개선하기
기존에 다니던 회사가 폐업하여 7월부터 백수가 되었는데.. 이틈을 타 기존에 미뤄왔던 사이드프로젝트 개선을 하려고 한다.
https://winbuntu.tistory.com/35
서울 시위/행사 알리미 앱 고치기 - 메모리 관련
서울 시위/행사 알리미 앱이란? https://topis.seoul.go.kr/ 의 api 를 특정 주기마다 크롤링하여 이메일로 서울시 내 시위/행사 관련 알림을 보내주는 lambda 애플리케이션 이다. 서울로 출근하거나 놀러
winbuntu.tistory.com
위 서울/시위 행사 알리미 앱을 새로운 유저도 신청 가능하게 만들기 위한 여정을 시작할 것이다.
우선 기존 프로젝트의 한계는 다음과 같았다.
1. 유저가 늘어나면 이메일 발송에 timeout 이 발생하여 SQS Retry 로 인해 이메일이 무한발송됨.
2. 유저를 늘릴 수 있는 방법이 내가 직접 데이터베이스 추가시키는 방법 밖에 없음.
3. AWS 가 아닌 Altas 의 mongo db 에 유저 및 알림 정보가 저장되고 있어 관리가 어려움.
4. 유저가 구독을 취소할 수 없음.
5. 로그나 에러들을 각각 람다의 로그 스트림에서 확인해야한다.
그리고 기존 프로젝트 구조는 이렇게 생겼다.

개선목표
- 유저를 http api 로 추가할 수 있어야 함.
- 대량의 유저에게도 거의 동시에 이메일이 발송될 수 있어야 함.
- Atlas mongoDB -> AWS DynamoDB 로 데이터베이스 마이그레이션 (관리목표)
- 유저가 직접 구독을 취소할 수 있어야 함.
개선 방향

설명
- 추후 유저를 쉽게 추가할 수 있도록 cognito 로 유저를 관리
- 대량의 유저가 있더라도 발송할 이메일을 10개씩 청크로 나누어 여러개의 람다가 병렬처리.
- 이메일별로 초당 발송제한이 있을 수 있고, 각 청크별로 에러에의한 재발송을 최소화 하기 위해 나눔
- 또한 한개당 너무 많은 이메일을 발송하게하면 타임아웃될 수 있음.
또한 CloudWatch 대시보드를 다음과 같이 구성 해 보았다.

또한
- 사용자와 직접적으로 이어지는 sendEmail 부분에 경보를 걸고
- 이메일 발송 실패시에도 SNS 를 통해 이메일로 알림이 오도록 구성

이전에 sendEmail 에 timeout 발생으로 sqs retry 로 인해 무한 재발송이 되었던 적이 있다.
따라서 timeout을 감지하기위해 duration limit 을 사용하여 알림을 추가했다


이메일 발송 실패시 SNS 를 통해 이메일 발송.
한계
- Gmail 을 사용중인데 하루 최대 발송가능 이메일수가 500개.