Node.js 4 일차 (스케줄러)

chalong_s·2022년 10월 22일

스케줄러란

미리 정해놓은 프로그램을 지정된 스케줄에 맞게 실행하도록 하는것

먼저

npm i node-schedule

를 터미널 창에 입력하여 노드 스케줄러를 설치해 줍니다

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

노드 스케줄러를 불러와 schedule 이라는 변수에 담아줍니다

https://www.npmjs.com/package/node-schedule

npm 스케줄러 사이트로 들어가

이걸 한번 사용해 보겠습니다

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

let scheduleObj = null;

const set = (s) => { // 스케줄 셋팅
    var rule = new schedule.RecurrenceRule();
    //rule.dayOfWeek = [0, new schedule.Range(4, 6)];
    //0 :일요일 ~ 6 : 토요일
    rule.dayOfWeek = s.dayOfWeek; // 목요일, 금요일
    rule.hour = s.hour;
    rule.minute = s.minute;

    var job = schedule.scheduleJob(rule, function(){ 
    // scheduleJob : rule 에 기반하여 function 이 특정요일 시간마다 일을 수행할수 있게 해주는 것
    console.log('Scheduler has executed');
});

scheduleObj = job;

};

scheduleObj라는 객체를 생성하여 수정한 스케줄을 담아줄 변수를 만들고
set 이라는 함수를 만들어 dayOfWeek : 요일, hour : 시간, minute : 분 에 임시로 변수를 넣어줍니다.

그다음 job이라는 rule에 기반하여 돌아가는 함수(이번시간에는 "Scheduler has executed" 라는 문장을 터미널 창에 띄워주는 것)를 만들어주고 이것을 스케줄을 담아줄 변수인 scheduleObj에 담아줍니다.

const cancel = () => { 
// 스케줄을 수정한 해도 이전 스케줄이 지속적으로 실행되기 때문에 작업이 있을시 캔슬시켜줌 
    if(scheduleObj != null){
        scheduleObj.cancel();
    }
};

이전 스케줄이 있을시 수정을 해도 계속 돌아가기 때문에 scheduleObj 가 null이 아니라면 취소시켜주는 함수를 만들고

const setScheduler = (s) => { // 켄슬과 셋팅을 위한 함수
    cancel();
    set(s);
};

스케줄 캔슬과 셋팅을 하는 함수를 만들어 줍니다

const scheduleData = {
    dayOfWeek: [4,5],
    hour: 22,
    minute: 11
};

setScheduler(scheduleData);

scheduleData로 요일, 시간, 분 변수를 지정한뒤에 setScheduler를 실행시켜 줍니다.

결과

풀코드

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

let scheduleObj = null;

const set = (s) => { // 스케줄 셋팅
    var rule = new schedule.RecurrenceRule();
    //rule.dayOfWeek = [0, new schedule.Range(4, 6)];
    //0 :일요일 ~ 6 : 토요일
    rule.dayOfWeek = s.dayOfWeek; // 목요일, 금요일
    rule.hour = s.hour;
    rule.minute = s.minute;

    var job = schedule.scheduleJob(rule, function(){ 
    // scheduleJob : rule 에 기반하여 function 이 특정요일 시간마다 일을 수행할수 있게 해주는 것
    console.log('Scheduler has executed');
});

scheduleObj = job;

};

const cancel = () => { 
// 스케줄을 수정한 해도 이전 스케줄이 지속적으로 실행되기 때문에 작업이 있을시 캔슬시켜줌 
    if(scheduleObj != null){
        scheduleObj.cancel();
    }
};

const setScheduler = (s) => { // 켄슬과 셋팅을 위한 함수
    cancel();
    set(s);
};

const scheduleData = {
    dayOfWeek: [4,5],
    hour: 22,
    minute: 11
};

setScheduler(scheduleData);

오랜만에 올리는 node.js 공부 ~~~

profile
스마트팜 개발

0개의 댓글