인프런 커뮤니티 질문&답변

반가우면반갑다고해님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

14-04 Redis

nestjs graphql Redis 최신버전 연동 방법입니다.

해결된 질문

작성

·

196

·

수정됨

2

혹시 저처럼 초보분들을 위해서 남깁니다.

저 혼자 삽질할께요 여러분들은 빠르게 세팅하고 빠르게 강의를 들어요


혹시나 이 글을 강의 처럼 install 다해주고나서 발견하셨다면

간편하게 패키지.json에서 관련된거 다 지워주고 yarn.lock를 지워주시고 yarn install 입력해주세요


yarn instlal @nestjs/cache-manager cache-manager-redis-store@2.0.0 

yarn install -D @types/cache-manager @types/cache-manager-redis-store

cache-manager-redis-store만큼은 2.0.0으로 설치해주셔야 합니다. 그래야 redisStore에대한 타입에러가 안납니다.

출처: https://4sii.tistory.com/689

이 아래부터는 그냥 제 코드 복붙입니다.

아래 코드는 위의 출처 사이트를 가보시면 다 적혀있으니 제 코드를 복붙하셔도되고 출처 사이트가셔서 코드 복붙하셔도됩니다.

  • app.module.ts

import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { Module } from '@nestjs/common';
import { CacheModule } from '@nestjs/cache-manager';
import { ConfigModule } from '@nestjs/config';
import { GraphQLModule } from '@nestjs/graphql';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthModule } from './apis/auth/auth.module';
import { BoardsModule } from './apis/boards/boards.module';
import { FilesModule } from './apis/files/files.module';
import { PaymentsModule } from './apis/payments/payments.module';
import { PointsTransactionsModule } from './apis/pointsTransactions/pointsTransactions.module';
import { ProductsModule } from './apis/products/products.module';
import { ProductsCategoriesModule } from './apis/productsCategories/productsCategories.module';
import { UsersModule } from './apis/users/users.module';
import { CacheConfigService } from './cacheConfig.service';

@Module({
  imports: [
    AuthModule,
    BoardsModule, //
    FilesModule,
    PaymentsModule,
    PointsTransactionsModule,
    ProductsModule,
    ProductsCategoriesModule,
    UsersModule,
    ConfigModule.forRoot(), // env를 사용할 수 있게 해줌
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      autoSchemaFile: 'src/commons/graphql/schema.gql',
      // context 부분이있어야~ resolver나 다른데에서
      // @Context() context:IContext, context.res 등등으로 사용가능함
      // req는 기본적으로 들어오지만, res는 이걸 작성해야 들어옴
      context: ({ req, res }) => ({ req, res }),
    }),

    // https://docs.nestjs.com/techniques/database 참고
    TypeOrmModule.forRoot({
      type: process.env.DATABASE_TYPE as 'mysql',
      host: process.env.DATABASE_HOST,
      port: Number(process.env.DATABASE_PORT),
      username: process.env.DATABASE_USERNAME,
      password: process.env.DATABASE_PASSWORD,
      database: process.env.DATABASE_DATABASE,
      entities: [__dirname + '/apis/**/*.entity.*'],
      synchronize: true,
      logging: true,
    }),

    CacheModule.registerAsync({ isGlobal: true, useClass: CacheConfigService }),
   
  ],
})
export class AppModule {}

  • cache-config.service.ts

import { CacheModuleOptions, CacheOptionsFactory } from '@nestjs/cache-manager';
import { Injectable } from '@nestjs/common';
import redisStore from 'cache-manager-redis-store';

@Injectable()
export class CacheConfigService implements CacheOptionsFactory {
  createCacheOptions(): CacheModuleOptions {
    const config: CacheModuleOptions = {
      store: redisStore,
      host: 'localhost',
      port: 6379,
      ttl: 60,
    };
    return config;
  }
}

답변 1

-1

안녕하세요, 인프런 AI 인턴입니다.

제공하신 정보에 따르면, NestJS에서 Redis와 연동하는 방법에 대해 설명하고 있습니다. 그러나 제공된 정보 중에 직접적으로 NestJS와 Redis 연동하는 방법에 대한 설명은 없습니다. 하지만, Redis와 Spring Boot를 연동하는 방법은 상세히 나와 있어요. 이를 참고하시면 NestJS에서 Redis를 사용하는 방법에 대한 이해를 돕는 데 도움이 될 수 있을 것 같습니다.

예를 들어, Spring Boot에서는 RedisCacheManager를 자동으로 설정할 수 있으며, spring.cache.cache-names 속성을 설정하여 추가 캐시를 시작 시 생성할 수 있습니다. 또한 spring.cache.redis.* 소스를 사용하여 캐시 기본값을 설정할 수 있습니다.

spring.cache.cache-names=cache1,cache2
spring.cache.redis.time-to-live=10m

NestJS에서도 비슷한 방식으로 Redis를 캐시 저장소로 사용할 수 있습니다. 아래는 NestJS에서 Redis를 캐시 매니저로 설정하는 예시 코드입니다.

import { CacheModuleOptions, CacheOptionsFactory } from '@nestjs/cache-manager';
import { Injectable } from '@nestjs/common';
import redisStore from 'cache-manager-redis-store';

@Injectable()
export class CacheConfigService implements CacheOptionsFactory {
  createCacheOptions(): CacheModuleOptions {
    const config: CacheModuleOptions = {
      store: redisStore,
      host: 'localhost',
      port: 6379,
      ttl: 60,
    };
    return config;
  }
}

위 코드는 Redis를 캐시 저장소로 사용하는 방법을 보여줍니다. CacheConfigService를 통해 Redis 캐시의 옵션을 구성할 수 있습니다.

Spring Boot와 NestJS 모두 자신의 프레임워크에서 Redis를 사용하여 캐시 기능을 구현할 수 있는 방법을 제공하므로, 여러분의 프로젝트 요구 사항에 맞게 적용해보시기 바랍니다.

반가우면반갑다고해님의 질문에 충분한 답변이 되었기를 바랍니다. 더 궁금한 점이 있으시면 언제든지 문의해주세요!