Session이란??

2020. 9. 13. 18:35Authentication

앞에서 쿠키에 대해 알아보았다. 정말 간단히 알아보았지만, 사용방법도 편리하고, 사용자의 기록을 가질 수 있어 정말 유용한 기능 중 하나이다. 하지만, 쿠키가 장점만 있는 것은 아니고, 다음과 같은 단점이 존재한다.

 

1. 사용자 정보에 대한 보안 취약점 .

2. http의 Header에 붙여서 전송하기 때문에 기존의 트래픽보다 더 많은 트래픽을 발생시킬 수 있다.

 

세션은 위의 두가지 문제에 대한 해결을 위해 나타났다. 쿠키가 클라이언트의 측의 데이터 저장이었다면, 세션은 서버 측(혹은 DB)에 정보를 저장시켜 놓고, 클라이언트는 그저 session_id만 쿠키로 저장시켜 놓는 것이다. 그러면, 일일이 쿠키에 모든 것을 저장시키는 것보다 과부하도 덜 오고 보안 문제도 서버에서 관리하기 때문에 더 안전할 것이다.

 

세션의 과정은 다음과 같다.

1. 사용자가 접속시 쿠키에 session_id가 있는지 확인한다.

2. 서버는 클라리언트의 요청에 대해 확인하고(검사) 쿠키에 session_id에 대한 키-값 쌍이 없으면 제공한다.

3. 그 후부터는 cookie 안의 session_id의 유효성을 확인하면서 서버에서 정보를 제공해준다.

 

P.S : 아래에 프록시를 사용하는데(딱 한줄이다.) brownbears.tistory.com/191 다음의 링크가 설명이 잘되있어서 기입한다.

 

const express = require('express');
const session = require('express-session');
const app = express();
const dotenv = require('dotenv');
const port = 3000;

//환경변수 사용위해 필요
dotenv.config();

app.use(session({
    HttpOnly : true, // 자바스크립트를 통해서 세션 사용할 수 없도록 한다.
    secure : true, //https에서만 세션을 주고 받는다.
    secret : process.env.SECRET, //세션 발급시 사용할 키 ---> 꼭 비밀이여야 하므로 git사용시 gitignore 필수!!
    resave : false, //세션을 다시 저장할 것인가 
    saveUninitialized : true, //세션을 저장할때마다 초기화 할것인가
    cookie : { maxAge : 86400000 } //24시간 
}))


//단순히 '/'에 들어왔을 때 세션을 제공하는 기능을 만들어보자.
app.get('/', function (req,res,next) {
    req.session.session_ID = 'KIM'
    req.session.save();
    res.send(req.session);
})

app.listen(port, () => {
    console.log('session tutorial!!!');
})

다음과 같이 설정하였을 시(.env 파일은 스스로 만들어서 SECRET이라는 변수를 만들어 놓자.) 쉽게 session을 만들 수 있다. 그리고 localhost:3000에 들어가면 다음과 같은 것을 화면에 볼 수 있다.

{
cookie: {
originalMaxAge: 86400000,
expires: "2020-09-14T09:29:06.753Z",
httpOnly: true,
path: "/"
},
session_ID: "KIM"
}

이는 다양한 화면 페이지에서 응용한다면 방문 기록이나 그 외의 정보들을 쿠키보다 더 안전하게 관리할 수 있을 것이다. 그렇지만 단점도 존재한다. 계속되는 유저의 활동마다 세션에 정보를 저장한다면 이 또한 용량의 문제로 커질 수 있다. 또한 http의 stateless한 특징과 대비된다는 점도 있다. 그래서 다음번에는 TOKEN을 사용하는 방법에 대해 써보곗다.

'Authentication' 카테고리의 다른 글

express로 Cookie 간단히 넣기  (0) 2020.09.13
Authentication (1) - 인증 & 권한이란?  (0) 2020.09.13