connect-redis
멀티 프로세스 간 세션 공유를 위해 레디스와 익스프레스를 연결해주는 패키지입니다.
기존에는 로그인할 때 express-session의 세션 아이디와 실제 사용자 정보가 메모리에 저장됩니다.
따라서 서버가 종료되어 메모리가 날아가면 접속자들의 로그인이 모두 풀려버립니다.
또한, Warning: connect.session() MemoryStore is not designed for a production environment,
as it will leak memory, and will not scale past a single process라는 경고 메시지도 발생합니다.
이를 해결하기 위해 세션 아이디와 실제 사용자 정보를 데이터베이스에 저장합니다.
이때 사용하는 데이터베이스가 레디스입니다. 다른 데이터베이스를 사용해도 되지만 주로 레디스를 많이 사용합니다.
메모리 기반의 데이터베이스라서 성능이 우수하기 때문입니다.
pm i redis connect-redis
레디스를 사용하려면 connect-redis 패키지뿐만 아니라 레디스 데이터베이스를 설치해야 합니다.
서버에 직접 설치할 수도 있지만, 레디스를 호스팅해주는 서비스를 쓰는 것이 편리합니다.
바로 redislabs입니다.
redislabs 웹 사이트(http://redislabs.com/)에 접속합니다.
회원가입후 로그인을 합니다.
클라우드 지역과 지역을 선택 후 Let's start free 눌러 진행
free-db를 눌러 내부 정보를 조회
정보 화면에서 Public endpoint와 password를 확인해 .env에 붙여 넣습니다.
이때 Public endpoint에서 Host와 Port를 분리합니다.
connect-redis 패키지로부터 RedisStore 객체를 require합니다.
이때 session을 인수로 넣어서 호출하는 것을 잊지 마세요. connect-redis는 express-session에 의존성이 있습니다.
redis 패키지의 createClient 메서드로 redisClient 객체를 생성합니다.
이때 url과 password 속성에 접속 정보를 입력합니다.
여기서 dotenv.config()보다 코드가 아래에 있어야 한다는 점에 주의하세요.
.env 파일에 적힌 process.env 객체의 값들은 dotenv.config() 이후에 생성됩니다.
express-session 미들웨어에는 store 옵션을 추가합니다.
기본적으로는 메모리에 세션을 저장하지만, 이제는 RedisStore에 저장합니다.
RedisStore의 옵션으로 client 속성에 redisClient 객체를 연결하면 됩니다.
이제 세션 정보가 메모리 대신 레디스에 저장됩니다. 따라서 로그인 후 서버를 껐다 켜도 로그인이 유지됩니다.
실제 서비스에서 서버 업데이트 시 로그인이 풀리는 현상을 막을 수 있습니다.
Note ≣ ⎮ express-rate-limit
10장에서 사용하는 express-rate-limit 패키지도 사용량을 메모리에 기록하므로 서버를 재시작하면 사용량이 초기화됩니다.
따라서 이것도 레디스에 기록하는 것이 좋습니다.
rate-limit-redis라는 패키지와 express-rate-limit 패키지를 같이 사용하면 됩니다.
nvm, n
노드 버전을 업데이트하기 위한 패키지입니다.
윈도에서는 nvm-installer를 사용하고, 리눅스나 맥에서는 n 패키지를 사용하면 편리합니다.
맥, 리눅스
맥과 리눅스에서는 n 패키지를 사용하면 편리합니다.
sudo npm i -g n
이제 n 명령어를 사용할 수 있게 되었습니다.
콘솔에 n을 입력하면 현재 설치된 노드 버전을 볼 수 있습니다.
나중에 설치된 버전을 선택할 때도 이 명령어를 사용합니다
새로운 버전을 설치하고 싶다면 n 버전을 입력합니다.
n 18.7.0처럼 특정 버전을 입력하거나 n latest처럼 최신 버전을 설치하게 하면 됩니다.
업그레이드 후 npm 충돌 시
노드 버전을 업그레이드한 후 기존 npm 패키지들이 동작하지 않는 경우가 있습니다. 보통 다음과 같은 에러가 발생합니다.
Error: The module '모듈명' was compiled against a different Node.js version using NODE_MODULE_VERSION 이전 버전. This version of Node.js requires NODE_MODULE_VERSION 현재버전. Please try re-compiling or re-installing the module (for instance, using npm rebuild or npm install).
이럴 때는 npm rebuild 명령어로 해결할 수 있습니다.
만약 이 명령어로 해결되지 않으면 node_modules 폴더를 제거한 후 npm i 명령어로 패키지들을 다시 설치하면 됩니다.
'clone toy projects > node_express_sns' 카테고리의 다른 글
AWS S3 사용하기 (0) | 2023.08.31 |
---|---|
AWS light sail 사용해서 배포하기 (0) | 2023.08.31 |
서비스 운영을 위한 패키지[pm2, winston, helmet, hpp] (0) | 2023.08.31 |
서비스 운영을 위한 패키지[morgan,express-session,시퀄라이즈,cross-env, sanitize-html, csurf] (0) | 2023.08.31 |
부하 테스트 (0) | 2023.08.29 |