connect-redis

connect-redisExpress에서 redissession storage로 제공하는 라이브러리 입니다.
프로덕션 배포시 메모리를 세션 스토리지로 사용하지 않고 Scalability와 안정성을 위해 사용됩니다.

최근에 새로 시작하는 프로젝트에서 redis session을 설정하는데 문제가 있어 찾아보던 중 최근 2023년 3월 1일에 connect-redis의 버전 업데이트이 있어 기존과 달라진 부분을 공유하고자 합니다.

업데이트 로그 바로가기

Breaking changes

제일 큰 변경사항은 아래의 1번과 2번입니다.

  1. 더이상 redis client의 lagacy 모드를 지원하지 않습니다.
  2. 타입스크립트 코드 기반으로 재작성되어 더이상 기존 @types/connect-redis를 사용하지 않습니다.
  3. 빌드는 이제 CJS와 ESM을 모두 지원합니다. 노드 14에 대한 지원이 제거되었습니다.

버전 6.x에서의 마이그레이션

redis 패키지에 대해 regacyMode: true 설정을 사용한 경우 이 패키지를 실행하는 데 레거시 모드가 더 이상 필요하지 않으며 더 이상 지원되지 않으므로 이 설정을 제거해주세요.

@types/connect-redis 타입정의를 사용중이라면 제거해주세요.

@types/connect-redis의 버전이 아직 업데이트 되지 않아 타입 오류가 발생합니다. connect-redis 패키지에 타입을 포함하고 있으니 제거해주세요.

RedisStore 초기화는 더 이상 express-session을 사용하지 않습니다.

별도의 RedisStore 초기화 과정없이 바로 import된 RedisStore를 사용하면 됩니다.

1
2
3
4
5
6
7
// 기존
import connectRedis from "connect-redis";
import session from "express-session";
const RedisStore = connectRedis(seession);

// 현재
import RedisStore from "connect-redis";

CommonJS(require) 모듈을 사용하는 경우. 기본 export를 가져와야 합니다.

1
2
3
4
5
// 기존
const RedisStore = require("connect-redis");

// 현재
const RedisStore = require("connect-redis").default;

아래에 예시코드를 작성하여 두었으니 참고해주세요.

예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";
import * as session from "express-session";
import * as passport from "passport";
import RedisClient from "./common/redis";
import RedisStore from "connect-redis";

async function bootstrap() {
const app = await NestFactory.create(AppModule, {
logger: ["error", "warn"],
});

const redisClient = await RedisClient.getRedisClient();
const redisStore = new RedisStore({ client: redisClient });

app.use(
session({
store: redisStore,
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
})
);

app.use(passport.initialize());
app.use(passport.session());

await app.listen(3000);
}

bootstrap();