댓글 검색 목록

[Nodejs] Node-Cron을 사용하여 Node.js에서 Cron 작업 예약

페이지 정보

작성자 운영자 작성일 20-08-14 13:41 조회 679 댓글 0

개발자로서 우리는 특정 일정에 따라 일부 프로세스가 발생하기를 원하는 상황을 자주 실행합니다. 

매주 월요일 저녁에 오류 로그를 지우고, 이벤트가 발생하기 전날 이벤트에 체크인 하지 않은 사용자에게 이메일을 보내고, 오래된 데이터를 보관하는 등의 작업을 수행 할 수 있습니다.


이와 같은 상황에서 우리는 크론 작업을 찾습니다! Node.js에서 Cron 작업 설정은 node-cron의 도움으로 간단합니다. 무엇을 할 수 있는지 살펴 보겠습니다.


https://blog.sabinthedev.com/scheduling-cron-jobs-in-nodejs-with-node-cron-ckdpewp3p014bkbs1fekfhxlp 


우리가 구축 할 것 


아마도 누군가가 당신의 생산성과 그날의 발전을 칭찬하면서 매일 당신을 보완 해주기를 원할 것입니다. 가능한 노드 크론으로!


이 튜토리얼에서 우리는 Node.js에 Express 서버를 설정하여 저평가 된 개발자 (또는 자신 ...)에게 매일 칭찬을 받을 만합니다. 이 서버는 매일 저녁 5시 30 분에 작업을 실행하도록 예약하여 작업 중인 생산적인 날의 개발자를 축하합니다. 시작하자!


이 가이드에서는 머신에 Node.js가 설치되어 있다고 가정합니다.


설정하기 


여기서 첫 번째 단계는 간단한 Express 서버를 설치하고 실행하는 것입니다. 프로젝트를 보관할 디렉토리가 필요합니다.


mkdir <project-name> 
cd <project-name>

모듈 설치 


이제 필요한 패키지를 설치할 수 있도록 이 디렉토리에서 NPM을 초기화 하려고 합니다.


npm init

package.json 파일이 생성되었으므로 이제 해당 패키지를 설치하겠습니다. 다음이 필요합니다.


  • express - 웹 서버를 위한 프레임 워크
  • node-cron - 작업을 예약하는 데 사용
  • nodemailer - 이메일을 보내는 데 사용

npm i --save express node-cron nodemailer


기본 서버 구축 


서버의 엔트리 파일 이름은 index.js입니다. 다음을 실행하여 만듭니다.


touch index.js

그리고 다음과 같이 간단한 익스프레스 서버를 시작합니다.


const express = require('express'),
      app = express(),
      nodemailer = require('nodemailer'),
      cron = require('node-cron'),
      PORT = 3001

app.listen(PORT, () =>  
    console.log(`Listening on ${PORT}`)
)

여기에서는 맨 위에 필요한 모든 패키지를 가져 와서 익스프레스 앱을 인스턴스화하고 포트 3000에서 서버를 시작합니다.


익스프레스 서버가 모두 설정되었습니다! 다음 명령을 실행하여 서버를 시작할 수 있습니다.


node index.js


우리의 작업 일정 


서버 세트를 사용하여 이제 일정을 잡을 준비가 되었습니다! node-cron에는 모든 작업의 ​​시작점인 schedule()이라는 하나의 주요 함수가 있습니다. schedule()은 세 가지 매개 변수를 사용할 수 있습니다.

  1. expression - 태스크 실행 시기를 정의하는 cron 표현식입니다. 여기에 정의 된 라이브러리에 특정한 몇 가지 추가 옵션과 함께 표준 cron 구문을 따릅니다.
  2. function - 지정된 시간 간격으로 실행되는 함수입니다.
  3. options - 이것은 구성 옵션을 받는 개체입니다. 이러한 옵션은 여기에 설명되어 있습니다. 이 자습서에서는 추가 옵션을 설정하지 않으므로 이 매개 변수를 생략하겠습니다.

