AI, nestjs의 Task Scheduling 활용하기!

익스랩 최고 관리자

·

2023. 3. 3. 12:51

반응형

 

 

nestjs의 Task Scheduling이 뭐야?

 

NestJS에서 제공하는 Task Scheduling 모듈은 cron job을 쉽게 관리할 수 있는 기능을 제공합니다. cron job은 특정 시간 간격으로 실행되는 작업을 의미하는데, 이를 사용하여 백그라운드 작업 등을 자동으로 수행할 수 있습니다.

NestJS의 Task Scheduling 모듈은 간편한 구성과 편리한 사용성을 제공합니다. 특히, 각 모듈에서 직접적으로 Task Scheduling 기능을 사용할 수 있도록 내장된 인터페이스를 제공합니다. 또한, NestJS의 의존성 주입(Dependency Injection) 기능을 이용하여, Task Scheduling 기능을 사용하는 다른 모듈과의 연동이 쉽습니다.

또한 Task Scheduling 모듈은 강력한 로깅 및 오류 처리 기능을 제공하며, 실행 중인 작업의 상태를 모니터링할 수 있습니다. 이를 통해 Task Scheduling 기능의 안정성과 신뢰성을 보장할 수 있습니다.

따라서 NestJS의 Task Scheduling 모듈은 간편하게 cron job을 구성하고 실행할 수 있는 기능을 제공하여, 백그라운드 작업을 처리하는 데 매우 유용합니다.

 

 

 

 

매일 12시에 DB의 값을 체크하는 기능을 만들고 싶은데 Task Scheduling 기능을 사용해야할까?

 

네, 매일 12시에 DB의 값을 체크하는 것은 Task Scheduling 모듈을 사용하여 구현할 수 있습니다. 이를 위해 cron job을 설정하고, 해당 cron job에서 DB 값을 체크하고 필요한 작업을 수행하면 됩니다.

NestJS의 Task Scheduling 모듈을 사용하면 cron job을 쉽게 설정할 수 있으며, 설정된 시간에 실행되도록 자동으로 처리됩니다. 따라서 매일 12시에 DB 값을 체크하는 것도 Task Scheduling 모듈을 사용하여 구현하는 것이 좋습니다.

 

 

 

 

어떻게 만들어야할까?

 

먼저, Task Scheduling 모듈을 사용하기 위해서는 @nestjs/schedule 모듈을 설치해야 합니다.

npm install --save @nestjs/schedule

 

다음으로, app.module.ts 파일에서 ScheduleModule을 임포트하고 모듈에 추가합니다.

import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';

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

 

이제 Task Scheduling 모듈을 사용하여 매일 12시에 MySQL의 값을 체크하는 예제 코드를 작성해보겠습니다.

이 예제에서는 mysql2 모듈을 사용하여 MySQL에 연결합니다.

import { Injectable, Logger } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';
import * as mysql from 'mysql2/promise';

@Injectable()
export class CheckDbValueService {
  private readonly logger = new Logger(CheckDbValueService.name);

  @Cron('0 0 12 * * *') // 매일 12시에 실행
  async checkDbValue() {
    try {
      const connection = await mysql.createConnection({
        host: 'localhost',
        user: 'user',
        password: 'password',
        database: 'database_name',
      });

      const [rows, fields] = await connection.execute('SELECT * FROM table_name');

      // 체크 로직 수행

      await connection.end();

      this.logger.debug('DB 값을 체크했습니다.');
    } catch (error) {
      this.logger.error(`DB 값을 체크하는 중 오류가 발생했습니다. 오류 내용: ${error.message}`);
    }
  }
}

 

위 코드에서 checkDbValue() 메서드에 @Cron() 데코레이터가 적용되어 있습니다.

@Cron() 데코레이터의 첫 번째 인자는 cron job 패턴을 나타냅니다.

이 예제에서는 0 0 12 * * * 패턴을 사용하여 매일 12시에 실행되도록 설정하였습니다.

 

checkDbValue() 메서드에서는 mysql2 모듈을 사용하여 MySQL에 연결하고, SELECT 쿼리를 실행하여 DB 값을 가져옵니다. 이후 체크 로직을 수행하고, 연결을 종료합니다.

 

마지막으로, 이 서비스를 사용하기 위해 app.module.ts 파일에서 해당 서비스를 추가합니다.

import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';
import { CheckDbValueService } from './check-db-value.service';

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

 

위와 같이 작성하면, 매일 12시에 checkDbValue() 메서드가 실행되어 MySQL의 값을 체크하게 됩니다.

 

'감사합니다'

반응형

💖 포스터에게 힘 보내기 💖

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