Node.js 애플리케이션에서 특정 작업을 정기적으로 실행해야 할 때가 있습니다. 예를 들어, 데이터베이스 백업, 로그 파일 회전, API 호출 등을 일정한 시간 간격으로 수행해야 하는 경우가 대표적입니다. 이러한 작업을 자동화하기 위해 Node.js에서는 크론 잡 스케줄러를 사용합니다.
크론 잡이란?
크론 잡은 유닉스 계열 운영체제에서 특정 작업을 주기적으로 실행하도록 예약하는 시스템입니다. 정해진 시간, 날짜, 요일에 따라 명령어나 스크립트를 실행할 수 있습니다.
Node.js에서 크론 잡 사용하기
Node.js에서 크론 잡을 사용하기 위해 다양한 라이브러리가 존재하지만, 가장 많이 사용되는 라이브러리는 node-cron입니다. node-cron은 간단하고 직관적인 API를 제공하여 크론 잡을 쉽게 설정할 수 있도록 해줍니다.
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';
동적 스케줄링
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을 활용하여 효율적으로 작업을 관리할 수 있습니다.
'Node.js 를 배워보자' 카테고리의 다른 글
Node.js Express에서는 모듈을 동적으로 호출 (0) | 2024.12.05 |
---|---|
Node.js를 활용한 Oracle과 PostgreSQL 간 데이터 이동: 실전 가이드 (0) | 2024.12.05 |
Swagger UI Express: API 문서화의 새로운 지평을 열다 (0) | 2024.12.02 |
Node.js와 Vue.js로 MQTT 구현하기: 실시간 IoT 애플리케이션 개발의 모든 것 (0) | 2024.11.25 |
Windows&Mac 에서 Node.js를 최신 버전으로 업데이트하려면 (0) | 2024.11.22 |