Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 자료구조
- react
- nestjs
- GIT
- flask
- mongoose
- Dinosaur
- JavaScript
- nodejs
- Queue
- typeORM
- 게임
- MongoDB
- 정렬
- Express
- Python
- class
- 공룡게임
- Bull
- dfs
- jest
- Nest.js
- AWS
- cookie
- OCR
- game
- TypeScript
- MySQL
- Sequelize
Archives
- Today
- Total
포시코딩
[Nest.js] 캐싱 사용해보기 본문
728x90
개요
Nest.js에서는 cache-manager 와 연계하여 캐싱 기능을 사용할 수 있는데
이에 대해 공부한 것을 정리해보았다.
설치
npm i cache-manager
npm i -D @types/cache-manager
세팅
app.module.ts
// ...import 생략
@Module({
imports: [
CacheModule.register({
ttl: 60000, // 데이터 캐싱 시간(밀리 초 단위)
max: 100, // 최대 캐싱 개수
isGlobal: true,
})
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
필요 시 env 파일을 통해 ttl, max 값을 전달하길 원한다면 configuration을 추가하면 된다.
ttl: 60000
밀리 초 단위이기 때문에 60000 = 60초 = 1분
즉, 1분 동안 동일한 데이터에 대해 캐싱하다 그 뒤에는 사라짐
Service
import {
CACHE_MANAGER,
Inject,
} from '@nestjs/common';
import { Cache } from 'cache-manager'
@Injectable()
export class BoardService {
constructor(
@Inject(CACHE_MANAGER) private readonly cacheManager: Cache
) {}
// ...생략
사용 방법
Service
async getArticles() {
return await this.articleRepository.find({
where: { deletedAt: null },
select: ['id', 'title', 'author', 'createdAt'],
});
}
기존에 getArticles() 라는 단순한 게시글 목록을 조회하는 API가 있다고 했을 때
캐싱을 사용하게 바꾼다면 아래와 같이 바꿀 수 있다.
async getArticles() {
const cacheArticles = await this.cacheManager.get('articles');
if (!_.isNil(cacheArticles)) {
return cacheArticles;
}
const articles = await this.articleRepository.find({
where: { deletedAt: null },
select: ['id', 'title', 'author', 'createdAt'],
});
await this.cacheManager.set('articles', articles);
return articles;
}
이렇게 함으로서 getArticles() 호출 시 캐싱된 articles 데이터가 없다면
DB에서 데이터를 리턴하고 그 이후 1분동안 캐싱된 articles를 가져다 쓰면서
DB로의 데이터 요청 리소스를 아낄 수 있게 되었다.
정리
캐싱을 적용해도 크게 문제가 없는 서비스 로직에 한해서는 적극적으로 캐싱을 적용하는걸 추천한다.
어차피, max 속성을 통해 캐싱이 되는 데이터 양도 조절할 수 있기 때문에
메모리가 오버플로우 날 걱정은 딱히 하지 않아도 되며
위 방법은 인-메모리 기반으로 캐싱을 했지만
추후 Redis와 같은 인-메모리 데이터베이스를 사용하는 방법도 고려해볼만 하다.
728x90
'Node.js' 카테고리의 다른 글
[Nest.js] 이메일 인증 시스템 (1). nodemailer (0) | 2023.02.23 |
---|---|
[Nest.js] 원하는 시점에 AWS S3에 파일 저장 (0) | 2023.02.23 |
[Nest.js] FormData 전달받기 with multer (0) | 2023.02.22 |
[동시성 문제] Apache JMeter를 이용한 테스트 (0) | 2023.02.20 |
[Nest.js][동시성 문제] Bull Queue (0) | 2023.02.18 |