이번 블로그에서는 Redis 와 node.js 를 연동하여 테스트 API를 호출하는 내용에 대해서 정리를 해보겠습니다.
Redis 란
캐시 및 메세지 브로커 로 사용되는 인메모리 데이터 베이스로 RAM (Random Access Memory) 에서 데이터를 저장한다. RAM 특성상 휘발성 기억장치이기 때문에 삭제가 되서는 데이터는 Redis에 적절하지 않습니다. 메모리상에서 데이터 IO 가 발생되기 때문에 매우 빠른 실행속도를 보장받을수 있어 유저가 로그인을 하였을때 세션 관리 등 삭제가 되어도 다시 발급을받을수 있는 데이터 관리에 자주 사용이 됩니다.
Docker 로 Redis 이미지 를 받아온후 컨테이너 실행 하기
https://hub.docker.com/_/redis/
docker 사이트에 자세한 설명이 나와 있지만 다시한번 정리하기로 했습니다.
pull 명령어로 redis 이미지를 가져 옵니다.
/* redis 이미지 pull 하기 */
$ docker pull redis
/* some-redis 이미지 실행하기 */
$ docker run --name some-redis -d -p 6379:6379 redis
해당 명령어를 가져온후 some-redis 이미지를 실행하면 아래와 같이 redis 컨테이너 이미지가 보입니다.
redis 에 접속하는 방법은 아래와 같습니다.
$ docker run -it --link some-redis:redis --rm redis redis-cli -h redis -p 6379
redis 접속에 정상적으로 되었다면 node.js 이용하여 연동을 해보겠습니다.
Node.js 와 Redis 연동
redis와 연동하기 위해서 express 와 redis 라이브러리와 node-fetch 를 설치하겠습니다
$ npm i express redis node-fetch --save
index.js 파일을 생성한후 설치한 redis 와 express,node-fetch 를 불러옵니다.
const express = require('express');
const fetch = require('node-fetch');
const redis = require('redis');
const app = express();
const client = redis.createClient();
redis 연결시 client 에서 발생할수 있는 처리를 event emitter로 로그를 남깁니다.
client.on('error', (err) => {
console.error(`Error ${err}`);
});
'/cache' URL 을 호출했을때 테스트 API 의 주소로 https://jsonplaceholder.typicode.com 호출한뒤 redis 에 저장하여 다음에 동일한 URL을 호출할때 redis에 있는 데이터를 호출할수 있도록 코드를 작성합니다.
app.get('/cache', (req, res) => {
// redis에 저장할 키값
const redisKey = 'post:thumbnailUrl';
return client.get(redisKey, (err, redisRes) => {
if (err) {
console.error(err);
}
//console.log(res);
console.log(redisRes);
if (redisRes) {
// 캐시가 존재한다
return res.json({ type: 'cached', data: JSON.parse(redisRes) });
} else {
// 캐시가 존재하지 않을 경우
fetch('https://jsonplaceholder.typicode.com/photos')
.then((data) => data.json())
.then((data) => {
client.set(redisKey, JSON.stringify(data));
return res.json({ type: 'onfly', data: data });
});
}
});
});
이후 express 의 listener를 설정해 줍니다.
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Running Port at 3000`);
});
그리고 node 로 index.js 를 실행하고 postman 으로 /cache 주소로 호출해 보겠습니다.
테스트로 호출한 API 를 response 데 까지 2.71s 초가 지연 되었습니다 그리고 redis에서 동일한 데이터를 가져와보겠습니다.
Redis로 가져온 동일 데이터는 0.28초가 지연이 되었습니다.
물론 로컬인 환경과 원격인 환경 차이가 있지만 10배 이상 차이가 나는것으로 보아 Redis를 사용할때 빠른 응답 속도를 보장 받을수 있습니다.
'개발이야기 > Node.js' 카테고리의 다른 글
Lodash, 더 쉽고 효율적인 코드 작성하기 (0) | 2024.06.27 |
---|---|
Event Emitter (0) | 2021.04.19 |
Static Factory Method Pattern (0) | 2021.04.13 |
Singleton Pattern (0) | 2021.04.12 |
Promise.all 과 Promise.race (0) | 2021.04.11 |