Session 이란?
서버가 해당 서버에 접근하는 클라이언트를 식별하는 방법 중 하나
서버는 접근하는 클라이언트에게 response-header field인 set-cookie 값으로 클라이언트 식별자인 session-id를 발행한다.
HTTP Session 동작 순서
클라이언트가 서버로 http 요청을 할 때, 서버에서 request-header field인 cookie를 확인해 해당 session-id를 보내왔는지 확인한다.
만약 없다면 session-id를 생성해 클라이언트에게 response-header field에 set-cookie 값으로 session-id를 발행한다.
이 때 발행된 쿠키는 메모리(브라우저)에 저장되며, 세션 종료시 같이 종료된다.
Node js에서 Session 관리
Node.js에서는 express-session이라는 모듈을 사용한다.
npm install --save express-session
우선 간단한 예제를 보자. 아래 예제는 express-session 미들웨어를 추가하는 예제이다.
secret : 세션 식별자를 쿠키에 저장하기 전에 암호화하기 위해 필요한 옵션
resave : 요청이 왔을 때 세션을 수정하지 않고 세션을 다시 저장소에 저장 여부
saveUninitialized : 초기화 되지 않은 세션을 강제로 저장.
const express = require('express');const app = express();const session = require('express-session');app.use(session({resave: false,saveUninitialized: true// cookie: {secure: true }}));
위에서 말했듯이 session을 사용하게 되면 브라우저에 세션에서 할당되는 session-id 값을 지닌 쿠키가 생성된다.
처음에는 저장된 쿠키가 없지만 아래의 코드를 추가시켜 보자. express-session 미들웨어를 추가시켰고 해당 미들웨어에서 세션에 대한 정보를 req.session으로 받는다.
app.get('/login', (req, res) => {session.userPw = '1234';});
http://localhost:3000/login 으로 접속하여 보자.
쿠키가 생성이 되었음을 확인할 수 있다. connect.sid라는 이름으로 value는 secret 값이 추가되어 암호화된 임의의 문자열로 저장이 되어있을 것이다.
아래 코드를 추가시키고 /home으로 접속하면 저장된 쿠키를 통해 저장된 세션으로부터 userId와 userPw를 가져올 수 있다.
app.get('/home', (req, res) => {userPw: session.userPw});
쿠키를 삭제 하고 싶다면 아래의 코드를 참조하자.
app.get('/delete', (req, res) => {});
이외에도 cookie의 maxAge 를 변경할 수도 있다.
app.get('/maxage', (req, res) => {req.session.cookie.maxAge = hour;req.session.userId = "test3";});
정리
express-session을 사용하면 session 기반 인증 서버를 구현할 수 있다.
추가적으로 express-session npm site 에 접속하면 각 옵션들에 대한 자세한 정보가 있으니 확인해보면 좋을 것 같다.
곧 포스팅할 passport 역시 session을 기반으로 하기 때문에 session, cookie에 대한 이해를 위해 추가적으로 검색을 해보는 것도 좋을 것 같다.
'Framework > Nodejs' 카테고리의 다른 글
error handler (0) | 2018.01.14 |
---|---|
pm2에 대해 알아보자 (0) | 2017.10.06 |
[마이크로서비스] 세네카와 익스프레스 연동 (0) | 2017.10.02 |
[마이크로서비스] Seneca (0) | 2017.10.02 |
비동기와 CPU Bound (0) | 2017.09.04 |