다음은 간단한 예입니다.


carbon (3).png 


여기서는 다음 식에 따라 실행되도록 작업을 예약합니다. * * * * *, 매분 평가됩니다. 이 작업이 실행될 때마다 1 분마다 실행되는 메시지가 콘솔에 기록됩니다.


다음은 표현식의 몇 가지 예입니다.


  • * * * * Fri 매주 금요일에 실행
  • 1 * * * * 날짜의 분이 1 일 때마다 실행됩니다. (12:01, 3:01, 4:01)
  • 45 7 * * * 매일 오전 7:45에 실행 (24 시간제 사용)

시나리오 (매일 오후 5시 30 분)에서 찾을 표현은 다음과 같습니다. 30 17 * * *


그러니 일정을 잡으세요!


const express = require('express'),
      app = express(),
      nodemailer = require('nodemailer'),
      cron = require('node-cron'),
      PORT = 3001

cron.schedule('30 17 * * *', () => 
    console.log('Running at 5:30pm every day')
)

app.listen(PORT, () =>  
    console.log(`Listening on ${PORT}`)
)

대박! 매일 오후 5시 30 분에 작업을 실행하도록 예약하는 익스프레스 서버가 있습니다. node-cron은 설정을 매우 간단하게 만들었습니다. 이제 우리는 이 프로젝트를 끝내고 우리에게 필요한 격려를 보낼 수 있습니다!


이메일 보내기 


메일 보내기 요청을 설정하기 위해 Gmail 계정을 사용할 것입니다. 이메일을 보내려고 할 때 일종의 인증 오류가 발생하면 Gmail이 보안 수준이 낮은 앱을 차단했기 때문일 수 있습니다. 여기에서 보안 수준이 낮은 앱 허용으로 이 설정을 켜야 합니다.


참고 : 테스트가 끝나면 이 설정을 다시 끄는 것이 좋습니다.


Set up our transporter 


transporter라고 하는 것을 설정해야 합니다. 여기에는 인증 세부 정보 및 이메일 호스트에 대한 정보가 있습니다.


const transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'your-email@gmail.com',
        pass: 'password'
    }
})


참고 : 실제 시나리오에서 인증 세부 정보는 소스 코드에 자격 증명을 저장하지 않도록 비밀 또는 일종의 환경 변수로 저장해야 합니다.


이것은 이메일 전송을 시작할 준비가 된 전송을 설정합니다. 예약 된 작업 내에서 이메일을 보내겠습니다.


const express = require('express'),
      app = express(),
      nodemailer = require('nodemailer'),
      cron = require('node-cron'),
      PORT = 3001

const transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'your-email@gmail.com',
        pass: 'password'
    }
})

cron.schedule('30 17 * * *', async () => 
    transporter.sendMail({
        from: 'your-email@gmail.com',
        to: 'recipient@hey.com',
        subject: 'You are awesome',
        text: 'You did SUCH A GOOD JOB TODAY. CONGRATS!! ???'
    }, (error, info) => {
        if (error) {
            console.log(error);
        } else {
            console.log('Email sent: ' + info.response);
        }
    })
)

app.listen(PORT, () =>  
    console.log(`Listening on ${PORT}`)
)


그리고 그렇게 할 것입니다! 매일 오후 5시 30 분에 이메일이 your-email@gmail.com에서 recipient@hey.com으로 전송됩니다. 제목은 You are awesome이며 매우 고무적인 메시지입니다 ?


결론 


신청서가 완료되면 이제 매일 (또는 작업을 구성하는 방법과 얼마나 궁핍한지에 따라 더 자주) 매우 필요한 격려를 보낼 수 있습니다.



node-cron을 사용하면 원하는 시간 간격으로 작업을 매우 쉽게 예약 할 수 있습니다. 또한 꽤 멋진 사용 사례를 제공하는 많은 다른 구성이 있습니다. 다양한 구성 옵션으로 무엇을 할 수 있는지 확인하기 위해 문서를 읽는 것이 좋습니다.



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.