본문 바로가기
TIL

[TIL] express-session

by 쾌횽 2024. 2. 6.
반응형

🧐 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

댓글