node-cron을 활용한 스케쥴링

2022. 3. 17. 18:53BACK END/NODE.JS

 

전체 데이터를 카테고리화 하여 반영되어야하는 페이지가 있고 그 페이지 이용 수가 많아 과부하가 우려됨. 스케쥴링을 통해 특정 시간에 한 번씩 종합하여 반영하여 자원 소모를 줄이고자 함.

1. node-cron 설치

npm i --save cron

 

2. 스케쥴링 세팅

기본적인 형태는 아래 코드처럼 쓸 수 있음. 스케쥴링할 파일에 node-cron을 임포트 해주고, 주기 설정함.  schedule()함수의 첫 번째로 인자로 실행 주기를 입력하고 두 번째 인자로 콜백 함수를 넣어 실행할 작업을 설정해줄 수 있음.

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

cron.schedule('* * * * * *', () => { // scheduling
  console.log('running a task every minute'); //task
});

위 코드에서 '* * * * * *' 부분이 필드가 되며 이를 수정하여 주기를 조정함. 각 필드의 역할은 아래와 같음.

 

필드

 # ┌────────────── second (optional)
 # │ ┌──────────── minute
 # │ │ ┌────────── hour
 # │ │ │ ┌──────── day of month
 # │ │ │ │ ┌────── month
 # │ │ │ │ │ ┌──── day of week
 # │ │ │ │ │ │
 # │ │ │ │ │ │
 # * * * * * *

필드별 범위

field value
second 0-59
minute 0-59
hour 0-23
day of month 1-31
month 1-12
day of week 0-7(혹은 이름, 0이나 7은 sunday)

 

앞 자리부터 초, 분, 시, 일, 월, 요일에 해당하며 '* * * * * *'의 경우 요일, 월, 일, 시, 분에 관계없이 매 초당 실행될 스케쥴링을 설정한다는 의미임. 위 표의 범위에 맞게 값을 넣어 설정할 수 있음. 필드 중 초 단위 조건을 명시하는 첫 번째 애스터리스크는 생략할 수 있음. 생략할 경우 디폴트는 0

 

주기 설정 추가 기능

실행 주기를 설정하는 방법은 위 설명처럼 일정한 값을 입력하는 방법 뿐만 아니라 아래와 같은 다양한 방법을 활용할 수 있음.

 

다중 값 활용

콤마(,)를 사용해 다중 값을 입력할 수 있음.

// 다중 값 사용
const cron = require('node-cron');
 
cron.schedule('1,2,4,5 * * * * *', () => {
  console.log('매 1, 2, 4, 5초 마다 실행');
});

 

범위 활용

값의 범위로 지정할 수도 있음.

// 범위 값 사용
const cron = require('node-cron');
 
cron.schedule('1-5 * * * *', () => { // 초단위 생략
  console.log('매 1-5분 마다 실행');
});

 

단계값 활용

숫자 범위와 '/' 기호를 활용하여 뛰어세기를 할 수 있음. 이 때 숫자 번위 대신 애스터리스크 사용가능.

// 숫자 범위 + / + 숫자
const cron = require('node-cron');
 
cron.schedule('1-10/2 * * * *', () => {
  console.log('매 2,4,6,8,10분 마다 실행');
});
// * + / + 숫자
const cron = require('node-cron');
 
cron.schedule('*/2 * * * *', () => {
  console.log('매 2분 마다 실행');
});

 

이름 활용

월과 요일 필드에는 이름이나 약어를 사용할 수 있음.

// 이름 사용
const cron = require('node-cron');
 
cron.schedule('* * * January,September Sunday', () => {
  console.log('1월과 9월의 일요일 마다 실행');
});
// 약어 사용
const cron = require('node-cron');
 
cron.schedule('* * * Jan,Sep Sun', () => {
  console.log('1월과 9월의 일요일 마다 실행');
});

 

 

 

3. 함수

 

Start

위에서 진행한 코드처럼는 schedule()로 바로 실행할 수도 있지만 세 번째 인자로에 자동 시작 옵션(scheduled)를 false로 설정한 뒤 따로 실행해줄 수 있음

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

let task = cron.schedule('* * * * *', function () {
  console.log('매 분 마다 작업 실행');
}, {
  scheduled: false
});

task.start();

 

Stop

stop()을 활용하여 작업을 중지키실 수 있으며, 다시 시작시키기 전에는 실행되지 않음

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

let task = cron.schedule('* * * * *', function () {
  console.log('매 분 마다 작업 실행');
});

task.stop();

 

Destroy

destroy()를 활용하여 작업을 아예 삭제시킬 수 있음. 해당 작업은 다시 실행할 수 없음.

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

let task = cron.schedule('* * * * *', function () {
  console.log('매 분 마다 작업 실행');
});

task.destroy();

Validate

validate()를 활용하여 주기 설정 전에 유효성 여부를 파악할 수 있음

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

let valid = cron.validate('59 * * * *');
let invalid = cron.validate('60 * * * *');

console.log(valid); // ture
console.log(invalid); // false

 

 

 

 

 

참고

 

node-cron

A simple cron-like task scheduler for Node.js

www.npmjs.com

 

Fiber의 노드 Cron-JavaScript

노드 크론 node-cron 모듈은 GNU crontab 기반 node.js용 순수 JavaScript의 작은 작업 스케줄러입니다 . 이 모듈을 사용하면 전체 crontab 구문을 사용하여 node.js에서 작업을 예약할 수 있습니다. 시작하기 npm

fibjs.org

 

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

node-cron을 이용한 NodeJS 스케줄러 설정 node-cron 기본 개념 Cron이란 Cron은 유닉스 계열 컴퓨터 운영 체제의 시간 기반 Job 스케줄러입니다. 소프트웨어 환경을 설정하고 관리하는 사람들은 작업을 고

miiingo.tistory.com

'BACK END > NODE.JS' 카테고리의 다른 글

MariaDB Cannot enqueue Query after fatal error.(진행 중)  (0) 2022.03.17
replace함수로 string타입 데이터 가공  (0) 2022.03.17
cross-env  (0) 2022.03.17
Bcrypt 암호화  (0) 2022.03.17
REST 미지원 메서드 처리  (0) 2022.03.17