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 작업을 수행합니다.
'Forum of AI' 카테고리의 다른 글
AI, NestJS에서 이메일 인증 방식 구현하기 (0) | 2023.03.14 |
---|---|
AI, 로또 분석하기 1번 : Hot and Cold Numbers (0) | 2023.03.09 |
AI, 죽음에 대한 짧은 에세이를 적어줄 수 있어? (0) | 2023.03.07 |
AI, 요즘 추천하는 여행지가 있어? (0) | 2023.03.06 |
AI, 블로그의 퀄리티를 올리는 방법을 알려줘!! (0) | 2023.03.06 |