전 포스팅에 나왔던 ValidationPipe
는 메서드 핸들러가 받지 않을 값을 필터링해줄 수 있다. 화이트 리스트라는 개념을 이용하여 허용 가능 값들을 만들고 이 리스트에 포함되지 않으면 바로 제거되는 개념이다.
예를 들면, login router
에 email
과 password
값으로 화이트 리스트를 만들면 age
는 ResultDTO에서 자동으로 제거되는 것이다.
whitelist값을 true로 설정하면된다.
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
}),
);
고성능 데이터 엑서스를 제공하는 임시 저장소 역할을 한다. 캐싱이 들어가면 앱의 성능이 향상시켜준다고한다. 간단하니 꼭 잘 사용해보자.
사용하는 파일은 위 포스트를 봤을 때 service.ts를 새로 만들어서 사용하는 것 같기도하지만 연습용이기 때문에 일반 파일에 만들어도 될 것 같다.
Nest는 캐시 스토리지를 위한 통합 API를 제공하는데 이 때 내장형 데이터 저장소는 메모리 내장형 데이터 저장소입니다. 그래서 쉽게 전환할 수 있다고 합니다.
캐싱을 사용하려면 CacheModule
에서 register()
메서드를 import해주면됩니다
app.module.ts
를 아래와 같이 수정해줍니다.
import { CacheModule, Module } from '@nestjs/common';
import { AppController } from './app.controller';
@Module({
imports: [CacheModule.register()],
controllers: [AppController],
})
export class AppModule {}
constructor(@Inject(CACHE_MANAGER) private cacheManager: Cache) {}
사용할 controller에 위 코드를 넣어줍시다.
이 때 캐시 인스턴스의 get
메서드는 캐시에서 항목 검색 시 사용됩니다.
그리고 캐시에 해당 아이템이 없으면 undefined
를 반환합니다.
const value = await this.cacheManager.get('key');
이렇게 key라는 값을 가져오는 get
메서드가 있다면 값을 추가해주는 set
메서드도 있습니다.
아래처럼 key를 value라는 값을 가지고 있게 지정해줄 수 있습니다.
await this.cacheManager.set('key', 'value');
위 set
메서드와 연계되는 내용인데, 캐시의 기본 만료 시간은 5초지만 ttl값을 이용하여 만료시간을 수정할 수 있습니다.
await this.cacheManager.set('key', 'value', { ttl: 1000 });
await this.cacheManager.set('key', 'value', { ttl: null });
이 때 단위는 밀리초고 null값을 지정해준다면 캐시가 만료되지 않습니다.
캐시에서 값을 삭제하는 메서드로 지우고 싶은 캐시의 이름을 적으면 된다.
await this.cacheManager.del('key');
캐시 전체 값을 삭제하는 메서드다.
await this.cacheManager.reset();