ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NestJs Cache 탐색 및 기록
    공부하기/node.js 2023. 3. 9. 19:09

    그림으로 이해하기

    • 1.  in-memory에 캐싱 데이터가 존재할 경우 엔드포인트를 거치지 않고 곧바로 캐싱 데이터를 리턴
    • 2. 캐싱 데이터가 존재하지 않을 경우 DB 탐색 후 데이터를 캐싱 후 리턴

     

    @nestjs/common 모듈의 cache-module 캐시 탐색 및 기록

     

    예제 코드

    import { CacheModule, Module } from '@nestjs/common';
    import { UserController } from './user.controller';
    import { UserService } from './user.service';
    
    @Module({
      imports: [
        CacheModule.register({
          ttl: 5, // 캐싱 만료 시간
          max: 10, // 캐싱 데이터 수
        }),
      ],
      controllers: [UserController],
      providers: [UserService],
      exports: [UserService],
    })
    export class UserModule {}
      @Get('/:id')
      @UseInterceptors(CacheInterceptor)
      @CacheTTL(10)
      @CacheKey('custom-key')
      @Header('Cache-Control', 'max-age=10')
      findOne(@Param('id', ParseIntPipe) id: number) {
        console.log('진입');
    
        return this.userService.findOne(id);
      }

     

    @CacheTTL

    • 캐시된 데이터 만료 시간을 초단위로 설정할 수 있다.
    • 엔드포인트마다 설정해 줄 수 있고 cache-manager 글로벌 옵션으로 한번에 처리할 수 있다.
    • nest 9버전과 cache-manager 5버전을 사용 시 재대로 동작하지 않을 수 있다. -> [바로가기]

     

    @CacheKey

    • 캐싱된 데이터 키 값을 설정할 수 있다.
    • @Query, @Param 값에 따라 반환되는 응답이 바뀌는 엔드포인트의 경우 동적 Key를 적용하지 않으면 큰 문제가 발생할 수 있다.
      • id 값에 관계없이 custom-key 값으로 캐싱된 데이터가 있다면 캐싱 데이터를 반환한다.
    • 캐싱 키를 지정하지 않으면 NestJs가 캐싱키를 생성한 후 데이터를 캐싱한다.

     

    종합

     

    보통 in-memory 데이타베이스로 redis를 많이 사용한다.

    NestJs와 redis도 함께 사용하는 경우가 굉장히 흔하지만 처음부터 redis를 사용한 NestJs의 코드를 이해하는게 쉽지가 않아

    개념을 정리하는데 유용한 학습이였다.

    위에 학습한 내용으로 애플리케이션을 구성하는건 너무 모자른거 같다.

    인터셉터를 활용한 http 요청 종류에 따라 캐싱을 처리하는 로직이나 요청되는 @Query, @Param의 값에 따라 동적으로 캐싱 키를 지정하고 탐색 및 응답을 할 수 있도록 처리해야할 필요성을 느꼇다.

    '공부하기 > node.js' 카테고리의 다른 글

    TypeOrm Migration 학습  (0) 2023.04.08
    NestJs, Redis 캐싱 기록  (0) 2023.03.12
    NestJs Swagger 문서 만들기  (0) 2023.03.02
    헥사고날 NestJs, TypeOrm dto type 리펙토링  (0) 2023.02.26
    NestJs Controller @Query Pipe 기록  (0) 2023.02.25
Designed by Tistory.