머리글
이번 시간에는 세션 정보를 저장하는 방법을 알아보자.
MongoStore
세션 데이터는 기본적으로 쿠키에 저장되지 않고 세션 id만 저장된다.
세션 데이터는 서버 쪽에 저장된다.
서버에 저장되는 default session storage는 MemoryStore인데 실제 사용을 위해 존재하는 것은 아니다.
그래서 우리는 세션을 데이터베이스에 저장하기 위해 session store를 사용한다.
우리는 connect-mongo를 이용해서 세션을 MongoDB에 저장한다.
이렇게 한다면 서버를 재시작해도 세션은 데이터베이스에 있기 때문에 로그인 정보를 잊지 않는다.
우선 설치를 해보자.
npm i connect-mongo
그리고 mongoStore를 import 해서 사용할 수 있다.
import MongoStore from "connect-mongo";
...
app.use(
session({
secret: "hello!",
resave: true,
saveUninitialized: true,
store: MongoStore.create({ mongoUrl: '데이터베이스 주소'}),
})
);
이런 식으로 설정을 해주면 session이 데이터베이스에 저장된다.
이제 서버를 재시작하더라도 로그인 상태가 유지된다.
resave와 saveUninitialized라는 옵션이 있는데 이에 대해서 조금 더 알아보자.
resave
resave의 경우 모든 request마다 세션의 변경사항이 있건 없건 세션을 다시 저장한다.
세션의 만료일자를 업데이트해주는 기능을 따로 설정해놓지 않았다면 보통 true로 설정하여,
매 request마다 세션을 업데이트해주게 한다.
false의 경우 변경사항이 없는데 세션을 저장하면 비효율적이므로 효율의 향상을 위해 사용한다.
saveUninitialized
saveUninitialized의 경우 Uninitialized 상태의 세션을 저장한다.
이는 request 때 생성된 이후로 아무런 작업이 없는 초기 상태의 세션을 의미한다.
(우리 사이트의 경우 로그인 시 수정을 해준다.)
보통 클라이언트의 방문한 총횟수를 알기 위해 true를 사용하고,
resave와 마찬가지로 빈 세션이 스토리지에 쌓여 저장공간을 낭비하는 것을 방지하기 위해 false로 사용한다.
마무리
이번 시간에는 MongoStore를 사용하여 세션을 저장하고,
저장하기 위해 사용하는 옵션에 대해 알아보았다.
다음 시간에는 쿠키에 대해 추가적으로 알아보자.
'노마드 코더 > 유튜브 클론' 카테고리의 다른 글
[JavaScript, Node.js] 유튜브 클론 정리 7장 (8) - Github Login1 (0) | 2023.05.22 |
---|---|
[JavaScript, Node.js] 유튜브 클론 정리 7장 (7) - Cookie, Env File (2) | 2023.05.13 |
[JavaScript, Node.js] 유튜브 클론 정리 7장 (5) - Logged in (2) | 2023.05.08 |
[JavaScript, Node.js] 유튜브 클론 정리 7장 (4) - Session, Cookie (0) | 2023.05.04 |
[JavaScript, Node.js] 유튜브 클론 정리 7장 (3) - Login (0) | 2023.05.02 |