예정된 시간에 작업을 수행하는 node-schedule
별도의 SQL문을 사용해 배치(Batch) 기능을 사용하던 것과 비교하면 정말 편하게 프로그래밍이 가능하도록 도와주는 라이브러리입니다.
배치 기능을 사용할 수 있는 대표 라이브러리는 크게 3가지(Agenda, node-cron, node-schedule)이며, 인기는 다음과 같습니다.
- Agenda (2021/12/22 기준 주간 다운로드 수 56,319)
- node-cron(2021/12/22 기준 주간 다운로드 수 219,168)
- node-schedule(2021/12/22 기준 주간 다운로드 수 507,675)
필요한 기능이 동일하다면 사용자가 많은 쪽이 관련 정보도 얻기 쉬우므로 node-schedule을 사용해보겠습니다.
npm install node-schedule
설치 후 해당 라이브러리를 import합니다.
import schedule from 'node-schedule';
그리고 서버를 가동하면 바로 실행될 수 있도록 index.js에 실행 함수를 넣어주면 됩니다.
실행될 조건(시간 또는 반복 주기)을 넣어주면 해당 조건에 맞춰 함수를 실행합니다.
const regularExec = schedule.scheduleJob('0 0 12 * * *', ()=>{ // 매일 낮 12시 정각마다 실행 sendCheckDataEmail(); })
위 함수는 매일 낮 12시마다 실행됩니다.
scheduleJob의 첫 번째 파라미터의 값은 다음과 같습니다.
초를 넣는 부분인 second 에 *를 넣으면 모든 초마다 실행하라는 의미가 됩니다.
따라서 minute에 5, second에 *을 넣으면 5분00초부터 5분59초까지 함수가 총 60번 실행됩니다.
주기를 설정하는 방법도 있는데요.
second에 */5로 표기하면 초 단위를 5초 단위로 쪼갭니다.
따라서 5초에 한 번씩 실행하라는 의미가 됩니다.
취소는 cancel 메소드를 사용하면 됩니다.
regularExec.cancel();
유의할 점은 서버가 실행 중일 때만 해당 스케쥴러가 작동하며, 멀티프로세스를 가동하는 경우 중복으로 실행되지 않도록 별도의 설정을 해주어야 합니다.
그럼 서버가 열심히 일하도록 스케쥴러 기능을 요긴하게 사용해 주세요!