2023. 10. 19. 23:29ㆍ서버
서울 시위/행사 알리미 앱이란?
- https://topis.seoul.go.kr/ 의 api 를 특정 주기마다 크롤링하여 이메일로 서울시 내 시위/행사 관련 알림을 보내주는 lambda 애플리케이션 이다.
- 서울로 출근하거나 놀러갈때 시위나 행사때문에 난감한적이 많았는데 이 정보를 사전에 알림받기위해 만든 애플리케이션 이다.
- 동작방식
- 특정 주기마다 공지 api 를 호출하여 공지 정보를 얻고 새로운 공지를 mongodb 에 기록한다.
- 기존 mongodb 에 있는 데이터를 이용해 이미 조회되었던 공지를 제외한 새로운 공지에 대해서 알림을 보내기 위해 sqs 에 pub 한다.
- email 을 보내는 lambda 함수는 sqs 를 컨숨하여 mongodb 에 등록된 사용자들에게 email 을 보낸다.
- https://github.com/SecretJuJu/seoul-demo-reminder
GitHub - SecretJuJu/seoul-demo-reminder
Contribute to SecretJuJu/seoul-demo-reminder development by creating an account on GitHub.
github.com
때는 치과에서 교정기를 제거하는 날이라 오후 반차를 쓰고 퇴근하던길..

갑자기 똑같은 알림이 계속뜨게 되었고, 퇴근길이던 나는 대응할 수 없다고 판단하여 전철역에서 조절 버튼을 눌러 lambda 함수를 일단 끄게 되었다.


오늘 모든 일정을 끝내고 마침내 원인을 분석하게 되었는데. 가장 처음으로 예상되는 실패이유는 다음과 같았다.
sendEmail 함수에서 이메일은 보냈지만 그 이후 무언가 에러가 발생하여 실패를 리턴했고, sqs 실패된 메시지를 계속 보냈다...?
일단 cloudwatch 로그를 살펴봤다.

역시.. 이미 이전에 잘 작동하고있던 코드이므로 코드문제는 아니고.. 최근 회사 사람들을 사용자로 추가하면서 이메일을 보내는 시간이 늘어난 것 같다.
그래서 타임아웃이 걸린게 아닌가 싶다.
해결방안은 2가지정도 있느 것 같다.
- 타임아웃시간을 늘린다.
- email 을 보내라고 하는 sqs message 를 사용자 수 만큼 만들고, 메시지 하나당 한명씩 보낸다.
나는 1번을 선택했다. 이유는 사용자도 별로 많이 없고.. 사용자가 많아질 것 같으면 그때 2번으로 고치면 되기 때문이다.
serverless.yml timeout 설정을 추가했고 내일 배포 할 예정이다. (지금시간엔 모두 주무실테니까.. ㅠ)
2023/10/20 오전 9시 반에 배포하고 람다를 다시 활성화했다. 수동으로 실행시켜 메일이 잘 보내지는것을 확인했고, 14초가 걸리렸다.
넉넉하게 30초로 바꿔 다시 배포했다.

원래 오늘오전 6시 50분에 알림이 가야하는데, 9시 반에 왔으니 소용없는 내용의 알림이었다.
'서버' 카테고리의 다른 글
Node.js 기반 백엔드 개발자의 Spring Boot 탐색 (2) | 2024.04.22 |
---|---|
[문제해결] lock wait timeout exceeded try restarting transaction (0) | 2024.04.14 |
Samba & Mega sync (1) | 2020.06.19 |