node-cron을 사용해 node.js 서버에 스케줄러 설정하기

ssumniee·2021년 12월 8일
1

설치

npm install --save node-cron

package.json에 node-cron 모듈을 추가해주기 위해 --save 옵션을 사용했다.

실행

Node.js 서버가 기본으로 실행하는 파일(app.js 또는 index.js)에 node-cron 모듈을 불러와 사용하면 된다.

스케줄러에 의해 실행할 작업은 콜백 함수 안에 작성해주면 된다.
아래에 테스트 삼아 콘솔 로그를 출력하는 함수를 작성해보았다.

const cron = require('node-cron');

// second minute hour day-of-month month day-of-week
cron.schedule('* * * * *', function(){
  console.log('node-cron 실행됨');
});

실행 주기

// second minute hour day-of-month month day-of-week
cron.schedule('* * * * *', function(){
	// 작업 내용
});

위에 * 표시 5개가 작업이 반복적으로 실행될 시점을 의미한다.

순서대로, second(초), minute(분), hour(시), day-of-month(날짜), month(월), day-of-week(요일)을 의미한다.

적용

실행하고 싶은 작업

💡 각 요일마다, 해당 요일에 수업이 있는 수강생의 남은 수업 횟수를 1회 씩 차감하기

테스트

잘 작동한다!

작업에 사용된 코드

app.js 파일에 작성한 실제 코드이다.

const cron = require("node-cron");

// 요일 id를 인자로 받아, 해당 요일에 수업이 있는 수강생의 수업 횟수를 1회 차감하는 함수
const { minusUserCounts } = require("./controllers/functions/sequelize");
// 요일 이름과 id값을 저장한 배열
const days = [
  { id: 1, name: "Mon", toMinus: 7 },
  { id: 2, name: "Tue", toMinus: 1 },
  { id: 3, name: "Wed", toMinus: 2 },
  { id: 4, name: "Thu", toMinus: 3 },
  { id: 5, name: "Fri", toMinus: 4 },
  { id: 6, name: "Sat", toMinus: 5 },
  { id: 7, name: "Sun", toMinus: 6 },
];
// 스케쥴러 설정: 각 요일의 자정마다, 수강생의 수업 횟수를 1회씩 차감하도록 설정
days.forEach((day) => {
  cron.schedule(`0 0 0 * * ${day.name}`, async () => {
    try {
      const updated = await minusUserCounts(day.toMinus);
      console.log({ message: "counts updated", updated });
    } catch (err) {
      console.error(err);
    }
  });
});

참고한 글
[Node.js] node-cron을 이용한 NodeJS 스케줄러 설정

profile
개발에 뛰어든 UX/UI 디자이너

0개의 댓글