대회 중 대시보드 데이터를 대시보드를 보고 있는 유저에게 5초마다 전송해야 한다. 이를 db 쿼리를 통해 가져온다면 db 부담이 매우 커질것이라고 예상되어 REDIS를 사용하여 대시보드 데이터를 메모리에 저장하기로 결정했다.

대회 중에 대시보드 데이터를 전달해 주는 방식을 2가지로 결정하였다.

  1. 대회 참여자는 사용중인 웹소켓을 이용하여 보내준다.
  2. 대회 미참여자는 namespace가 dashboards 인 웹소켓에 새로 연결하고 데이터를 보내준다.

데이터는 클라이언트가 요청하면 보내준다.

데이터는 대회중엔 redis에서 가져와 웹소켓을 사용해 전달하고, 대회가 끝나면 http 요청을 통해 db에서 가져오는 방식으로 결정한다.

1. 대시보드 모듈을 만들어 준다.

nest g resource dashboard

websocket 방식으로 선택하면 알아서 모듈이 척척 만들어진다.

2. redis를 사용하기 위해 캐시 모듈을 사용한다.

pnpm install @nestjs/cache-manager cache-manager --save
import { Module } from '@nestjs/common';
import { CacheModule } from '@nestjs/cache-manager';
import { AppController } from './app.controller';

@Module({
  imports: [CacheModule.register()],
  controllers: [AppController],
})
export class AppModule {}

모듈에 임포트 한다. 이 모듈을 모든 곳에서 쓰고 싶다면 isGlobal 옵션을 true로 주면 된다. nestjs에서 공식으로 지원하는 캐시 방법이다.(https://docs.nestjs.com/techniques/caching#caching)