NestJS에서의 자바스크립트 캐싱 구현 방법

캐싱은 웹 애플리케이션에서 성능을 향상시키는 중요한 요소입니다. NestJS는 캐싱을 구현하기 위한 다양한 방법을 제공하며, JavaScript 애플리케이션에서 캐싱을 구현하는 방법에 대해 알아보겠습니다.

1. 메모리 캐싱

메모리 캐싱은 자주 액세스되는 데이터를 메모리에 저장하여 빠른 액세스를 제공하는 방법입니다. NestJS에서는 cache-manager와 같은 캐시 모듈을 사용하여 메모리 캐싱을 구현할 수 있습니다.

먼저, 캐시 매니저 모듈을 설치합니다.

npm install cache-manager --save

그런 다음, NestJS 모듈에서 캐시 매니저를 설정합니다.

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

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

이제 캐시를 사용하려는 서비스에서 CacheManager를 주입하여 캐시를 관리할 수 있습니다.

import { Injectable } from '@nestjs/common';
import { CacheManager } from '@nestjs/common';

@Injectable()
export class MyService {
  constructor(private readonly cacheManager: CacheManager) {}

  async getData(key: string): Promise<any> {
    const data = await this.cacheManager.get(key);
    if (data) {
      return data;
    }
    
    // 캐시가 없을 경우 데이터를 가져온 후 캐시에 저장
    const newData = await this.fetchData();
    await this.cacheManager.set(key, newData);
    return newData;
  }
}

위의 예제에서 getData 메서드는 캐시에서 데이터를 가져오고, 캐시가 없는 경우 데이터를 가져온 후 캐시에 저장합니다.

2. HTTP 캐싱

HTTP 캐싱은 웹 요청과 응답 헤더를 이용하여 캐싱을 구현하는 방법입니다. NestJS에서는 @HttpCache() 데코레이터를 사용하여 HTTP 캐싱을 구현할 수 있습니다.

import { Controller, Get, HttpCache } from '@nestjs/common';
import { CacheTTL } from '@nestjs/common';

@Controller()
export class MyController {
  @Get('/data')
  @HttpCache({
    maxAge: 60, // 60초 동안 캐시 유지
    shared: true, // 공유 캐시
  })
  @CacheTTL(60) // 캐시 TTL 설정
  async getData(): Promise<any> {
    // 데이터 가져오는 로직
    return { data: 'Hello, World!' };
  }
}

위의 예제에서 getData 메서드는 /data 엔드포인트에 대한 데이터를 반환하며, @HttpCache() 데코레이터를 사용하여 캐싱을 설정합니다. maxAge는 캐시의 유효 기간을 설정하고, shared는 공유 캐시를 사용할지 여부를 나타냅니다. @CacheTTL() 데코레이터를 사용하여 캐시의 TTL(Time-to-Live)를 설정할 수도 있습니다.

이러한 방법을 사용하여 NestJS 애플리케이션에서 자바스크립트 캐싱을 구현할 수 있습니다. 캐싱은 성능 향상에 큰 영향을 미치므로 적절히 사용해야 합니다.

#NestJS #캐싱