Node.js 를 배워보자

Node.js 크론 잡 스케줄러 구현: 정기적인 작업 자동화하기

_Blue_Sky_ 2024. 12. 4. 23:50
728x90
728x90

 

Node.js 애플리케이션에서 특정 작업을 정기적으로 실행해야 할 때가 있습니다. 예를 들어, 데이터베이스 백업, 로그 파일 회전, API 호출 등을 일정한 시간 간격으로 수행해야 하는 경우가 대표적입니다. 이러한 작업을 자동화하기 위해 Node.js에서는 크론 잡 스케줄러를 사용합니다.

크론 잡이란?

크론 잡은 유닉스 계열 운영체제에서 특정 작업을 주기적으로 실행하도록 예약하는 시스템입니다. 정해진 시간, 날짜, 요일에 따라 명령어나 스크립트를 실행할 수 있습니다.

Node.js에서 크론 잡 사용하기

Node.js에서 크론 잡을 사용하기 위해 다양한 라이브러리가 존재하지만, 가장 많이 사용되는 라이브러리는 node-cron입니다. node-cron은 간단하고 직관적인 API를 제공하여 크론 잡을 쉽게 설정할 수 있도록 해줍니다.

728x90

node-cron 설치

npm install node-cron

기본 사용법

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

cron.schedule('* * * * *', () => {
    console.log('매 분마다 실행됩니다.');
});
 

위 코드는 매 분마다 console.log 함수를 실행하는 예시입니다. 첫 번째 인자로 전달되는 문자열은 크론 표현식으로, 언제 작업을 실행할지 정의합니다.

크론 표현식

크론 표현식은 5개의 필드로 구성됩니다.

  • 분: 0-59
  • 시: 0-23
  • 일: 1-31
  • 월: 1-12 또는 Jan-Dec
  • 요일: 0-7 (0 또는 7은 일요일)

예를 들어, "0 0 * * 1"은 매주 월요일 오전 0시에 작업을 실행하도록 설정합니다.

다양한 예시

  • 매일 오전 3시에 실행: 0 3 * * *
  • 매월 1일 오전 9시에 실행: 0 9 1 * *
  • 매주 금요일 오후 5시에 실행: 0 17 * * 5
  • 매일 밤 12시에 실행: 0 0 * * *
  • 매시간 30분에 실행: 30 * * * *

시간대 설정

node-cron은 기본적으로 시스템의 로컬 시간대를 사용합니다. 다른 시간대를 사용하려면 cron.timezone을 설정하면 됩니다.

cron.timezone = 'America/Los_Angeles';
728x90

동적 스케줄링

JavaScript의 변수를 사용하여 동적으로 스케줄을 설정할 수 있습니다.

const schedule = '0 */2 * * *'; // 매 2시간마다 실행
cron.schedule(schedule, () => {
    // 작업 수행
});
 
 

주의 사항

  • 정확한 시간: 크론 표현식을 정확하게 작성해야 의도한 시간에 작업이 실행됩니다.
  • 시간대: 서버의 시간대를 확인하고 필요에 따라 시간대를 설정해야 합니다.
  • 중복 실행 방지: 동일한 스케줄로 여러 개의 작업을 설정하면 예상치 못한 결과가 발생할 수 있습니다.
  • 에러 처리: 작업 실행 중 에러가 발생할 수 있으므로 적절한 에러 처리를 해야 합니다.

실제 예시: 매일 자정에 데이터베이스 백업

const cron = require('node-cron');
const { backupDatabase } = require('./backup'); // 백업 함수

cron.schedule('0 0 * * *', () => {
    backupDatabase()
        .then(() => console.log('데이터베이스 백업 완료'))
        .catch(err => console.error('백업 실패:', err));
});
 

Node.js 프로세스 관리

Node.js 프로세스가 중단되면 스케줄된 작업도 중지됩니다. 따라서 프로세스 관리 도구(PM2 등)를 사용하여 Node.js 애플리케이션을 항상 실행하도록 설정해야 합니다.

결론

node-cron은 Node.js에서 크론 잡을 구현하기 위한 간편하고 강력한 도구입니다. 다양한 크론 표현식을 사용하여 정확한 시간에 작업을 실행할 수 있으며, 동적 스케줄링도 지원합니다. Node.js 애플리케이션에서 정기적인 작업을 자동화해야 할 때 node-cron을 활용하여 효율적으로 작업을 관리할 수 있습니다.

728x90
728x90