Active - Standby 나, 단일 was의 경우에는 세션공유를 할 필요가 없지만,
Active - Active 관계에서는 노드밸런스가 컨트롤하기 때문에 세션이 유지되야 할 필요가 있다.
( 참고로 aws 환경이라면 sticky session을 쓰도록 하자 )
*만약 was상에서 테스트해볼일이 있다면 docker redis를 깔도록 하자. 쉽게쓰고, 쉽게지우고.
실제로 SAAS 형식으로 운영되는 프로젝트에서도 docker-redis를 사용하고 있다.
우선 로컬에서 테스트를 해보아야 하니 redis 설치 - 실행부터 해보자
다운로드는 이곳,
실행명령어는 redis-server (호스팅서버를 구성하는 것이므로 npm 으로 다운받지 말것.)
default port는 6379번이다.
우선 redis에 대한 기본적인 설정을 담아둘 redis-wrapper를 만들어보면,
( app.js에 그냥 넣을 수도 있는데 redis 는 master-slave 관계 뿐만 아니라, master 감시용인 sentinal 이 필요 할 수 있기 때문에 확장성을 위해 따로 관리하는 것을 추천한다 )
const redis = require('redis');
const logger = require('./winston-wrapper')('RedisWrapper');
const constant = require('./Constant');
//const sentinel = require('redis-sentinel');
var client = null;
module.exports = {
getInstance: function(){
if(!client){
/*
센티널이 있다면 여기서 작업
*/
const host = process.env.REDIS_HOST||constant.LOCAL_REDIS_HOST;
const port = process.env.REDIS_PORT||constant.LOCAL_REDIS_PORT;
logger.info('* Init Redis to "' + host + ':' + port + '"');
client = redis.createClient({ host: host, port: port});
}
return client;
}
};
특별하게 입력할 값이 있다면 env 값으로 받고, 없다면 default로 상수값을 집어넣는 형식.
app.js 에 connect-redis 와 위에 만들어둔 wrapper + express-session 를 넣어두고
const session = require('express-session');
const RedisStore = require('connect-redis')(session);
const redisInstance = require('./modules/redis-wrapper').getInstance();
app.use(session({
store: new RedisStore({
client: redisInstance
}),
key: 'your key',
secret: 'your secret',
resave: true,
saveUninitialized: false,
cookie: {
maxAge: constant.COOKIE_MAXAGE,
httpOnly: true
},
rolling: true
}));
*resave - 세션이 수정사항이 없더라도 다시 저장할지
*saveUninitalized - 저장할게 없는데도 저장할지
*key, secret - 비밀키
*cookie - 세션에대한 쿠키
실제 배포할땐 cookie - secure 옵션값을 주자.
* store - 세션유지용 DB연결.
*rolling - 페이지이동마다 세션값 변경
끝
'프로그래밍 공부 > Node.js' 카테고리의 다른 글
[Node.js] exceljs 를 통한 write, download (0) | 2022.03.02 |
---|---|
[Node.js/Okta] Node.js를 이용한 Okta SSO 로그인 (0) | 2021.02.23 |