728x90

1. 💡 @nestjs/schedule 모듈의 역할
@nestjs/schedule 모듈은 NestJS 애플리케이션 내에서 정기적인 백그라운드 작업(Scheduled Jobs)을 쉽게 구현할 수 있도록 지원하는 모듈입니다. 이 모듈은 내부적으로 Node.js의 node-cron 및 setTimeout/setInterval 기능을 활용하여, 서버를 재시작할 필요 없이 정해진 시간에 특정 비즈니스 로직이 자동으로 실행되도록 합니다.
주요 특징
- 데코레이터 기반: @Cron(), @Interval(), @Timeout()과 같은 데코레이터를 사용하여 메서드에 실행 시점을 지정합니다.
- DI 통합: 스케줄링 로직을 서비스(Provider) 클래스 내부에 정의할 수 있어, 데이터베이스 접근, API 호출 등 다른 DI된 서비스와의 상호작용이 용이합니다.
- 간편한 설정: 복잡한 외부 크론(Cron) 서비스나 메시지 큐 없이도 간단한 정기 작업을 구현할 수 있습니다.
728x90
2. 🛠️ 모듈 설치 및 설정
2.1. 설치
스케줄 모듈을 사용하려면 먼저 라이브러리를 설치해야 합니다.
npm install @nestjs/schedule
2.2. 모듈 등록
애플리케이션의 루트 모듈(AppModule) 또는 특정 기능 모듈에 ScheduleModule을 등록합니다.
// src/app.module.ts
import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';
@Module({
imports: [
// 💡 ScheduleModule을 등록하여 스케줄러 기능을 활성화합니다.
ScheduleModule.forRoot(),
// ...
],
// ...
})
export class AppModule {}
728x90
3. 🎯 핵심 데코레이터 소개
@nestjs/schedule은 세 가지 주요 데코레이터를 통해 실행 시점을 정의합니다. 이 데코레이터들은 Provider 클래스의 메서드에 적용되어야 합니다.
| 데코레이터 | 역할 | 설명 |
| @Cron(cronTime) | 특정 시각 또는 간격 | 리눅스에서 사용되는 Cron 표현식을 사용하여 복잡하고 정교한 실행 시점을 지정합니다. |
| @Interval(milliseconds) | 반복 간격 | 지정된 시간(밀리초, ms)마다 반복하여 메서드를 실행합니다. |
| @Timeout(milliseconds) | 단일 지연 실행 | 애플리케이션 시작 후 지정된 시간(밀리초, ms)이 지난 뒤 단 한 번 메서드를 실행합니다. |
예시 (다음 주제에서 실습할 내용):
// tasks.service.ts
import { Injectable, Logger } from '@nestjs/common';
import { Cron, Interval } from '@nestjs/schedule';
@Injectable()
export class TasksService {
private readonly logger = new Logger(TasksService.name);
// 💡 매일 오전 2시 30분 0초에 실행
@Cron('0 30 2 * * *')
handleCron() {
this.logger.log('정기 DB 백업 시작!');
// ... DB 백업 로직 ...
}
// 💡 5초(5000ms)마다 반복 실행
@Interval(5000)
handleInterval() {
this.logger.log('5초마다 캐시 업데이트 시도');
// ... 캐시 업데이트 로직 ...
}
}
728x90
'Nest.js를 배워보자 > 8. NestJS에서 Cron, Scheduler 구현하기' 카테고리의 다른 글
| DB 백업 및 정기 작업 실습 (MySQL 예시) (0) | 2025.12.02 |
|---|---|
| Cron, Interval, Timeout 실습: 정기 작업 구현 (0) | 2025.12.02 |