웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > webdevetc

Node Express에서 간단한 Session 구현 방법 및 예제 보기

Last Modified : 2023-11-01 / Created : 2023-10-30
319
View Count
안녕하세요! 서버에서 사용자의 정보를 담는 방법 중 하나로 세션 방식을 사용합니다. 보통 세션이냐 아니면 토큰이냐를 결정하고는 하죠. 둘 다 장단점이 있지만 세션의 가장 큰 장점은 쉽고 편하다가 아닐까 생각됩니다. 예전 php, python을 하다 현재는 node express 환경에서 세션을 사용하고 있는데 session에 대하여 아래와 같이 다시 한 번 정리하고 알아보려고 합니다!




# Node Express에서 세션 사용 방법 알아보기


우선 세션이란 무엇인지 이해해야 합니다. 서버 개발자라면 세션을 다뤄본 경험이 한 번은 있지 않을까 생각됩니다.

세션(Session)이란?


세션은 서버에서 사용자 정보를 저장하기 위한 기술 중 하나입니다. 이때 세션의 정보는 고유하기 때문에 사용자가 웹사이트를 방문할 때 또는 다시 방문할 때 인증 과정을 거치지 않고도 사용자의 상태나 정보를 일정 시간 동안 유지하게 해 줍니다. 이런 이유로 보안, 인증 목적으로 세션이 사용됩니다.

다음에서는 실제 nodejs, express 서버 환경에서 세션을 사용하는 방법을 간략히 알아봅니다.


Express에서 세션 설정하기


참고로 아래와 같은 순서대로 실행되게됩니다.
1. 필요한 세션 라이브러리 설치, express-session
2. 서버에 세션 미들웨어를 설정하기
3. 세션을 실제로 사용해보기

제일 먼저 필요한 모듈 설치부터 하나씩 알아보죠!


2.1. express-session 미들웨어 설치


먼저, 세션을 사용하기 위해서는 `express-session` 미들웨어를 설치해야 합니다.
npm install express-session

npm 패키지 라이브러리를 사용하여 해당 모듈을 설치하였습니다. express-session을 사용하면 간단하게 설정하고 사용하는 것이 가능합니다. 다음으로 설치된 라이브러리를 설정해보도록 하겠습니다.

[ 참고 ] express-session 이 외에 다른 방법은?
서버 저장소를 위해 express-session 세션도 너무 유명하고 가장 많이 쓰이는 라이브러리이지만 다른 방법들도 가능합니다.
  • cookie-session
  • connect-redis
  • connect-mongo 
  • express-sessions
  • ...


2.2. 세션 미들웨어 설정


가장 먼저 express 앱에 세션 미들웨어를 아래와 같이 추가합니다.
const express = require('express');
const session = require('express-session');

const app = express();

app.use(session({
  secret: 'your-secret-key',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: false } // set to true if you're using https
}));

여기서는 몇 가지 옵션으로 세션이 설정되었습니다. 하나씩 알아봅니다.
secret // 세션값을 확인할 때 사용하는 키 값 실제로 사용시에는 임의로 설정하거나 추측 불가능한 값들을 사용
resave // 세션 값이 변경되지 않을 경우의 저장 여부를 결정
saveUninitialized // 초기화 되지 않은 세션을 강제로 저장할 것인지 여부를 결정
cookie: // https 보안 연결 환경에서는 { secure: true }를 설정하여 보안 연결시에만 쿠키가 저장되도록 함

이제 설정 방법을 알아봤습니다. 다음은 세션을 사용하는 방법을 알아봅니다.


3. 세션 사용 예제 만들기


세션은 저장소이므로 세션에 특정 값을 저장하고 불러올 수 있습니다. 사용자를 특정할 수 있는 값들을 설정할 수 있죠. Webisfree.com에서는 방문자 카운트를 위해서 세션 값을 사용합니다. 즉 새로운 방문자가 온 경우 세션을 사용하여 1을 추가하는데 이용할 수 있죠.
app.get('/', (req, res) => {
  if (!req.session.views) {
    req.session.views = 1;
    // Do something if the first time visited
    res.send("Welcome to this page for the first time!");
  } else {
    res.send("Goot to see you again!");
  }
});

위 예제는 session에 views라는 변수를 선언하고 이 값이 없는 경우 1이란 숫자를 선언하게 됩니다. 새로운 세션인 경우에만 1의 값을 가지게 될 것입니다. 또한 새로운 방문시에만 특정한 명령을 수행할 수 있죠.


3.1. 세션 데이터의 저장 및 불러오기


세션 데이터를 새롭게 저장하고 가져오는 방법입니다.
req.session.username = 'ChatGPT';

console.log(req.session.username);

위와 같이 일반적인 변수의 선언과 호출 방식과 동일합니다. 원하는 세션 키와 값을 저장하고 불러올 수 있죠.


! 세션 저장 방법의 차이점은?


여기까지 세션에 대하여 알아봤습니다. 위에서 다양한 대체 방법이 있다고 언급했는데요 ~ 세션은 메모리나 그 외 외부 스토어(예: Redis, MongoDB)를 사용한 저장 방법이 있습니다.

- 메모리 스토어: 기본적으로 제공되며, 주로 개발 환경에서 사용됩니다. 단, 실제 운영 환경에서는 사용하지 않는 것이 좋습니다. 서버가 재시작되면 모든 세션 데이터가 사라질 수 있기 때문입니다.

- 외부 스토어: 실제 운영 환경에서는 외부 스토어를 사용하는 것이 더 안정적입니다. Redis나 MongoDB와 같은 데이터베이스를 활용하여 세션 데이터를 영구적으로 저장할 수 있습니다.

개인적으로는 외부 스토어를 사용하는 것을 추천합니다. 실제 운영 환경에서의 안정성 및 확장성 때문입니다.


마치면서. 다섯줄로 요약하자면?


1. 세션은 사용자의 상태나 정보를 일정 시간 동안 유지하게 해 줍니다.
2. `express-session` 미들웨어를 사용하여 Express에서 세션을 설정하고 사용할 수 있습니다.
3. 세션 데이터는 `req.session`을 통해 저장하고 접근할 수 있습니다.
4. 메모리 스토어와 외부 스토어 중에서 외부 스토어를 사용하는 것이 실제 운영 환경에서는 더 좋습니다.
5. 외부 스토어를 활용하면 세션 데이터를 안정적으로 저장하고 관리할 수 있습니다.

Previous

개발 인터뷰 단골 질문 중 하나인 메모이제이션을 알아보자

Previous

구글 리캡챠 recaptcha는 무엇일까? 내 웹사이트에 적용하는 방법 알아보기?