NestJS @Cron사용하기 (스케쥴러)

안녕하세요. 알렉스 입니다. 이번에는 NestJS을 이용하여 restAPI요청(GET)을 해보도록 하겠습니다. 


공식 사이트에서도 사용 방법에 대한 설명이 있습니다. 

링크 : Task Scheduling


하지만 기본적인 동작 방법은 아래 글을 읽으시면 됩니다.


일단 NestJS에서 Cron을 사용하기 위해서는 관련 npm을 2개 설치해야 합니다.

npm install --save @nestjs/schedule


npm install --save-dev @types/cron


이제 설치후 아래와 같이 코드를 작성하면 됩니다.


// src/app.module.ts
import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
imports: [ScheduleModule.forRoot()], // ScheduleModule를 사용하기 위해 Import
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}


app.module.ts에서 ScheduleModule를 Import하여 app에서 스케쥴러를 사용할수 있게 합니다.


// src/app.service.ts
import { Injectable } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';

@Injectable()
export class AppService {
// 데코레이터 @Cron을 이용하여 일정시간마다 서비스가 실행되도록 한다.
// '* * * * * *'인자는 매초마다 실행할 것을 말한다.
@Cron('* * * * * *')
getHello() {
console.log('Hello : ', new Date());
}
}


이제 app.service.ts에 가서 스케쥴러를 사용합니다. 위 코드는 매초마다 console.log로 문자열 'Hello'와 오른쪽에 출력된 날짜가 나옵니다. '* * * * * *'는 매초마다 실행하라는 명령으로 코드를 실행하면 매초마다 터미널에 Hello문자열이 출력됨을 확인할수 있습니다.


사진1) Cron 사용 결과

그러면 이제 @Cron에 어떤 인자가 들어가야지 스케쥴러의 일정을 알수 있는지 확인해야 합니다.


*    *    *    *    *    *

|    |    |    |    |    |

|    |    |    |    |    day of week : 1주일은 1~7로 나타냅니다. 1은 월요일 입니다.

|    |    |    |    month : 달을 의미하며 1~12로 나타냅니다. 1은 1월을 의미합니다.

|    |    |    day of month : 그 달의 일을 말합니다. 1 ~ 31까지 있고 1은 그 달의 1일을 말합니다.

|    |    hour : 시간을 말합니다. 24시 기준이며 0 ~ 23까지 있습니다.

|    minit : 분을 말합니다. 0~59까지 있습니다.

second : 초를 말하며 0 ~ 59까지 있습니다.


만약 해당 Cron을 1분마다 자동으로 실행할려면 '10 * * * * *'을 사용합니다. 이는 1분중 10초때에 실행한다는 의미 입니다. 아래 예시도 참고 부탁드립니다.


'30 * * * * *' : 초가 30일때 실행

'0 15 * * * *' : 분이 15분일때 실행

'0 */15 9-18 * * *' : 9시부터 18시까지 15분마다 실행

0 15 13 * * 1-5 : 월요일 부터 금요일까지 13:15분에 실행

0 59 23 * * * : 매일 23:59분에 실행


 

 위 예제 GitHub 링크 및 Branch : NestJS_Cron



댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Lesson 12_2 참조를 이용한 프로퍼티노드(Property Node)