이전에 프로젝트를 진행하면서 회원의 정보를 하루가 지날 때마다 수정을 해야 하는 작업을 했어야 했다.
처음엔 어플리케이션을 돌리는 서버에서 배치 프로그램을 돌리거나 crontap을 돌려야 되나 싶었지만 찾아보니 mongodb는 친절하게 Trigger라는 기능을 제공해 주고 있었다. 나는 예약 작업만 걸어주면 mongodb가 알아서 쿼리를 정해준 시간에 돌려준다. 방법이 복잡하지 않아서 남겨두려고 한다.
내가 할 작업은 우리나라 기준 0시마다 "test"라는 DB의 모든 User의 quizChance를 3으로 바꿔줄거다.
우선 웹 mongodb atlas 관리 페이지로 들어가 준다.
그러면 위처럼 왼편에 "Triggers"라는 것이 있다. 저곳에서 trigger를 등록할 수 있다.
"Add Trigger"를 해준다.
그럼 이렇게 trigger를 설정할 수 있는 페이지가 나온다.
참고로 나는 이벤트 trigger가 아니니 scheduled로 type을 해줬다.
이제 쭉쭉 설정을 한다. 크게는 Schedule Type 부분에서 예약 작업 실행 시간과 Function에서 작업 쿼리를 입력하면 된다.
exports = async function() {
const mongodb = context.services.get("2nd-project");
const userModel = mongodb.db("test").collection("users");
try {
await userModel.updateMany(
{},
{
$set:{quizChance:3}
}
)
console.log("Field updated successfully");
} catch (err) {
console.error("Field update failed", err);
}
return;
};
나는 이렇게 설정했다.
Schedule Type을 Advanced로 설정해 CRON 표현식으로 적어준다.
난 한국 시간 0시라고 했지만 0 15 * * *로 적은 이유는 GMT 기준이라 오후 3시로 설정한 것이다.
이렇게 하면 끝이다.
나중에 LOGS를 보면
이와 같이 확인이 가능하다.
자세한건 아래의 공식 문서를 보자.
https://www.mongodb.com/docs/atlas/app-services/triggers/overview/
'Backend > DataBase' 카테고리의 다른 글
[MySQL] 자연어 검색 (FULLTEXT) (2) | 2024.12.15 |
---|---|
[TypeORM] TypeORM 0.3.x (0) | 2022.09.14 |
[DB] RDB와 NoSQL의 수평확장 (Scale Out) (0) | 2022.08.07 |