들어가며
사이드 프로젝트에서 푸시 알림을 활용한 서비스를 개발하고 있습니다. 그 과정에서 생각하고 배웠던 점들을 하나씩 작성하고자 합니다. 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를 입력해서 들어가면,
위와 같은 모니터링 툴을 볼 수 있습니다.
마치며
앞으로도 팀의 발전을 돕는 개발자가 되기 위해 노력하려 합니다. 팀에 필요한 부분이 무엇일지 고민하면서, 팀에 도움이 된다면, 열심히 공부해서 실무에 적용할 수 있는 개발자가 되기 위해 노력하고 싶습니다. 팀의 성장에 기여할 수 있는 개발자가 되겠습니다.
참고 및 출처
'Project > 서버 개발' 카테고리의 다른 글
[Project] 프로젝트 삽질기16 (feat Connection Pool) (0) | 2022.04.08 |
---|---|
[Project] 프로젝트 삽질기15 (feat TypeORM Query Timeout) (0) | 2022.04.08 |
[Project] 프로젝트 삽질기13 (feat class-transformer) (0) | 2022.03.29 |
[Project] 프로젝트 삽질기12 (feat 직렬화) (0) | 2022.03.29 |
[Project] 프로젝트 삽질기11 (feat pgAdmin4) (0) | 2022.03.28 |