ํฐ์คํ ๋ฆฌ ๋ทฐ
session์ผ๋ก ๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ (Sequelize DB ํ์ฉ)
๋๋์ด๋ฐ๐พ 2018. 10. 23. 02:36๊ธ์ ์ ๋ชฉ์ session์ผ๋ก ํ์๋๋ฐ session์ ์ฟ ํค์์ ์ฝ๊ฐ ๋ณํ๋? ํน์ ๊ฐ์ ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค.
์ฟ ํค์ ์ธ์ ์ ๋ํด ์ฐ๋ ์ด์ ์ ๊ฐ๋จํ ์๊ฐ๋ฅผ ํ๊ฒ ์ต๋๋ค.
- ์ฟ ํค์ ์ธ์ ์ ์ฐ๋ ์ด์ ๋?
: Http ํ๋กํ ์ฝ์ ํน์ง ์ค ํ๋์ธ ๋น์ฐ๊ฒฐ์ฑ(connectionless)๊ณผ ์ํ๋ฅผ ์ ์งํ์ง์๋(stateless) ํน์ง ๋๋ฌธ์ ๋๋ค.
์ฟ ํค์ ์ธ์ ์ ์ฌ์ฉํ์ ๊ฒฝ์ฐ, ํ ๋ฒ ๋ก๊ทธ์ธ์ ํ๋ฉด ์ด๋ ํ ๋ฐฉ์์ ์ํด์ ๊ทธ ์ฌ์ฉ์์ ๋ํ ์ธ์ฆ์ ์ ์งํ๊ฒ ๋ฉ๋๋ค.
์ผํ๋ชฐ ์นดํธ ๊ธฐ๋ฅ๊ฐ์ ๊ฒฝ์ฐ ์ฅ๋ฐ๊ตฌ๋ ์ ๋ณด๋ฅผ ๊ณ์ํด์ ์ง๋๊ณ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ์ ์ด๋ฌํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์์ด์ผ ํ์ฃ .
** ์ฟ ํค **
์ธํฐ๋ท ์ฌ์ฉ์๊ฐ ์ด๋ ํ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ ๊ทธ ์ฌ์ดํธ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์๋ฒ๋ฅผํตํด ์ธํฐ๋ท ์ฌ์ฉ์์ ์ปดํจํฐ์ ์ค์น ๋๋ ์์ ๊ธฐ๋ก ์ ๋ณด ํ์ผ์ ์ผ์ปซ์ต๋๋ค. ์ด ๊ธฐ๋ก ํ์ผ์ ๋ด๊ธด ์ ๋ณด๋ ์ธํฐ๋ท ์ฌ์ฉ์๊ฐ ๊ฐ์ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋๋ง๋ค ์ฝํ๊ณ ์์๋ก ์๋ก์ด ์ ๋ณด๋ก ๋ฐ๋๋๋ค.
์์์ ๋งํ๋ ๊ฒ ์ฒ๋ผ ์ฟ ํค ์ ๋ณด๋ ์ฌ์ฉ์์ ์ปดํจํฐ์ ๋ชจ๋ ์ ์ฅ๋ฉ๋๋ค. ๋ณด์์ ๊ด๊ณ์๋ ์ ๋ณด๋ค์ด๋ฉด ๊ด๊ณ์๊ฒ ์ง๋ง ๋ก๊ทธ์ธ ์ ๋ณด์ ๊ฐ์ ์ ๋ณด๋ค์ ์ฟ ํค๋ก ์ฌ์ฉํ๋๊ฑด ์ณ์ง ์๊ฒ ์ฃ
** ์ธ์ **
์ฟ ํค์ ๊ธฐ๋ฅ์ ์ ์ฌํ์ง๋ง ์ธ์ ์ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ์ ๋ณด์ ๋๋ค. ์๋ฒ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์ฟ ํค์๋ ๋ฌ๋ฆฌ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ๋ ธ์ถ๋์ง ์๋๋ค๋ ์ ์ด ์ฐจ์ด์ ์ ๋๋ค.
์ฌ์ฉ์ ์ธก์์ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ๋ง์น ์ธ๋ฑ์ค์ ๊ฐ์ ๊ฐ๋
์ผ๋ก id๊ฐ๋ง ์ ์ฅํฉ๋๋ค. id ๊ฐ์ ํตํด ์๋ณธ ๋ฐ์ดํฐ์ ์ ๋ณด๋ค์ ์ฐธ์กฐํ ์ ์๊ฒ ๋๋ ๊ฒ์ด์ฃ . session id ๊ฐ์ด ์ค๋ณต๋ ์ผ์ ์์ผ๋ฉฐ ํ ๋ช
์ ์ฌ์ฉ์(์น๋ธ๋ผ์ฐ์ )์ ํ๋์ ์ธ์
์ด ์๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
์ผ๋จ npm์์ ๋ชจ๋์ ๊น์์ผํฉ๋๋ค. ์ค์น๊ฐ ์๋ฃ ๋์ผ๋ฉด,
$ npm install express-session
require๋ฅผ ํตํด ๋ถ๋ฌ์์ผ๊ฒ ์ฃ ? ๋ชจ๋ npm ๊ณต์ ํํ์ด์ง์ ์๋ ๋ด์ฉ์ ๋๋ค.
var session =
๊ทธ๋ฆฌ๊ณ ์ด์๊ฐ์ด
app.use(session({
secret:'keyboard cat',
resave:false,
saveUninitialize:true
}));
์ด๋ฐ ํ์์ ์๋์ ๋ณต์ฌํด์ฃผ์ธ์. secret์ด๋ผ๊ณ ํ๋ ๋ถ๋ถ์ session id ๋ฅผ ์ฌ์ฉ์์ ์น๋ธ๋ผ์ฐ์ ์ ์ฌ์ ๋ ๋ง๋ถ์ฌ์ ๋ค์ด๊ฐ๋? ๊ทธ๋ฐ ๊ฐ๋ ์ธ๋ฐ ๋ค๋ฅธ ๋ฌธ์๋ ์ซ์๋ก ์ฐ์ ๋ ๋ฉ๋๋ค. ๋๋จธ์ง ์์ฑ๋ค์ ๋ค ๊ถ์ฅ ๊ฐ์ด๋ผ๊ณ ํ๋ ์ผ๋จ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
์ด๋ฌํ ๋ก๊ทธ์ธ ํผ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. ์ฃผ์๋ฅผ ๋ณด๋ login์ด๋ผ๋ ๋ผ์ฐํฐ์์ ๋ ๋๋งํ๋ ํ์ด์ง๋ค์ ์ ๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ์ ๋ session ์ ๋ณด์ ํ์ฌ ๋ก๊ทธ์ธ ๋์ด์๋ ์ฌ์ฉ์์ ์ํ ๊ฐ์ session์ผ๋ก ๊ฐ๊ฒํ๊ณ ์ถ์ต๋๋ค.
๊ทธ๋ผ ์ด๋ฐ ์์๋ฅผ ๊ฐ์ ธ์ผ ํ๊ฒ ์ฃ
๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ๋ค๋ฉด ์ธ์ ๊ฐ์ ๊ฐ์ง ๊ฒ์ด๊ณ , ๋ก๊ทธ์ธ ํ์ ๋ก๊ทธ์์์ ํ๋ค๋ฉด ์ธ์ ๊ฐ์ ์ญ์ ํ๊ฑฐ๋ ํน์ ๋ณ๊ฒฝํด์ผ ํ ๊ฒ์ ๋๋ค.
์ฒซ ํ๋ฉด์ด ๋ก๋ฉ๋ ๋ session๊ฐ์ ์ด๊ธฐํ ์์ผ์ค๋๋ค. ๋ฌผ๋ก ์ธ์ ๊ฐ์ด ์ด๋ฏธ ์ค์ ๋์ด์๋ค๋ฉด ๋ฐ๊ฟ์ ์๋๊ธฐ๋๋ฌธ์ if๋ฌธ์ ํตํด ์ธ์ ๊ฐ์ด ์ค์ ๋๋๋ก ํฉ๋๋ค. login์ด๋ผ๋ ๊ฐ์ ํ์ฌ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ์ํ์ธ ๊ฒ์ ์๋ ค์ฃผ๊ธฐ ์ํ ๊ฐ์ด๋ฉฐ idx๋ User ํ ์ด๋ธ์ ๊ธฐ๋ณธํค ๊ฐ ์ ๋๋ค. ๊ธฐ๋ณธํค ๊ฐ์ ์๊ณ ์์ผ๋ฉด ํ ์ด๋ธ์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ค ์ ์ ์๊ฒ ์ฃ
1 2 3 4 5 6 7 | app.get('/index',function(req,res){ if(!req.session.login){ req.session.login = false req.session.idx = -1 } res.render('index'); }); | cs |
์๋จ์์ ๋ฐ์ดํฐ๋ฅผ Ajax๋ฅผ ํตํด POST๋ก ๋๊ฒจ์คฌ๋ค๊ณ ๊ฐ์ ํ๊ณ ์ด ํจ์๋ฅผ ์ฝ ํ๋ค๊ณ ๊ฐ์ ์ ํด๋ณด๊ฒ ์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ณ์ ์ ๋ณด๊ฐ DB์ ์๋ ์ ๋ณด์ ์ผ์นํ๋์ง ์ฒดํฌํ์ฌ ์ผ์นํ๋ค๋ฉด ok์ฌ์ธ๊ณผ session์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธ ์์ผ์ค๋๋ค. ์ ๊ฐ ๋ค์ ํด๋ผ์ด์ธํธ์ ์ธ์ ์ ๋ณด๋ฅผ ๋๊ฒจ์ฃผ๋ ์ด์ ๋ ๋ก๊ทธ์ธ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ก๊ทธ์ธ ๋ฒํผ ํน์ ๋ก๊ทธ์์ ๋ฒํผ์ ๋ณด์ด๊ฒ ํ๊ธฐ ์ํด์ ์ ๋๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | var models = require('../models'); function loginFunction(id,pwd,res,req){ var responseData; models.User.findOne({ where: {user_id: id} }) .then(function(user){ if(user==null || user.dataValues.password!=pwd){ responseData = {'result':'no','flag':req.session.login}; res.json(responseData); console.log('๋ก๊ทธ์ธ ์คํจ'); } else{ req.session.login = true req.session.idx = user.dataValues.id responseData = {'result' : 'ok','session':req.session.login}; res.json(responseData); console.log('๋ก๊ทธ์ธ ์ฑ๊ณต'); } }); } exports.loginFunction = loginFunction; | cs |
๊ทธ๋ฆฌ๊ณ ๋ก๊ทธ์์ ๋ผ์ฐํฐ๋ฅผ ๋ง๋๊ฒ ๋๋ค๋ฉด ์ด์ ๊ฐ์ด ์ธ์ ๊ฐ์ ๋ค์ ๋ฐ๊ฟ์ค์ผํ๊ฒ ์ฃ
์ด๋ฐ ํค๋๋ฅผ ๋ชจ๋ ํ์ด์ง์ ๋ฃ์ ๊ฒ์ธ๋ฐ ๋ก๊ทธ์ธ ์ํ ๊ฐ์ ๋ฐ๋ผ ๋ณด์ฌ์ง๋ ๋ฒํผ์ด ๋ฌ๋ผ์ ธ์ผ ํ ๊ฒ ์
๋๋ค.
ํค๋๋ฅผ ๊ทธ๋ฆฌ๊ณ ์๋ ํ์ผ ์คํฌ๋ฆฝํธ ๋ถ๋ถ์์ ์๊น ์ค์ ํ๋ ์ธ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋๋ค. header ๋ผ์ฐํฐ์์ session๊ฐ์ ๋๊น๋๋ค.
1 2 3 | app.get('/header',function(req,res){ res.render('header',{login:req.session.login}); }); | cs |
1 2 3 4 5 6 7 8 9 10 11 12 | script. var f = !{login}; $(document).ready(function(){ if(f){ //๋ก๊ทธ์ธ ์ํ์ผ ๋ $("#login").hide() $("#logout").show() } else{ //๋ก๊ทธ์ธ ์ํ๊ฐ ์๋ ๋ $("#logout").hide() $("#login").show() } }); | cs |
์ ๊ฐ ์๊น ๋ก๊ทธ์ธ ์ ๋ณด ์ธ์๋ User ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค ๊ฐ ๋ํ session ์ ๋ณด๋ก ๋ฐ๋ก ์ ์ฅํด๋์๋๋ฐ ๊ทธ๋ ๊ฒ ๋๋ฉด ์ด๋์์๋ DB ์กฐ์์ ํ ์ ์๊ฒ ๋ฉ๋๋ค. ์๋ฅผ๋ค๋ฉด ๋ง์ดํ์ด์ง์์ ๋ํดํธ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ ์ ์ ์ผ์ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์ฑ์๋๋ ค๊ณ ํ ๋
์ด์ ๊ฐ์ด ์์ ๊ณต๋ฐฑ์ด ์๋๋ผ ๋ํดํธ ๊ฐ์ผ๋ก ๋ช๋ช ๊ฐ๋ค์ ๋ฏธ๋ฆฌ ๋ค ์ฑ์์ ธ์๊ธธ ๋ฐ๋ ์๋ ์์ต๋๋ค. ์ ๋ DB๊ฐ ๋ถ์ด์๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ก๊ทธ์ธ๊ณผ ๋์์ ์น ๋ค ์ ์ฅํ ํ์๋ ์๊ณ User ํ ์ด๋ธ์ ๊ธฐ๋ณธํค ๊ฐ๋ง ์๊ณ ์์ผ๋ฉด DB ๊ตฌ๋ฌธ์ ํตํ์ฌ ์ฌ์ฉ์ ์ ๋ณด์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์์ฌ ์๊ฐ ์๊ฒ ์ฃ
1 2 3 4 5 6 7 8 9 10 11 | app.get('/mypage',function(req,res) { if(req.session.login){ models.User.findOne({ where: {id: req.session.idx} }).then(function(info){ res.render('mypage',{data: JSON.stringify(info.dataValues)}); }) } else res.send("<script>alert('๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค.')</script><meta http-equiv='refresh' content='0; url=http://localhost:3000/login'</meta>"); }); | cs |
๋ง์ดํ์ด์ง๋ ๋น์ฐํ ๋ก๊ทธ์ธ์ด ๋์ด์๋ ์ํ์์๋ง ์ ๊ทผ์ด ํ์ฉ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ if๋ฌธ์ผ๋ก ํ ๋ฒ ์ฒดํฌํ๊ฒ ๋๊ณ ํต๊ณผ๊ฐ ๋๋ค๋ฉด DB ๊ตฌ๋ฌธ์ ํตํด์ idx ๊ฐ์ ํตํด ๊ฒ์๋ ์ ์ ์ ์ ๋ณด๋ฅผ ๋ฐํํ๊ฒ ๋๋๋ฐ ๊ทธ ์ ๋ณด๋ฅผ ๋ค์ ํด๋ผ์ด์ธํธ ๋จ์ผ๋ก ๋๊ฒจ์ค ํ์ ์ฌ์ฉํ๋ฉฐ ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๋ง์ดํ์ด์ง ํ๋ฉด์์ ์ ์ ์ ๋ณด๋ฅผ ์ ํ ํ๋ฉด ๋ฉ๋๋ค.
1 2 3 4 5 | script. var info = !{data}; document.getElementById('email').value=info.user_id; document.getElementById('name').value=info.name; document.getElementById('nickname').value=info.nick; | cs |
๋ชจ๋ ๊ฑธ ๋ค ํฌํจํ์๋ ์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด์ ํ๋ฉด ๊ตฌํ๋ถ๋ถ์ด๋ DB ์ค์ ์ ๊ด๋ จ๋ ๋ถ๋ถ์ ์๋ตํ์์ต๋๋ค.
๋๋ต์ ์ธ ๋์ ์์๋ก ์์ฑํ์์ผ๋ ์ํด ๋ถํ๋๋ฆฝ๋๋ค.
'Node.js > Node.js ์ค์ต' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js + Vue] ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ์ ์๋ ํ์ผ ๋ค์ด๋ก๋ํ๊ธฐ (0) | 2020.11.12 |
---|---|
sementic url ์ ์ฉํด๋ณด๊ธฐ (0) | 2018.10.10 |
callback ํจ์ ์ดํดํ๊ธฐ (0) | 2018.09.08 |
์ด๋ฏธ์ง url๊ณผ ํ์ผ์์คํ ์ ํตํ ์ด๋ฏธ์ง ๋ค์ด๋ก๋ (Flickr API ์ฌ์ฉ) (0) | 2018.09.05 |
node js async ๋ชจ๋ ์ฌ์ฉํ๊ธฐ (0) | 2018.07.20 |
- Total
- Today
- Yesterday
- foreignkey
- Spring Async
- nestjs module
- Spring
- nestjs directory
- sequelize
- NestJS
- typeorm
- nestjs/cli
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋น๋๊ธฐ ์์ฒญ
- nestjs config
- ์๊ณ ๋ฆฌ์ฆ
- nestjs typeorm
- typeorm ์ฐ๊ฒฐ
- node.js
- nestjs configService
- DeferredResult
- Promise bulk
- @nestjs/config
- android
- Request_Limit_Exceeded
- ๊ธฐ์์ฒญAPI
- nestjs doc
- JavaScript
- node.js backend
- nestjs project
- Promise error
- docker mysql
- backend-framework
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |