반응형
배경
node.js 환경에서 특정 라우터에 대해서만 cache를 적용해야하는 상황이 생겼다.이 때 express와 nest.js에서 동일한 라이브러리를 사용하기 위해, 특정 라우터에 대해서만 캐시를 적용하기 위해 nest.js에서도 node-cache를 사용했다.
목표
nest.js에서 node-cache 라이브러리를 사용해서 특정 라우터에만 캐시를 적용해보자.
반응형
node-cache 적용
1. 노드 캐시 설치
npm i node-cache
2. 캐시를 적용하고 싶은 router가 있는 controller에 선언
import { Controller, Get, Query } from '@nestjs/common';
import { AppService } from './app.service';
import * as NodeCache from 'node-cache';
@Controller()
export class AppController {
// cache 선언
cache: NodeCache;
constructor(private readonly appService: AppService) {
// cache를 NodeCache로 초기화
this.cache = new NodeCache();
}
...
...
...
@Get('/test')
getHello(): string {
...
...
}
}
3. 캐시 적용
@Get('/test')
getHello(@Query() query: { key: string }): string {
// 캐시 키
const cacheKey = query.key;
// 캐시 키를 기준으로 캐시에 있는 정보 확인
// 캐시에 data가 있다면 data에 적용되고 없으면 undefined
let value = this.cache.get<string>(cacheKey);
// 캐시가 undefined인 경우 새로 불러오고 캐시에 저장
if (!value) {
const result = this.appService.getHello();
value = result.value;
// set('cache 키', 'cache 값', 만료시간(sec))
this.cache.set(cacheKey, result.value, 60 * 60);
}
return value;
}
4.확인
- 캐시에 키가 없는 경우 서비스에서 결과를 가져오고 캐시에 저장한다.
- 캐시가 키가 이미 있는 경우 if문을 거치지 않고 캐시에 저장된 값을 retrun한다.
캐시의 이점
이렇게 캐시를 적용하는 건 모든 부분에 적용하는 것이 아니라 불러오는 데이터가 크면서 자주 불러오는것에 적용해두면 속도가 굉장히 빨라진다. 예를 들어 약관 동의 같은 경우 모든 사용자가 회원가입시에 동일한 약관을 보는 경우가 있다. 이럴 때 캐시를 적용해두면 매번 약관이 저장된 곳을 거치지 않고 캐싱된 부분에서 바로 불러올수 있어서 속도가 크게 향상된다.
반응형
'Programming > Nest.js' 카테고리의 다른 글
[Nest.js] OverView: 첫번째 단계 (0) | 2022.05.23 |
---|---|
[TypeORM] TypeORM에서 여러개의 테이블을 조인하는 방법 (0) | 2022.05.23 |
[Nest.js] Nest.js에서 소셜로그인을 구현하는 방법 (feat.Naver) (0) | 2022.05.23 |
[TypeORM] typeORM에서 평균(AVG) 구하기 (0) | 2022.05.23 |