AI, Nestjs에서 Cron() 사용 법

익스랩 최고 관리자

·

2023. 3. 8. 10:21

반응형

 

 

기본 셋팅

 

NestJS에서 Cron 작업을 수행하기 위해 @nestjs/schedule 패키지를 사용할 수 있습니다. 이 패키지는 Cron 작업과 같은 일정 기반 작업을 관리하기 위한 모듈을 제공합니다.

 

먼저, @nestjs/schedule 패키지를 설치해야 합니다.

 

npm install --save @nestjs/schedule

 

 

그런 다음, NestJS의 어떤 모듈에서나 ScheduleModule을 가져와 forRoot() 메소드를 사용하여 Cron 작업 관리자를 설정할 수 있습니다. 다음 예제에서는 AppModule에서 ScheduleModule을 가져옵니다.

 

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

@Module({
  imports: [ScheduleModule.forRoot(), TasksModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

 

이제 Cron 작업을 수행하기 위해 작업을 생성해야 합니다. 이를 위해 @nestjs/schedule 패키지에서 제공하는 @Cron() 데코레이터를 사용합니다. @Cron() 데코레이터는 작업의 실행 주기를 지정하기 위해 Cron 표현식을 사용합니다. 다음 예제에서는 5분마다 실행되는 작업을 생성합니다.

 

import { Injectable } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';

@Injectable()
export class TasksService {
  @Cron('0 */5 * * * *')
  handleCron() {
    console.log('Called every 5 minutes');
  }
}

 

 

마지막으로, 작업을 수행할 서비스나 컨트롤러 등에 대해 @Injectable() 데코레이터를 사용하여 의존성 주입이 가능하도록 만들어야 합니다. 위 예제에서는 TasksService에서 @Injectable() 데코레이터를 사용합니다.

 

import { Injectable } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';

@Injectable()
export class TasksService {
  @Cron('0 */5 * * * *')
  handleCron() {
    console.log('Called every 5 minutes');
  }
}

 

이제 Cron 작업이 실행될 준비가 되었습니다!

 

 


@Cron 설정 방법

 

@Cron() 데코레이터의 매개변수로는 Cron 표현식을 사용하여 작업의 실행 주기를 설정할 수 있습니다. Cron 표현식은 다음과 같은 구조를 가집니다.

 

┌───────────── second (0 - 59)
│ ┌───────────── minute (0 - 59)
│ │ ┌───────────── hour (0 - 23)
│ │ │ ┌───────────── day of the month (1 - 31)
│ │ │ │ ┌───────────── month (1 - 12)
│ │ │ │ │ ┌───────────── day of the week (0 - 7) (Sunday is both 0 and 7)
│ │ │ │ │ │
│ │ │ │ │ │
* * * * * *

 

위의 표현식에서 별표(*)는 해당 필드의 모든 값을 나타냅니다. 예를 들어, * * * * * * 표현식은 매 초마다 작업을 실행합니다.

다른 예로, 0 0 * * * * 표현식은 매 시간 정각마다 작업을 실행합니다.

 

@Cron() 데코레이터에서는 다음과 같은 특수 문자를 사용할 수 있습니다.

  • *: 해당 필드의 모든 값을 나타냅니다.
  • ,: 여러 값 또는 범위를 지정할 수 있습니다. 예를 들어, 1,3,5 또는 1-5와 같이 사용할 수 있습니다.
  • -: 범위를 나타냅니다. 예를 들어, 2-6은 2부터 6까지의 모든 값을 나타냅니다.
  • /: 지정된 간격으로 실행되도록 지정합니다. 예를 들어, */5는 5분마다 실행되도록 지정합니다.

 

또한, @Cron() 데코레이터의 매개변수로는 선택적으로 Timezone 옵션을 설정할 수 있습니다. 이 옵션은 Cron 작업의 실행을 특정 Timezone에서 수행하도록 지정합니다. 이 옵션이 지정되지 않은 경우, 시스템의 기본 Timezone이 사용됩니다. 다음은 Timezone 옵션의 사용 예입니다.

 

import { Injectable } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';

@Injectable()
export class TasksService {
  @Cron(CronExpression.EVERY_5_MINUTES, {
    timeZone: 'Asia/Seoul',
  })
  handleCron() {
    console.log('Called every 5 minutes in Seoul Timezone');
  }
}

 

위의 예제에서는 timeZone 옵션으로 'Asia/Seoul'을 지정하여 서울 Timezone에서 Cron 작업을 수행합니다.

반응형

💖 포스터에게 힘 보내기 💖

카카오뱅크
3333-25-9477515
치킨 좋아하는 포스터