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}`);
  }
}

@Processconcurrency 옵션

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 바운드인지 등의 특성에 따라 최적의 값을 찾아 설정하는 것이 중요합니다.

NestJS Redis Bull

다른 개발 정보는 아래 참고하세요!

GOOGLE SpreadSheet EXPORT PDF 크기 비율 조절 2가지