더북(TheBook)

express-session 1.5 버전 이전에는 내부적으로 cookie-parser를 사용하고 있어서 cookie-parser 미들웨어보다 뒤에 위치해야 했지만, 1.5 버전 이후부터는 사용하지 않게 되어 순서가 상관 없어졌습니다. 그래도 현재 어떤 버전을 사용하고 있는지 모른다면 cookie-parser 미들웨어 뒤에 놓는 것이 안전합니다.

exress-session은 인자로 세션에 대한 설정을 받습니다. resave는 요청이 왔을 때 세션에 수정 사항이 생기지 않더라도 세션을 다시 저장할지에 대한 설정이고, saveUninitialized는 세션에 저장할 내역이 없더라도 세션을 저장할지에 대한 설정입니다. 보통 방문자를 추적할 때 사용됩니다. 현재는 둘 다 필요없으므로 false로 하였습니다. secret은 필수 항목으로 cookie-parser의 비밀키와 같은 역할을 합니다.

express-session은 세션 관리 시 클라이언트에 쿠키를 보냅니다. 이를 세션 쿠키라고 부릅니다. 안전하게 쿠키를 전송하려면 쿠키에 서명을 추가해야 하고, 쿠키를 서명하는 데 secret의 값이 필요합니다. cookie-parser의 secret과 같게 설정해야 합니다.

cookie 옵션은 세션 쿠키에 대한 설정입니다. maxAge, domain, path, expires, sameSite, httpOnly, secure 등 일반적인 쿠키 옵션이 모두 제공됩니다. 현재 httpOnly를 사용해서 클라이언트에서 쿠키를 확인하지 못하도록 했고, securefalse로 해서 https가 아닌 환경에서도 사용할 수 있게 했습니다. 배포 시에는 https를 적용하고 securetrue로 설정하는 것이 좋습니다.

예제 코드에는 나와 있지 않지만, store라는 옵션도 있습니다. 현재는 메모리에 세션을 저장하도록 되어 있습니다. 문제는 서버를 재시작하면 메모리가 초기화되어 세션이 모두 사라진다는 것입니다. 따라서 배포 시에는 store에 데이터베이스를 연결하여 세션을 유지하는 것이 좋습니다. 보통 레디스(Redis)가 자주 쓰입니다. 레디스의 사용 방법에 대해서는 15.1.8절에서 설명합니다.

express-session은 req 객체 안에 req.session 객체를 만듭니다. 이 객체에 값을 대입하거나 삭제해서 세션을 변경할 수 있습니다. 나중에 세션을 한번에 삭제하려면 req.session.destroy() 메서드를 호출하면 됩니다. 현재 세션의 아이디는 req.sessionID로 확인할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.