2022. 3. 17. 18:53ㆍBACK 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
참고
'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 |