04-29 02:46
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[Programming / WebApp] Express-Session 본문

Programming/Web App

[Programming / WebApp] Express-Session

cinema4dr12 2016. 9. 16. 15:03

HTTP는 현재의 상태를 알 수 없는 구조로 되어 있기 때문에 사용자 데이터를 저장하는 방법이 필요하다.
이를 해결하기 위한 방법이 Cookies를 저장하거나, HTTP를 통해 사용자 데이터를 전송하는 방법이 있는데 이 두 가지 방법 모두 Client 측에서 읽기가 가능하므로, 보안에 취약할 수 있다.

이에 반해, Session은 이를 암호화하여 사용자 데이터에 대한 보안을 강화하는 방법이다.
작동 방식은, 사용자에게 ID를 부여하고 이 ID를 통해 모든 request를 생성하는 방식으로, ID와 연동된 사용자 데이터가 Client가 아닌 Server에 저장되는 방식이다.
Server가 재시작 되지 않는 한, 동일한 ID로 데이터가 연동될 것이다.


Express-Session 설치

Node.js의 express-session 역시 Node Package Manager(NPM)를 통해 설치가 가능하다.

> npm install --save express-session


활용

Session이 가장 널리 사용되는 활용 예는 뭐니뭐니해도 로그인이라 생각된다.
즉, Server는 현재 사용자가 로그인 상태인지 아닌지를 체크하여 그 상황에 맞는 응답을 해 주는 것이다.

우선 가장 간단한 예제를 살펴보자.
사용자가 페이지 방문 카운트를 기록하는 예제이다.
app.js에  다음과 같이 코드를 작성한다.

[{EXPRESS_PROJECT_ROOT}/app.js]

var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');

var app = express();

app.use(cookieParser());
app.use(session({secret: "secret!"}));

app.get('/', function(req, res){
    if(req.session.page_view_count){
        req.session.page_view_count++;
        res.send("당신은 이 페이지를 " + req.session.page_view_count + "번 방문하셨습니다.");
    }
    req.session.page_view_count = 1;
    res.send("이 페이지의 첫 방문을 환영합니다!");
});

app.listen(3000);


이제 웹 브라우저에서 'localhost:3000/' 경로로 주소를 입력하면 다음과 같은 페이지가 렌더링 될 것이다.

개발자 도구에서 Application > Cookies > http://localhost:3000를 살펴보면,

알 수 없는 Value(암호화 되었기 때문에)이 표시된 Session을 확인할 수 있다.

이제 이 페이지를 새로고침(F5)을 여러번 하면 (가령 21번) 다음과 같이 페이지가 렌더링 될 것이다.


Session은 웹 서비스의 Production 단계에서 매우 중요한 도구이므로 옵션에 대해 가능한 정확히 잘 알고 쓰는 것이 중요하다.
Session의 각종 옵션에 대한 자세한 내용은 express-session Github 페이지를 참고하도록 한다.

Comments