반응형
씨부레 세션로그인으로 작업중인데 거지같게 핫로딩때문에 자꾸 로그인이 풀린다.
이유는 당연하게 로그인데이터에 대한 권한이라고 해야하나 그게 서버에 있기 때문에 재실행되면서 ㅂㅂ 되기 때문에...
그냥 버티려고 했는데 거지같아서 방법을 찾아보니 파일기반이나 레디스 기타등등 다른 db에 저장을 시켜라 였는데 어차피 채팅구현 해야하니 레디스 써보겠다 ㅜㅜ
01. 레디스 클라우드 설치
mysql을 쓸때 워크벤치를 설치하던것 처럼 레디스도 레디스용 db 설치를 해야한다.
다만 컴퓨터에 설치해도 되지만 요즘은 클라우딩 시대니 클라우드로 써보려고 한다.(관리도 편하구 ㅎㅎ)
그레서 찾아보니 aws가 있지만 존나 비싸 안써 씨부레 ㅠㅠ 그레서 찾은게 Redislabs!!!
Redislabs는 1개의 레디스 db를 30mb 무료 공간을 준다니 개이득 ㅎㅎ 작아보이지만 잘써봐야지 취준생따리주제 ㅠㅠ
우선 Redislabs 웹 사이트(http://redislabs.com/Visit Website)에 접속하고 회원가입을 진행해 준다.
위 사진에서는 host port 아래 사진에서는 유저이름과 비밀번호를 훔친다. ㅎㅎ
01-1 클라우드 접속
클라우드를 접속하기 위해선 redis cli툴이 필요하다 워크벤치처럼 ㅎㅎ
일단 윈도우 레디스 cli를 사용하기 위해서 따로 node를 설치해야하지만 난 되있지ㅎ
01-2 윈도우 버전
> npm install -g redis-cli # redis cli 설치
> rdcli -h <endpoint> -p <port> -a <password> # redis cloud 접속
01-3 리눅스 버전
$ apt-get install redis-tools # redis cli 설치
$ redis-cli -v # 설치 버젼 확인
$ redis-cli -h <endpoint> -p <port> -a <password> # redis cloud 접속
02. 패키지 설치
npm install @nestjs/cache-manager cache-manager cache-manager-redis-store ioredis connect-redis redis
03. 모듈 설정
// app.module.ts
import { CacheModule } from '@nestjs/cache-manager';
import { redisStore } from 'cache-manager-redis-store';
// 레디스 용 모듈
CacheModule.register({
host: 'localhost',
port: 6379,
stores: redisStore,
}),
04. 세션미들웨어 레디스 스토어로 설정
// main.ts
import connectRedis from 'connect-redis';
import { createClient } from 'redis';
// 레디스 클라이언트 생성
const redisClient = await createClient({
url: `redis://${process.env.REDIS_USER}:${process.env.REDIS_PASSWORD}@${process.env.REDIS_HOST}:${process.env.REDIS_PORT}`,
legacyMode: true,
});
const RedisStore = connectRedis(session);
await redisClient.connect();
app.use(
session({
// 매요청마다 저장 x
resave: false,
// 데이터 없는 세션 저장 x
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
store: new RedisStore({ client: redisClient, prefix: 'session:' }),
cookie: {
httpOnly: true,
secure: false,
maxAge: 1000 * 60 * 60 * 24,
domain: 'localhost',
path: '/',
sameSite: 'lax',
},
}),
);
반응형