WEB/🌳 Node.js

[Node.js] 12. 세션(Session)

무딘붓 2022. 8. 8. 20:47

 

세션(Session)이란?

 

간단히 말하면 쿠키보다 더 안전하게 데이터를 저장하는 방식이다.

 

쿠키는 브라우저에 저장되는 반면 세션은 데이터를 웹 서버에 저장한다.

세션은 각 클라이언트에 부여한 고유 Session ID로 클라이언트를 구분해 해당 클라이언트에 맞는 서비스를 제공한다.


 express-session 설치와 실행 예시

 

npm install express-session

npm을 이용하여 설치해주면 express에서 세션 기능을 간단하게 사용할 수 있게 된다.

var express = require('express')
var parseurl = require('parseurl')
var session = require('express-session')

var app = express()

app.use(session({
    secret: 'keyboard cat',         // 버전관리 소스코드에 포함해서는 안됨!
    resave: false,                  // 세션 데이터가 바뀌기 전까지는 세션 저장소에 값을 저장하지 않는다.
    saveUninitialized: true,        // 세션이 필요하기 전까지는 세션을 구동시키지 않는다.
}))

app.get('/', function (req, res, next) {
    if (req.session.num === undefined) {
        req.session.num = 1;
    }
    else {
        req.session.num++;
    }
    res.send(`Views : ${req.session.num}`)
})

app.listen(3000);

방문횟수를 카운트해서 보여주는 간단한 세션 사용 예시이다.

 

한가지 문제점이 있다면, 세션은 브라우저를 닫을때 삭제가 되므로 브라우저를 종료하고 다시 실행하면 카운트가 초기화 된다. 이러한 정보를 저장하기 위해서는 세션을 파일 등에 저장해야한다.


세션 저장소 

 

세션 데이터를 저장하는 장소를 세션 저장소라고 부른다.

이 세션 데이터의 default는 MemoryStore이고, MemoryStore는 브라우저가 종료되면 저장된 데이터도 함께 사라진다.

 

이를 세션 저장소를 바꾸는 방법 중에서 가장 간단한 방법인 데이터를 파일에 저장하는 session-file-store를 알아보자.

npm install session-file-store

위와 같은 방법으로 설치를 한 다음, 다음 코드를 실행시켜보자.

var express = require('express')
var parseurl = require('parseurl')
var session = require('express-session')
var FileStore = require('session-file-store')(session);

var app = express()

app.use(session({
    secret: 'keyboard cat',         // 버전관리 소스코드에 포함해서는 안됨!
    resave: false,                  // 세션 데이터가 바뀌기 전까지는 세션 저장소에 값을 저장하지 않는다.
    saveUninitialized: true,        // 세션이 필요하기 전까지는 세션을 구동시키지 않는다.
    store: new FileStore()          // 파일에 세션 저장
}))

app.get('/', function (req, res, next) {
    if (req.session.num === undefined) {
        req.session.num = 1;
    }
    else {
        req.session.num++;
    }
    
    request.session.save(function () {
            res.send(`Views : ${req.session.num}`)
    });
    
})

app.listen(3000);

session 객체에 store: new FileStore()를 추가하여 세션을 파일에 저장하게 한다.

session.save(callback)함수는 현재 세션의 데이터를 파일에 저장하고, 저장이 끝나면 콜백함수를 실행한다.

 

해당 파일이 위치한 폴더의 하위 폴더로 sessions가 생기고, 파일이 생성된다.

해당 파일을 열어보면

{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"num":5,"__lastAccess":1659926101100}

위와같이 세션의 정보가 저장되어있음을 확인할 수 있다.


 

 

 

'WEB > 🌳 Node.js' 카테고리의 다른 글

[Node.js] 11. 쿠키의 생성과 사용  (0) 2022.08.07
[Express] 2. 미들웨어  (0) 2022.08.06
[Express] 1. 설치방법과 라우팅  (0) 2022.08.06
[Node.js] 10. MySQL 연동  (0) 2022.08.05
[Node.js] 9. 패키지 매니저 npm  (0) 2022.08.02