우리는 2월 1일 수요일 오후 6시에 프로젝트를 배포하였다. 우리는 챗봇이 있었고 실시간 상담 기능 또한 있었다.
여기서 문제점이 생겼는데 우리가 관리자다보니 상담을 직접 해주어야하고 사용자는 상담 요청을 언제 할 지 모르니 무한 대기를 해야했다. 따로 소켓을 이용해서 만든 알람 기능도 없었고 알람 기능이 있다하더라도 자리에 앉아서 대기해야하는건 똑같았다. 그래서 이 문제를 해결해야겠다라고 생각했고 이왕이면 모바일로도 확인이 가능하길 원했기에 어떻게 이것을 해결할까 고민했다.
우선 구조를 설명하자면 우린 누군가 상담 요청을 하면 방을 만들고 DB에 저장한다. 만약 로그인 한 유저면 그 유저아이디로, 로그인을 하지않았으면 IP로 방을 만들어 DB에 저장한다. 만료시간을 두어 10분동안 입력이 없을 시 자동으로 삭제된다.
여기서 내가 든 생각은 과연 DB에 어떤 값이 추가 / 삭제 등 변경이 되었을 때 알람 기능 또는 이벤트 생성 기능을 원하는 사람이 분명히 있을거고 그 기능이 있을 것이다 라는 생각을 했다. 아니나 다를까 그런 기능이 있었다!
MongoDB Atlas에는 트리거라는 기능이 있는데 어떤 데이터베이스 컬렉션에 Insert, Update, Delete, Replace가 되면 트리거를 이어 코드를 실행시키거나, AWS event Bridege로 보낼 수 있는 기능이었다.
자 그러면 일단 누군가 채팅 요청을 하면 Rooms 라는 컬렉션에 Insert가 되는걸 트리거로 만들었고 이제 알람을 어떻게 줄까 고민을 해봐야한다. 나는 우리 프론트 + 백이 같이 쓰는 슬랙을 통해서 알람이 가면 자리에 앉아있지않아도, 모바일로도 확인이 가능하겠다 싶어 슬랙웹훅을 통해 알람을 받고 싶었다.
그럼 이제 구성은 다 했으니 구현만 하면 된다. 트리거까지 이었고 AWS event Bridge로 이벤트를 받고 그것을 lambda로 받아 그 이벤트를 슬랙 웹훅을 통해 보내기만 하면 된다.
event Bridge로 트리거를 만들면 aws event Bridge 파트너 이벤트 소스에 하나 mongo가 하나 만들어졌을거다. 눌러서 이벤트 연결을 하면 MongoDB Atlas랑 Event Bridge랑 연결은 끝난거다. 그럼 이제 Event Bridge랑 Lambda만 이어주면 끝이다.
Lambda 트리거엔 Event Bridge가 있기에 바로 이어주면 되며, 슬랙 웹훅 코드를 입력하면 된다.
const axios = require("axios");
exports.lambdaHandler = async (event) => {
const info = event.detail.fullDocument
const now = new Date();
const utcNow = now.getTime() + (now.getTimezoneOffset() * 60 * 1000);
const koreaTimeDiff = 9 * 60 * 60 * 1000;
const koreaNow = new Date(utcNow + koreaTimeDiff);
const headers = {
"Content-Type": "application/json",
};
try {
const { data } = await axios({
method: "post",
url: process.env.URL,
headers,
data: {
text: '채팅알람',
blocks: [
{
type: "section",
text: {
type: "mrkdwn",
text : `${info.user}님이 ${info.room} 방에서 상담을 요청 하셨습니다. \n\n 요청시간 : ${koreaNow}`
},
},
],
},
});
return data;
} catch (err) {
console.log(err)
}
const response = {
statusCode: 200,
body: JSON.stringify("Hello from Lambda!"),
};
};
이러면 누군가 상담을 요청할 때마다

이런 식으로 슬랙을 통해 알람이 오는 것을 확인할 수 있다.
ps) 그전에 슬랙 웹훅을 미리 채팅방에 등록시켜야한다!
https://www.mongodb.com/docs/atlas/triggers/eventbridge/
Send Trigger Events to AWS EventBridge — MongoDB Atlas
Docs Home → MongoDB Atlas MongoDB offers an AWS Eventbridge partner event source that lets you send trigger events to an event bus instead of calling a function. You can configure any trigger to send events to EventBridge.All you need to send trigger eve
www.mongodb.com
'TIL' 카테고리의 다른 글
| 2개월동안 고민하며 꿈에도 나온 Nginx, 기술 부채가 되지않을려면? (0) | 2023.02.23 |
|---|---|
| 숫자 반올림 방법: 어느 방식을 더 선호하시나요? (0) | 2023.02.20 |
| Auto Scaling, Capacity Provider, Discord WebHook (1) | 2023.02.13 |
| Grafana (0) | 2023.02.11 |
| AWS API Gateway lambda 권한부여자 (1) | 2023.01.30 |