[javascript] Express.js에서의 로그인 세션 유지 방법

웹 애플리케이션을 개발할 때, 사용자 로그인 세션의 유지는 매우 중요합니다. Express.js는 Node.js를 기반으로 한 웹 프레임워크로, 로그인 세션을 관리하기 위한 다양한 방법을 제공합니다.

세션 미들웨어 설치

로그인 세션을 구현하기 위해 우선 Express.js에서 제공하는 세션 관리 미들웨어를 설치해야 합니다. express-session은 많이 사용되는 세션 미들웨어 중 하나입니다. 다음 명령어를 사용하여 설치할 수 있습니다:

npm install express-session

세션 설정

Express.js 애플리케이션에서는 세션을 구성해야 합니다. 이를 위해 앱의 app.js 파일 등에서 다음과 같은 코드를 작성합니다:

const express = require('express');
const session = require('express-session');

const app = express();

app.use(session({
  secret: 'mysecretkey',
  resave: false,
  saveUninitialized: true,
}));

여기서 secret 키는 세션 데이터를 암호화하는 데 사용되는 비밀 키입니다. 이 비밀 키는 보안에 매우 중요하므로 신중하게 선택해야 합니다. resavesaveUninitialized는 세션 미들웨어에 대한 추가 옵션입니다.

로그인 처리

로그인이 성공하면 사용자의 정보를 세션에 저장하여 로그인 상태를 유지해야 합니다. 예를 들어, 사용자가 로그인하면 다음과 같은 코드를 사용하여 세션에 사용자 정보를 저장할 수 있습니다:

app.post('/login', (req, res) => {
  // 사용자 인증 로직 수행

  // 로그인이 성공하면 세션에 사용자 정보 저장
  req.session.user = {
    username: 'john',
    email: 'john@example.com',
  };

  res.redirect('/');
});

위 코드에서 req.session 객체를 사용하여 세션에 사용자 정보를 저장합니다. 이렇게 하면 사용자가 로그인 상태를 유지하며, 다른 페이지에서도 세션에 저장된 정보를 사용할 수 있습니다.

세션 인증 미들웨어

로그인이 성공했다면, 다른 라우트에서 사용자가 인증되었는지 확인하기 위한 세션 인증 미들웨어를 사용할 수 있습니다. 예를 들어, 사용자가 로그인되어 있는지 확인하려면 다음과 같은 미들웨어 함수를 추가합니다:

const isAuthenticated = (req, res, next) => {
  if (req.session.user) {
    // 세션에 사용자 정보가 있으면 다음 미들웨어로 이동
    next();
  } else {
    // 로그인되어 있지 않으면 로그인 페이지로 이동
    res.redirect('/login');
  }
};

app.get('/dashboard', isAuthenticated, (req, res) => {
  // 세션 인증이 통과된 경우에만 실행되는 라우트 핸들러
  res.render('dashboard');
});

위 코드에서 isAuthenticated 함수는 세션에 사용자 정보가 있는지 확인합니다. 사용자가 인증되었을 경우에만 다음 미들웨어나 라우트 핸들러로 이동하고, 그렇지 않은 경우 로그인 페이지로 이동시킵니다.

세션 제거

로그아웃이나 세션 만료 시에는 세션을 제거해야 합니다. 다음과 같은 코드를 사용하여 세션을 제거할 수 있습니다:

app.get('/logout', (req, res) => {
  // 세션 제거
  req.session.destroy();

  // 로그아웃 후 리다이렉트
  res.redirect('/login');
});

위 코드에서 req.session.destroy()를 호출하여 현재 세션을 제거합니다.


Express.js에서 로그인 세션을 유지하는 방법을 살펴보았습니다. 세션 관리를 통해 사용자의 로그인 상태를 유지하는 것은 웹 애플리케이션의 보안과 사용자 경험에 큰 도움이 됩니다. Express.js의 세션 미들웨어와 관련된 자세한 내용은 공식 문서를 참조하시기 바랍니다.