본문 바로가기

[Project] 프로젝트 삽질기14 (feat 큐 모니터링)

어가며

사이드 프로젝트에서 푸시 알림을 활용한 서비스를 개발하고 있습니다. 그 과정에서 생각하고 배웠던 점들을 하나씩 작성하고자 합니다. Queue를 활용한 푸시 알림 서버 구축을 하면서, redis 기반의 Queue인 bull.js를 잘 활용하기 위해서는 Queue를 모니터링할 수 있어야 한다고 생각했습니다. bull과 관련한 모니터링 환경이 많았지만, 저는 그중에서 bull-monitor를 활용해서 모니터링 시스템을 구축했습니다. 이번 시간에는 bull-monitor에 대해 조금 더 자세히 알아보겠습니다.  

 

 

 

 

 
 
 
 
 
 
 
 

 

큐 모니터링

만약 Nest.js를 활용하면서, Queue를 구축할 때, bull을 활용하게 된다면, bull Queue를 모니터링할 수 있는 시스템이 필요할 것입니다. 이 때 많이 활용하는 것이 Taskforce와 bull-board, 그리고 bull-monitor입니다. 이 중에서 Taskforce의 경우 요금이 나가기 때문에, 선택하기 힘들었기에, bull-board와 bull-monitor 중에 하나를 사용해야겠다고 생각했습니다.

 

이 중에서, bull-monitor가 UI&UX가 조금 더 사용하기 쉽다고 판단하여 bull-monitor를 프로젝트에 활용해야겠다고 생각했습니다.  

 

 

1. 설치

NestJS에서 bull-monitor를 활용하기 위해서 먼저 설치를 해보겠습니다.

 

npm i @bull-monitor/express

 

 

 

2. 설정

그 후, bull-monitor를 아래와 같이 모듈로 설정합니다.

 

 

// bull-monitor.module.ts

import { BullModule } from '@nestjs/bull';
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { BullMonitorService } from './bull-monitor.service';

@Module({
  imports: [BullModule.registerQueue({ name: 'person' })],
  providers: [BullMonitorService],
})
export class BullMonitorModule implements NestModule {
  constructor(private monitor: BullMonitorService) {}
  async configure(consumer: MiddlewareConsumer) {
    await this.monitor.init();
    consumer.apply(this.monitor.router).forRoutes('/bull-monitor');
  }
}

 

 

imports를 통해 BullModule을 활용해서, person이라는 큐를 등록했습니다. 그 후 providers로 BullMonitorService를 주입받았습니다. 또한 BullMonitorModule을 미들웨어로 사용할 수 있도록 설정했습니다. 그럼 위와 같이 설정했다면, BullMonitorService를 어떻게 설정해야 하는지 알아보겠습니다.

 

 

// bull-monitor.service.ts

import { BullMonitorExpress } from '@bull-monitor/express';
import { InjectQueue } from '@nestjs/bull';
import { Injectable } from '@nestjs/common';
import { Queue } from 'bull';
import { BullAdapter } from '@bull-monitor/root/dist/bull-adapter';

@Injectable()
export class BullMonitorService extends BullMonitorExpress {
  constructor(@InjectQueue('person') personQueue: Queue) {
    super({ queues: [new BullAdapter(personQueue)] });
  }
}

 

 

service는 위와 같이 설정합니다. 여기서 봐야할 것은, personQueue를 주입받아서, 상속받은 BullMonitorExpress 클래스에 queues 목록을 전달합니다. 이렇게 설정하고, 서버 URL뒤에 /bull-monitor를 입력해서 들어가면,  

 

 

 

 

 

위와 같은 모니터링 툴을 볼 수 있습니다.

 

 

 

 


 

 

 

 

마치며

앞으로도 팀의 발전을 돕는 개발자가 되기 위해 노력하려 합니다. 팀에 필요한 부분이 무엇일지 고민하면서, 팀에 도움이 된다면, 열심히 공부해서 실무에 적용할 수 있는 개발자가 되기 위해 노력하고 싶습니다. 팀의 성장에 기여할 수 있는 개발자가 되겠습니다. 

 

 

 

 

 

 


 

 

 

 

 

참고 및 출처

 

@bull-monitor/express

bull-monitor for express. Latest version: 4.1.0, last published: a month ago. Start using @bull-monitor/express in your project by running `npm i @bull-monitor/express`. There are 2 other projects in the npm registry using @bull-monitor/express.

www.npmjs.com

 

GitHub - s-r-x/bull-monitor: 🐂 Standard UI for Bull and BullMQ.

🐂 Standard UI for Bull and BullMQ. Contribute to s-r-x/bull-monitor development by creating an account on GitHub.

github.com

 

Bull monitor

 

s-r-x.github.io