1️⃣ 시작하기 전에..
이 라이브러리를 사용하기 위해서는 쿠키와 세션의 개념에 미리 알고 있어야 합니다.
만약 쿠키와 세션에 대하여 익숙하지 않으신 분이라면 제가 포스팅한
쿠키와 세션편을 참조해주시기 바랍니다.
그럼 시작해보겠습니다.
2️⃣ express-session 라이브러리란?
이 라이브러리는 Express 프레임워크를 위한 간단한 세션 관리용 미들웨어 입니다.
물론 자세한 라이브러리 사용법은 공식 홈페이지를 참조하면 되지만,
여기서는 그 간단한 사용법에 대해서 알아보도록 하겠습니다.
3️⃣ 중요한 점과 주의할 점
여기서 중요한 점은 세션 데이터는 쿠키에 저장되지 않고 세션아이디만 쿠키에 저장됩니다.
세션 데이터는 서버쪽에 데이터로 저장됩니다.
주의할 점은 크게 두가지가 있습니다.
- 만약 express-session 버전이 1.5.0 이전이라면 cookie-parser 뒤에 미들웨어를 놓아주어야 합니다.
- 서버쪽의 세션 스토리지는 기본적으로
메모리
에 저장되는데요 이는 배포환경을 위해 디자인 된 것이 아니어서 메모리 누수를 유발할 위험이 있습니다. 그래서 호환 세션 스토어중 하나를 이용하는 것을 추천한다고 합니다. 보통 Redis를 많이 쓴다고 하네요.
4️⃣ 옵션
익스프레스 세션의 옵션에 대해서 살펴보도록 하겠습니다.
크게 나누어 보자면 다음과 같습니다.
- cookie : 쿠키에 대한 설정을 하는 옵션입니다.
- genid : 새로운 세션 아이디를 생성하기위해 함수를 호출하는 옵션입니다. 기본값으로는 uid-safe 라이브러리가 사용된다고 합니다.
- name : 세션아이디 쿠키의 이름입니다. 기본값은
connect.sid
입니다. - proxy : 노드서버가 프록시 뒤에있다면 설정해주어야 하는 옵션입니다.
- resave : 요청이 왔을 때 세션에 수정 사항이 생기지 않더라도 세션을 다시 저장할지 설정하는 옵션 입니다.
- rolling : 로그인 상태에서 다른 페이지로 이동할 때마다 세션값에 변화를 줄 것인지 결정하는 옵션입니다.
- saveUninitialized : 세션에 저장할 내용이 없더라도 처음부터 세션을 설정할지 결정하는 옵션입니다.
- secret : 쿠키에 서명을 추가하는 것입니다. cookie-parser의 secret 과 같게 설정하는 것이 좋다고 합니다.
- store : 외부 저장소에 연결할 때 사용하는 옵션입니다. 보통 이 옵션으로 레디스 같은 저장소를 연동합니다.
- unset : 세팅되지 않은 req.session의 결과를 컨트롤 하는 옵션입니다.
번외로 cookie 옵션의 기본값은 { path: '/', httpOnly: true, secure: false, maxAge: null }
입니다.
5️⃣ 코드로 적용하기
1
2
3
4
5
6
7
8
9
10
11
app.use(cookieParser(process.env.COOKIE_SECRET));
const sessionOption = {
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
store: new RedisStore({ client: redisClient }),
};
1.5버전 아래까지 통용되기 위해 cookie-parser 아래에 코드를 위치시킵니다.
secret 옵션은 cookie-parser의 secret과 통일시켜줍니다.
secure 옵션은 https를 사용한다면 true로 해주고 그렇지 않다면 false를 사용하도록 합니다.
또한 store를 redis로 사용함으로써 멀티 프로세스 배포환경에서 같은 세션 데이터 저장소를 사용하도록 하기위해 redis를 설정해줍니다.
이 정도가 기본 세팅인듯하고 추가 세팅은 공식 홈페이지 를 참조하여 본인의 기호에 맞게 설정하시면 될 것 같습니다.
6️⃣ 마치며
오늘은 Express의 라이브러리 express-session 에 대하여 알아보았습니다.
이 라이브러리는 주간 다운로드수가 80만명 대일 만큼 유명한 라이브러리 인데요.
세션을 사용하신다면 꼭 이용하시는 것을 추천드립니다. 다음 시간에는 CORS 라이브러리에 대해 알아보도록 하겠습니다.
틀린 부분이나 질문 있으시면 아래로 댓글 부탁드립니다.
읽어주셔서 감사합니다.