개발/nodejs
node-schedule-tz
kwony
2021. 1. 7. 19:28
node-cron 이란 라이브러리를 사용하면 몇 시간이나 몇 일을 주기로 특정 작업을 반복해서 실행 할 수 있지만 내가 원하는 시간대에 실행하는 것은 어렵다. 예로 매일 23시 55분에 실행하는 작업을 만드려면 cron 실행을 23시 55분부터 실행하도록 하거나 아니면 1분 주기로 재실행해서 23시 55분이 지났는지 확인해야하는데 이건 번거롭다.
이럴때는 node-schedule이란 라이브러리를 이용하면 된다. 이 라이브러리는 특정 작업을 언제 실행할 것인지 설정 할 수 있다. cron과 거의 비슷한데 내가 작업 시간을 설정 할 수 있다는 점에서 다르다.
아래 코드는 매시 42분 마다 실행되는 코드다. 2시 42분, 3시 42분마다 아래 코드가 실행된다.
var schedule = require('node-schedule');
var j = schedule.scheduleJob('42 * * * *', function(){
console.log('The answer to life, the universe, and everything!');
});
scheduleJob 첫번째 인자에 들어가는 위치별로 분, 시, 일, 월, 요일을 정해줄 수 있다. 모두 포함하고 싶으면 별표를 넣으면 된다.
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
node-schedule-tz 라이브러리는 time zone까지 설정할 수 있다. 그냥 node-schedule 라이브러리를 쓰면 서버 시간에 맞춰지는데 다른 국가에 서버가 있는 경우에는 맞지 않을 경우가 있다. 이때는 node-schedule-tz 라이브러리로 타임존까지 맞춰주자. 아래 코드는 서울 시간 기준으로 매일 23시 59분에 실행되도록 스케줄링 한 예다.
const schedule = require('node-schedule-tz')
const rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [0, new schedule.Range(0, 6)];
rule.hour = 23;
rule.minute = 59;
rule.tz = 'Asia/Seoul';
module.exports = schedule.scheduleJob(rule, () => {
console.log('called every 23:59 pm')
})