Node.js에서 작업 스케줄러 구현

이 기사에서는 작업 스케줄러가 무엇이며 nodejs에서 작업 스케줄러를 구현하는 방법을 살펴봅니다. Node.js에서 작업 스케줄러 구현

Nodejs에 대한 최근 기사,

PM2 for Node.js developers

Building P2P Video Chat Application using webRTC and Node.js

Understanding EventEmitter in Node.js With a UseCase

응용 프로그램 서버가 물리적 중단 없이 주기적으로 파일을 백업하는 방법이 궁금했던 적이 있습니다. 이것은 Cron 작업이 들어오는 곳입니다.

Cron 작업은 수행하도록 구성된 작업을 수행하기 위해 주기적으로 작업을 예약합니다.

크론 작업이 중요한 역할을 하는 사용 사례는 거의 없습니다. 그들은,

  • 로그 파일 삭제 - 응용 프로그램은 많은 로그를 생성합니다. 오래된 로그를 지우면 서버 공간이 많이 절약됩니다. cron 작업을 사용하여 수행할 수 있습니다.

  • DB 백업 - 데이터베이스 백업은 재해로부터 응용 프로그램을 저장합니다. 크론 작업이 도움이 될 것입니다.

  • 응용 프로그램 논리 - cron 작업을 사용하여 시간을 기준으로 일부 응용 프로그램 논리를 수행할 수 있습니다.

  • cron 작업 작동 방식



    프로덕션 애플리케이션에서 데이터베이스의 이전 레코드를 보관하기 위해 cron 작업을 작성합니다.

    먼저 프로젝트를 만들고 다음 종속 항목을 설치합니다.

    npm init --yes
    npm install express node-cron mongoose faker

  • express - nodejs의 웹 서버 라이브러리

  • node-cron - nodejs의 cron 작업 스케줄러 라이브러리

  • 몽구스 - MongoDB용 ORM

  • 그런 다음 Model.js라는 파일을 만들고 다음 코드를 추가합니다.

    const mongoose = require('mongoose');
    
    const weatherSchema = new mongoose.Schema({
        minTemp : {
            type: Number
        },
        maxTemp : {
            type : Number
        },
        recordedDate : {
            type : Date
        },
        isArchived : {
            type : Boolean,
            default : false
        }
    });
    
    class Weather {
    
        static getRec(date) {
            return this.find({
                recordedDate : {
                    '$lte' :new Date(date)
                }
            }).exec();
        }
    
        static insertBulkData(data){
            return this.insertMany(data);
        }
    
        static archiveData(date){
            
            return this.updateMany({
                recordedDate : {
                    '$lte' :new Date(date)
                }
            },{
                $set : {
                    isArchived : true
                }
            }).exec();
        }
    
        static getArchivedData(){
            return this.find({
                isArchived : true
            }).exec();
        }
    }
    
    weatherSchema.loadClass(Weather);
    
    module.exports = mongoose.model('Weather',weatherSchema)

    주로 Model.js는 데이터베이스에 날씨 데이터를 저장하는 DB 테이블에 대한 몽구스 스키마를 생성합니다.

    그런 다음 scheduler.js라는 파일을 만들고 작업 스케줄러에 대한 코드를 추가합니다.

    cron.schedule("* * * * * *",() => {
        console.log("Running every minute");
    })

    cron schedule은 언급된 시간 형식에 대한 작업을 예약합니다.



    크론 작업 형식에 대해 자세히 알아보려면 자세히 설명하는 훌륭한 사이트crontab-guru를 참조하십시오.

    Mongoose를 Express와 연결하여 더미 데이터를 데이터베이스에 삽입하십시오.

    const cron = require('node-cron');
    const express = require('express');
    const mongoose = require('mongoose');
    const app = express();
    const faker = require('faker');
    const model = require('./Model');
    
    
    mongoose.connect('mongodb://localhost:27017/nodescheduler').then((res) => {
    
        console.log('mongoose connected successfully');
    
        app.get("/insertdata",async (req,res) => {
            let data = [];
            for(let i=0;i < 100;i++){
                let record = {
                    minTemp: faker.random.number(),
                    maxTemp : faker.random.number(),
                    recordedDate : faker.date.past()
                }
                data.push(record);
            }
    
            await model.insertBulkData(data);
    
            res.send("Data is inserted");
        })
    
        app.listen(4000,() => {
            console.log("Server is running port 4000");
        })
        
    
    })
    .catch((err) => {
        console.error(err);
    })

    fakerjs을 사용하여 일부 더미 데이터를 삽입합니다. 명령으로 스크립트를 실행하고 URLhttp://localhost:4000/insertdata 을 방문하십시오.

    node scheduler.js

    작업 스케줄러를 테스트하기 위해 일부 대량 더미 데이터를 생성합니다. 이제 작업 스케줄러를 추가할 차례입니다.

    cron.schedule("* * * * */3 *",async() => {
    
        var d = new Date();
        d.setMonth(d.getMonth() - 2); //1 month ago
        
        await model.archiveData(d);
    
        console.log("scheduler => archived");  
    })

    위의 크론 작업은 3개월마다 실행되어 데이터를 데이터베이스에 보관된 것으로 표시합니다.

    마찬가지로 cron 작업을 사용하여 애플리케이션 로직에 대한 작업을 예약할 수 있습니다.

    요약



    무엇보다도 cron 작업은 일부 애플리케이션 개발 사용 사례에서 중요한 역할을 합니다. 응용 프로그램 개발에서 cron 작업이 어떻게 작동하는지 아는 것이 항상 좋습니다.

    최소한의 노력으로 생산 수준 표준에서 작업 스케줄러를 구현하려면 bree을 확인하는 것이 좋습니다.

    참조 : https://crontab.guru

    좋은 웹페이지 즐겨찾기