사용자들이 공통적으로 자주 요청하게 되는 end-point의 데이터는 미리 Cache해놓으면, 다음번에는 더 빠르게 데이터를 응답해줄 수 있습니다.
그럼 Express에서는 Caching을 어떻게 진행할까요?
Redis를 사용하여 진행합니다.
Redis는 Remote Dictionary Server의 약자로, "key-value" 구조의 데이터를 저장하고 관리하는 비관계형 데이터베이스 관리 시스템입니다.
메모리에서 데이터를 처리하기 때문에 속도가 상당히 빠릅니다.
그래서, 이번 포스트에서는 Redis에 데이터를 저장하고 캐싱해보겠습니다.
yarn add redis 혹은 npm install redisconst redis = require('redis');
const redisClient = redis.createClient(process.env.REDIS_PORT);
// redis에 데이터 저장
const set = (key, value) => {
redisClient.set(key, JSON.stringify(value));
};
// 저장 된 데이터를 redis에서 가져오는 미들웨어
const get = (req, res, next) => {
// End-Point의 url을 key로 설정
let key = req.originalUrl;
redisClient.get(key, (error, data) => {
if (error) {
res.status(400).send({
ok: false,
message: error,
});
}
if (data !== null) {
// 데이터가 cache되어 있으면, parsing하여 response
res.status(200).send({
ok: true,
data: JSON.parse(data),
});
} else next();
});
};
module.exports = {
set,
get,
};
const express = require('express');
const { getItems } = require('./getItemList');
const { get } = require('../../utils/cache');
const router = express.Router();
// cache되어 있으면 get 미들웨어에서 데이터 반환
router.get('/', get, getItems);
module.exports = router;
...
const { set } = require('../../utils/cache');
const getItems = async (req, res) => {
...
if (items.length) {
// 데이터 caching하고 response
set(req.originalUrl, items);
res.status(200).send({
ok: true,
data: items,
});
} else {
res.status(404).send({
ok: false,
message: 'No more pages',
});
}
};