2024. 2. 28. 23:14ㆍ공부/내배캠 TIL
목차
1. 학습 내용
Redis란 오픈소스, 인 메모리 데이터 저장소로, 캐시, 벡터DB, 문서DB, 스트리밍 엔진, 메시지 브로커 역할을 하는 Key-Value 저장소 입니다. Remote Dictionary Server의 약자로, 번역하자면 원격 Dictionary 서버라는 이름입니다.
Key로는 string, Value로는 다양한 타입을 지원하며
메모리 기반이기 때문에 disk기반의 RDBMS보다 빠릅니다.
또한, 레디스랩 등의 서비스를 사용해 여러 웹 서버들의 공유 메모리 역할로 레디스를 사용할 수 있다고 한다.
레디스(Redis)는 언제 어떻게 사용하는 게 좋을까 (brunch.co.kr)
더 자세한 내용은 위의 글을 확인하면 된다.
2. 내용 정리
redis를 설치하고(윈도우에서 레디스를 설치하는건 Releases · microsoftarchive/redis (github.com) 좀 오래된 방법뿐인듯 하다. 도커를 사용해 설치하는 방법도 있으나, 지금 프로젝트에선 불필요한듯해 추후 공부할 생각이다.)
ioredis와 cache-store-manager를 설치하고
import dotenv from 'dotenv';
import { Cache } from 'cache-store-manager';
dotenv.config();
export let redisCache;
if (process.env.NODE_ENV === 'test') {
redisCache = {};
} else {
redisCache = Cache.create('redis', {
port: process.env.REDIS_PORT,
host: process.env.REDIS_HOST,
// username: process.env.REDIS_USERNAME,
// password: process.env.REDIS_PASSWORD,
db: 0,
ttl: 60 * 1000 // milliseconds
});
}
config를 통해 redis와 nodejs를 연결해주고(cache-store-manager를 사용해 캐시로 사용할 예정)
import { redisCache } from "../src/redis/index.js";
import { UsersRepository } from "../src/repository/users.repository.js";
import { AuthService } from "../src/service/auth.service.js";
import { dataSource } from "../src/typeorm/index.js";
const usersRepository = new UsersRepository(dataSource)
const authService = new AuthService(usersRepository, redisCache)
const jwtValidate = async (req, res, next) => {
// try {
// const authorization = req.headers.access;
const { access } = req.cookies;
if (!access) {
throw new Error('인증 정보가 올바르지 않습니다.');
}
const [tokenType, tokenValue] = access.split(' ');
if (tokenType !== 'Bearer') {
throw new Error('인증 정보가 올바르지 않습니다.');
}
if (!tokenValue) {
throw new Error('인증 정보가 올바르지 않습니다.');
}
console.log(tokenType, " and ", tokenValue)
const user = await authService.verifyAccessToken(tokenValue); // return user
console.log('jwt-validated user', user)
res.locals.user = user;
next();
// } catch (err) {
// return res.status(400).json({
// success: false,
// message: err.message,
// })
// }
}
export default jwtValidate;
이런 방식으로 accress토큰을 저장하는 캐시로 사용하면 된다.
3. 생각 정리
추가적으로, docker-composer를 사용하여 redis-container를 만들어 사용할수도 있다.
Docker compose로 Redis 실행하기 (velog.io)
<redis를 사용한 멀티서버에 대한 짤막한 메모.>
하나의 서버(컴퓨터)에서 여러 서버를 띄운다 = x
여러개의 소프트웨어 레벨에서의 서버를 띄운다.
ip = 주소
port = 방
ip는 갖게, port만 다르게 해서 서버를 돌린다.
-> redis 서버로 port를 다르게 해서 여러개 만든다.
-> redis 를 여러 port로 run 하는 방법을 찾아라
-> docker compose, compose yaml
근데?
-> 똑같은 하드웨어 공유한다.(같은 ram) / 사실 물리 서버는 단 하나!
-> 멀티 프로세스적인 이점이 있다.
docker를 사용한 redis cluster
'공부 > 내배캠 TIL' 카테고리의 다른 글
[Node.js_4기] TIL : TypeScript_2 (24/03/05) (4) | 2024.03.05 |
---|---|
[Node.js_4기] TIL : TypeScript_1 (24/03/04) (1) | 2024.03.04 |
[Node.js_4기] TIL : 트러블슈팅 (24/02/27) (1) | 2024.02.27 |
[Node.js_4기] TIL : 트러블 슈팅 - 하루 회고 - (24/02/26) (0) | 2024.02.26 |
[Node.js_4기] TIL : Layered Architecture Pattern (yy/mm/dd) (0) | 2024.02.19 |