반응형
🧐 Express-Session
express-session은 express.js에서 세션(Session)기능을 쉽게 구현하기 위한 미들웨어이다.
세션(session)을 사용하기 위해서는 사용자 인증과 세션 스토리지를 통해 사용자 정보를 저장하고, 세션 정보가 담긴 쿠키를 사용자에게 발급하는 과정이 필요했는데, express-session은 이러한 복잡한 과정을 생략하여 간단하게 세션 기능을 구현할 수 있도록한다.
express-session은 세션 ID를 클라이언트에게 발급하고, 이 세션 ID를 통해 서버는 클라이언트의 상태를 추척할 수 있다.
즉, 세션ID를 발급받은 후에는 모든 서버 요청마다 세션 ID가 포함된 쿠키를 전달하게 되며, 이로 인해 서버는 클라이언트를 쉽게 식별할 수 있게 된다.
설치
yarn add express express-session
express-session은 아래와 같이 전역 미들웨어로 등록 된다.
// app.js
import express from 'express';
import expressSession from 'express-session';
const app = express();
const PORT = 3019;
app.use(express.json());
app.use(
expressSession({
secret: 'express-session-secret-key.', //세션을 암호화하는 비밀 키를 설정
resave: false, // 클라이언트의 요청이 올 때마다 세션을 새롭게 저장할 지 설정, 변경사항이 없어도 다시 저장
saveUninitialized: false, // 세션이 초기화되지 않았을 때 세션을 저장할 지 설정
cookie: {
// 세션 쿠키 설정
maxAge: 1000 * 60 * 60 * 24, //쿠키의 만료 기간을 1일로 설정합니다.
},
}),
);
app.listen(PORT, () => {
console.log(PORT, '포트로 서버가 열렸어요!');
});
POST /session API 만들기
/** 세션 등록 API **/
app.post('/sessions', (req, res, next) => {
const { userId } = req.body;
//클라이언트에게 전달받은 userId를 세션에 저장합니다.
req.session.userId = userId;
return res.status(200).json({ message: '세션을 설정했습니다.' });
});
- req.session은 클라이언트의 세션 정보를 관리하는 데 사용되는 객체이다.
- 클라이언트의 요청이 들어온다면, req.session.userId에 원하는 정보를 저장한다.
- userId대신 다른 이름을 사용하려면 req.session.<원하는 프로퍼티 명>의 형식으로 사용하면 된다.
GET /session API 만들기
/** 세션 조회 API **/
app.get('/sessions', (req, res, next) => {
return res.status(200).json({
message: '세션을 조회했습니다.',
session: req.session.userId ?? null, //세션에 저장된 usrId를 조회합니다.
});
});
- express-session은 클라이언트가 전달한 쿠키의 세션 ID를 바탕으로 req.session에서 정보를 조회한다.
- 만약 클라이언트가 제공한 세션 ID에 일치하는 세션이 없을 경우, null을 반환한다.
express-session의 정보는 서버가 종료되면 사라자는 단점이 있다.
이는 세션 정보가 인 메모리(In-Memory)방식으로 저장되기 때문인데, 이로 인해 서버가 재시작되거나 중지될 때 마다 모든 세션 정보가 사라진다. 이런 상황을 방지하기 위해, Redis와 같은 캐시 메모리 데이터베이스를 이용해 세션 정보를 영구적으로 저장하여 관리하기도 한다.
In-Memory Database
- 디스크가 아닌 주 메모리에 모든 데이터를 보유하고있는 데이터 베이스
- 디스크 검색보다 자료 접근이 훨씬 빠른것이 가장 큰 장점이다.
- 데이터가 휘발성이라 서버가 꺼져서 날아가도 상관없는 임시 데이터에 주로 쓰인다.
반응형
'TIL' 카테고리의 다른 글
[TIL] prisma schema ondelete의 noaction, cascade차이 (0) | 2024.02.14 |
---|---|
[TIL] 편메추 프로젝트 시작 (0) | 2024.02.08 |
[TIL] Access Token & Refresh Token (0) | 2024.02.02 |
[TIL] JWT(Json Web Token) (0) | 2024.02.02 |
[TIL] 개인과제 초기 설계 (0) | 2024.01.31 |
댓글