뚜벅이!
Mobile :)
뚜벅이!
전체 방문자
오늘
어제
  • 분류 전체보기 (53)
    • 코딩테스트 (16)
      • programmers level1 (7)
      • codility (9)
    • 프로그래밍 공부 (31)
      • Spring Boot (6)
      • Nuxt.js (5)
      • Node.js (3)
      • Etc (11)
      • Android (6)
    • 잡다한 글 (4)
    • 토이프로젝트 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • NavBar
  • Vue.js
  • firebase
  • JS
  • javascript
  • Vue
  • ad
  • lesson4
  • Spring
  • level1
  • nuxt.js
  • 초보자
  • Jetpack
  • node.js
  • 스킬체크테스트
  • docker
  • codillity
  • Notification
  • nuxt
  • 연습
  • lesson2
  • Kotlin
  • Spring boot
  • lesson3
  • programmers
  • AndroidX
  • 부트
  • 프로그래머스
  • token
  • node

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
뚜벅이!

Mobile :)

[Redis] Node.js에서 Active-Active 일때 세션공유
프로그래밍 공부/Node.js

[Redis] Node.js에서 Active-Active 일때 세션공유

2021. 3. 26. 10:39
728x90

 

Active - Standby 나, 단일 was의 경우에는 세션공유를 할 필요가 없지만,

 

Active - Active 관계에서는 노드밸런스가 컨트롤하기 때문에 세션이 유지되야 할 필요가 있다.

( 참고로 aws 환경이라면 sticky session을 쓰도록 하자 )

 

 

 

*만약 was상에서 테스트해볼일이 있다면 docker redis를 깔도록 하자. 쉽게쓰고, 쉽게지우고.

 

 

실제로 SAAS 형식으로 운영되는 프로젝트에서도 docker-redis를 사용하고 있다.

 

 

 

 

 

우선 로컬에서 테스트를 해보아야 하니 redis 설치 - 실행부터 해보자

 

redis.io/download

 

Redis

*Download Stable releases liberally follow the usual major.minor.patch semantic versioning schema. *Other versions Old (6.0) Redis 6.0 introduces SSL, the new RESP3 protocol, ACLs, client side caching, diskless replicas, I/O threads, faster RDB loading, ne

redis.io

다운로드는 이곳,

 

 

 

실행명령어는 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 - 페이지이동마다 세션값 변경

 

 

끝

 

728x90
저작자표시 (새창열림)

'프로그래밍 공부 > Node.js' 카테고리의 다른 글

[Node.js] exceljs 를 통한 write, download  (0) 2022.03.02
[Node.js/Okta] Node.js를 이용한 Okta SSO 로그인  (0) 2021.02.23
    '프로그래밍 공부/Node.js' 카테고리의 다른 글
    • [Node.js] exceljs 를 통한 write, download
    • [Node.js/Okta] Node.js를 이용한 Okta SSO 로그인
    뚜벅이!
    뚜벅이!
    2022. 4년차 안드로이드 개발자 wndnjs19@gmail.com

    티스토리툴바