[typescript] Nest.js에서 타입스크립트를 사용한 캐싱 구현

Nest.js는 Node.js를 위한 프레임워크로, 타입스크립트를 기반으로 하며, 효율적인 웹 애플리케이션을 빠르게 구축할 수 있는 기능들을 제공합니다. 이번 포스트에서는 Nest.js와 타입스크립트를 사용하여 간단한 캐싱 시스템을 구현하는 방법을 다룰 것입니다.

1. Nest.js 프로젝트 설정

먼저 Nest.js 프로젝트를 생성하고 의존성 패키지를 설치합니다.

npm install --save @nestjs/common
npm install --save @nestjs/config
npm install --save redis
npm install --save cache-manager
npm install --save class-transformer
npm install --save class-validator

2. Redis를 이용한 캐싱 모듈 설정

Nest.js에서는 CacheModule을 사용하여 캐싱을 구현할 수 있습니다. 먼저, Redis를 캐시 백엔드로 사용하기 위해 CacheModule.register()를 이용하여 Redis 옵션을 설정합니다.

import { CacheModule, Module } from '@nestjs/common';
import * as redisStore from 'cache-manager-redis-store';

@Module({
  imports: [
    CacheModule.register({
      store: redisStore,
      host: 'localhost',
      port: 6379,
    }),
  ],
})
export class AppModule {}

3. 캐싱 서비스 구현

다음으로, 실제 캐싱 기능을 하는 서비스를 구현해봅시다.

import { Injectable, CacheInterceptor } from '@nestjs/common';
import { CacheKey, CacheTTL } from '@nestjs/common';
import { Cache } from 'cache-manager';

@Injectable()
export class CachingService {
  constructor(@Inject('Cache') private readonly cache: Cache) {}

  @CacheKey('data')
  @CacheTTL(60) // Cache for 60 seconds
  async getCachedData(): Promise<any> {
    const data = await this.cache.get('data');
    if (data) {
      return data;
    } else {
      // Fetch data from database or any other source
      const newData = '...'; // Fetch data from database or any other source
      await this.cache.set('data', newData);
      return newData;
    }
  }
}

4. 캐싱 서비스 활용

이제 캐싱 서비스를 다른 모듈이나 컨트롤러에서 활용할 수 있습니다.

import { Controller, Get } from '@nestjs/common';
import { CachingService } from './caching.service';

@Controller('data')
export class DataController {
  constructor(private readonly cachingService: CachingService) {}

  @Get()
  async getData(): Promise<any> {
    return this.cachingService.getCachedData();
  }
}

위와 같이 Nest.js와 타입스크립트를 이용하여 간단한 캐싱 시스템을 구현할 수 있습니다. 이를 통해 애플리케이션의 성능을 향상시키고, 중복된 데이터를 효율적으로 처리할 수 있습니다.

참고 자료