-
7장 express 를 활용한 session 처리MeanStack (deprecated) 2016. 6. 12. 00:08
이번엔 빠르게 express 를 이용한 session 처리를 알아본다.
HTTP는 비연결 지향형 프로토콜이기 때문에 사용자가 요청한 웹 파일의 전송이 끝나면 연결이 끊겨 버린다.
이는 웹서버가 모든 HTTP 요청을 독립적으로 처리하는 것 이므로, 만약 session 정보가 없다면, 요청이 올 때마다
이전 요청에 대한 정보는 전혀 남아 있지 않기 때문에 , 어떠한 서비스에 로그인을 해서 해당 사용자의 정보를
정보를 유지하며 그에 맞는 서비스를 제공하기 위해서는 session 처리는 필수적인 요소이다.
session은 웹 서버에서 접속자들의 정보를 구별하는 식별키라고 보면 된다.
사용자가 웹 서버에 HTTP 프로토콜로 웹페이지를 요청 할 때 서버는 해당 접속자에 관한 식별키를 쿠키 형식으로
사용자의 컴퓨터에 발급하게 되고, 이는 사용자가 요청할 때 마다 쿠키의 식별키와 서버의 세션정보를 비교하여
접속자에 맞는 서비스를 제공하게 된다.
cookie 방식과 session 방식이 있는데 cookie 방식은 사용자의 모든 정보를 사용자의 컴퓨터에 저장하게 되고 ,
session 방식은 사용자의 정보는 서버에 저장하고, 그 세션정보에 관한 식별키만 cookie 데이터로 사용자의
컴퓨터에 저장하기 때문에 당연히 보안적인 측면에서는 session 방식이 훠얼씬 안전하다.
express 에서는 session 처리를 하기 위해 express-session 이라는 미들웨어가 존재한다.
당장 설치를 해보자. 이제 설치하는 법은 당연히 알고 있을 것 이라고 생각한다.
(모듈의 이름은 express-session 이다.)
express-session 은 세션 식별자를 서명하기위해 , 쉽게 말하면 cookie 에 저장 할 식별키를 지정하기위한
비밀 문자열을 사용한다. 이 비밀 문자열은 악성세션 위조를 방지하는 과정에 도움을 줄 것 이다.
이 비밀문자열을 설정하기 위해 config/env 폴더의 developement.js 파일을 변경하자.
module.exports = { sessionSecret : 'thisissessionSecret' }
다음과 같이 sessionSecret 에 비밀문자열을 설정한다.
본인은 위 스샷과 같이 설정하였다.
참고로 이는 예전에 했던 환경구성에서 처럼 development 즉 , 개발자 환경에서 접속하였을 때의 비밀 문자열
이다. 추후 사용자 측의 환경을 구성하였을 때 사용자측의 비밀문자열 역시 설정 할 것이다.
이제 session-secret 을 express 환경에 넣기 위해 config 폴더의 express_config.js 파일을 수정하자.
var express = require('express'), morgan = require('morgan'), compress = require('compression'), bodyParser = require('body-parser'), methodOverride = require('method-override'), config = require('./config'), //New!! session = require('express-session') //New!! ; module.exports = function() { var app = express(); if(process.env.NODE_ENV === 'development') { app.use(morgan('dev')); }else if (process.env.NODE_ENV === 'production') { app.use(compress()); } app.use(bodyParser.urlencoded({ extended : true })); app.use(bodyParser.json()); app.use(methodOverride()); app.use(session({ // New!! start saveUninitialized : true, resave : true, secret : config.sessionSecret })); // end app.set('views', './app/views'); app.set('view engine', 'ejs'); require('../app/routes/index.server.routes.js')(app); app.use(express.static('./static')); return app; }
먼저 sessionSercret을 추가한 development.js 파일을 불러오기 위해 ./config 를 require 시켰다.
(보면 어떤식으로 불러오는지 이해가 되어야 한다. express_config.js 에서 config.js 를 불러오고 config.js 에서는
env 폴더의 development.js 를 불러오도록 되어있다. )
그리고 session 설정을 위한 express-session 을 require 시킨다.
이제 app.use 를 사용하여 session 사용하기 위한 코드를 작성한다.
위 session 옵션중 secret 은 해딩 비밀키를 설정하고, (코드를 보면 알겠지만 아까 지정한 비밀키를 불러온다.)
saveUninitialized 는 초기화되지 않은 세션정보도 저장되는지에 관한 옵션이다
resave 는 같은 세션정보라도 다시 저장할건지에 대한 옵션이다. 둘다 기본옵션이 true 이니 true 로 하자.
이 3가지 옵션은 꼭 들어가야 한다.
이제 session을 설정 하였으니 사용자의 접속정보를 추적하기 위해 app/controllers/ 폴더로 가서
index.server.controller.js 를 수정하자.
먼저 req.session.lastVisit 이 존재한다면 console 로 lastVisit 를 출력하도록 하였다.
이는 사용자가 접속 한 후 다시 접속한다면 그전 접속정보를 보여 줄 것이다.
그리고 lastVisit 에는 현재 시간을 지정하였다.
exports.render = function(req,res) { if(req.session.lastVisit) { console.log(req.session.lastVisit); } var time = new Date(); req.session.lastVisit = time.getFullYear()+"-"+(time.getMonth()+1)+"-"+time.getDate()+" .. " +time.getHours()+"-"+time.getMinutes()+"-"+time.getSeconds(); res.render('index', {title : 'First Title'}); }
이 코드는 현재의 시간을 보여주는 코드로서 이제 접속하면 사용자의 최종 접속시간이 나타 날 것 이다.
자 이제 서버를 키고 접속을 해보자.
한번 접속을 한 뒤 서버를 끄지 않고 다시 접속을 해보자.
위 스샷 같이 세션에 저장된 사용자의 최종 접속시간이 나타날 것 이다.
이로써 express 에서 session 처리에 대해 알아 보았다.
다음 장에는 mongodb 를 알아보고 연결 해볼 것 이다.
(끝)
(현재 프로젝트 구조)
'MeanStack (deprecated)' 카테고리의 다른 글
9장 mongoose (몽구스) 를 이용한 Mongodb 연결 (4) 2016.06.14 8장 MeanStack 의 또 다른 조각 MongoDB 를 알아보자 (0) 2016.06.13 6장 express 정적파일 컨트롤 + 뷰시스템 (ejs) (0) 2016.06.10 5장 express 추가 구성, 다양한 환경 대응 (0) 2016.06.08 4장 express 를 활용한 Routing 처리 (0) 2016.06.08