NestJS Redis Bull 사용하기
NestJS에서 Redis와 Bull 사용하기
NestJS는 백엔드 애플리케이션을 구축하기 위한 강력한 프레임워크로, Redis 및 Bull과 같은 라이브러리와의 통합도 간단하게 제공됩니다. 아래는 NestJS Redis Bull을 사용하여 비동기 작업 큐를 구성하는 방법에 대한 설명입니다.
목차
1. NestJS Redis Bull 설치
https://nestjs.com/ 먼저 필요한 패키지를 설치합니다.
npm install --save @nestjs/bull bull redis
2. 모듈 설정
Bull 모듈을 앱 모듈에 임포트합니다.
import { BullModule } from '@nestjs/bull';
@Module({
imports: [
BullModule.forRoot({
redis: {
host: 'localhost',
port: 6379,
},
}),
],
})
export class AppModule {}
3. 큐 정의
작업을 정의하기 위한 큐를 생성합니다.
import { BullModule } from '@nestjs/bull';
@Module({
imports: [
BullModule.registerQueue({
name: 'audio',
}),
BullModule.registerQueue({
name: 'video',
}),
],
})
export class JobsModule {}
4. 프로듀서 서비스 생성
작업을 큐에 추가하는 프로듀서 서비스를 생성합니다.
import { Injectable } from '@nestjs/common';
import { Queue } from 'bull';
import { InjectQueue } from '@nestjs/bull';
@Injectable()
export class JobsService {
constructor(
@InjectQueue('audio') private audioQueue: Queue,
@InjectQueue('video') private videoQueue: Queue,
) {}
async addAudioJob(data: any) {
await this.audioQueue.add(data);
}
async addVideoJob(data: any) {
await this.videoQueue.add(data);
}
}
5. 컨슈머 생성
작업을 처리하는 컨슈머를 정의합니다.
import { Processor, Process } from '@nestjs/bull';
import { Job } from 'bull';
@Processor('audio')
export class AudioProcessor {
@Process()
handleAudioJob(job: Job<any>) {
// job.data에 작업 데이터가 포함됩니다.
// 여기서 오디오 처리 로직을 추가합니다.
}
}
6. 작업 상태 감시
이벤트 리스너를 사용하여 작업의 상태를 감시할 수 있습니다.
import { OnQueueCompleted, OnQueueFailed } from '@nestjs/bull';
@Processor('audio')
export class AudioProcessor {
@OnQueueCompleted()
completed(job: Job, result: any) {
console.log(`Job ${job.id} has completed! Result: ${result}`);
}
@OnQueueFailed()
failed(job: Job, error: Error) {
console.error(`Job ${job.id} has failed! Error: ${error.message}`);
}
}
@Process
의 concurrency
옵션
NestJS Redis Bull @Process
데코레이터 내에서 concurrency
옵션은 Bull 큐의 해당 프로세서에서 동시에 처리될 작업의 수를 정의합니다. 이 옵션을 사용하면 특정 작업 처리를 동시에 여러 개 진행하게 하여 처리 능력을 높일 수 있습니다.
예를 들어, 만약 concurrency
값을 5로 설정하면, 해당 프로세서는 동시에 최대 5개의 작업을 처리하게 됩니다.
사용 방법:
import { Processor, Process } from '@nestjs/bull';
import { Job } from 'bull';
@Processor('audio')
export class AudioProcessor {
@Process({ concurrency: 5 })
async handleAudioJob(job: Job<any>) {
// 오디오 처리 로직
}
}
참고:
concurrency
값을 너무 높게 설정하면 시스템의 리소스에 부담을 줄 수 있으므로, 시스템의 사양과 작업의 특성에 따라 적절한 값을 설정해야 합니다.concurrency
옵션은 작업이 CPU 바운드인지, I/O 바운드인지 등의 특성에 따라 최적의 값을 찾아 설정하는 것이 중요합니다.
다른 개발 정보는 아래 참고하세요!