Nodejs에서 배치(Batch) 기능 사용하기(node-schedule)

예정된 시간에 작업을 수행하는 node-schedule

별도의 SQL문을 사용해 배치(Batch) 기능을 사용하던 것과 비교하면 정말 편하게 프로그래밍이 가능하도록 도와주는 라이브러리입니다.

배치 기능을 사용할 수 있는 대표 라이브러리는 크게 3가지(Agenda, node-cron, node-schedule)이며, 인기는 다음과 같습니다.

  1. Agenda (2021/12/22 기준 주간 다운로드 수 56,319)
  2. node-cron(2021/12/22 기준 주간 다운로드 수 219,168)
  3. 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의 첫 번째 파라미터의 값은 다음과 같습니다.

*는 all과 값은 의미이며, 각 파라미터의 사이에는 빈칸을 넣어줍니다.

초를 넣는 부분인 second 에 *를 넣으면 모든 초마다 실행하라는 의미가 됩니다.

따라서 minute에 5, second에 *을 넣으면 5분00초부터 5분59초까지 함수가 총 60번 실행됩니다.

주기를 설정하는 방법도 있는데요.

second에 */5로 표기하면 초 단위를 5초 단위로 쪼갭니다.

따라서 5초에 한 번씩 실행하라는 의미가 됩니다.

취소는 cancel 메소드를 사용하면 됩니다.

regularExec.cancel();

유의할 점은 서버가 실행 중일 때만 해당 스케쥴러가 작동하며, 멀티프로세스를 가동하는 경우 중복으로 실행되지 않도록 별도의 설정을 해주어야 합니다.

그럼 서버가 열심히 일하도록 스케쥴러 기능을 요긴하게 사용해 주세요!