왜 Redis 모듈을 직접 만들었는가?

  1. Redis를 RefreshToken 저장소로 사용하면서, 동시에 Message Queue 를 사용하기 위해 Pub/Sub

구현하기 위해서는 다양한 명령어를 사용해야 한다.

→ Cache 모듈도 활용할 수 있지만, Nestjs의 Cache 모듈을 사용했을 시 에러가 다수 발생하여, 직접 만들어보기로 진행

→ 또한 NestJS 자체 모듈을 활용 시 Redis에 연결이 두번 연결되는 단점 확인

구현 방법

1. Redis 설치

npm install ioredis

먼저 Ioredis를 설치해준다.

2. Redis 연결

import { ConfigService } from '@nestjs/config';
import { Redis } from 'ioredis';
const configService = new ConfigService();

export const redisProvider = [
  {
    provide: 'REDIS_CLIENT',
    // useFactory 구문을 사용하여 동적으로 Provider를 만드는 작업
    // Provider는 인수를 받고 팩토리 함수에서 반환된 값으로 제공한다.
    useFactory: async () => {
      const redis = new Redis({
        // Redis Config 설정
        host: configService.get<string>('REDIS_HOST'),
        port: configService.get<number>('REDIS_PORT'),
        password: configService.get<string>('REDIS_PASSWORD'),
      });
      // 연결 상태 확인용 PING-PONG
      const connect = await redis.ping();
      if (connect === 'PONG') console.log('REDIS Connect!');
      return redis;
    },
  },
];
import { Global, Module } from '@nestjs/common';
import { redisProvider } from './redis.provider';

@Global()
@Module({
  // 비구조화 할당을 통해 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 한다.
  providers: [...redisProvider],
  exports: [...redisProvider],
})
export class RedisModule {}