HTTP
: ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ ์ํต(request, response message)ํ๋ ํต์ ๋ฐฉ๋ฒ - stateless
Cookie
: ์๋ฒ์์ ์ ์ ๊ธฐ๋ก์ ์ ์ฅ
โ session โ ์ธ์ฆ์ผ๋ก ํ์ฅ๋ ์ ์์



์ด์ Nodejs๋ฅผ ์ด์ฉํด์ count์ ์๋ฅผ ๋๋ ค๊ฐ๋ฉด์ response ํค๋๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ์์ ์ธํ ํ๋ผ๊ณ ๋ช ๋ นํ๋ค
๊ทธ๋ฆฌ๊ณ ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์ ๋ช ๋ น์ ๋ฐ๋ผ ๋ค์์ ๋ฐฉ๋ฌธํ์ ๋ count๋ฅผ 2๋ก ๋ฐ๊พผ๋ค
!! ์ฟ ํค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ด๋ค ๊ฒ ํ์ํ์ง ์์๋ณด๋ฉด !!
https://expressjs.com/en/4x/api.html#req.cookies
Express 4.x - API Reference
Express 4.x API express() Creates an Express application. The express() function is a top-level function exported by the express module. var express = require('express') var app = express() Methods express.json([options]) This middleware is available in Ex
expressjs.com
cookie-parser๋ฅผ ์ค์นํด์ค๋ค

let cookieParser = require('cookie-parser');
app.use(cookieParser());
๊ทธ๋ฆฌ๊ณ js ํ์ผ์ ์ด๋ ๊ฒ cookie๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ๋ถ๋ถ์ ์ถ๊ฐํด์ค๋ค
app.get('/count', function(req, res){
let count = parseInt(req.cookies.count); //๋ฌธ์๋ฅผ ์ซ์๋ก
if(!req.cookies.count){ // cookie์ ๊ฐ์ด ์๋ค๋ฉด
count=0;
}
count = count+1;
res.cookie('count', count);
res.send('count : '+ count);
})
/count๋ก ์ ๊ทผํ์ ๋ count๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์ req.cookies.count ๋ฅผ ํตํด cookie์ count์ ์ ๊ทผํด์ ํ๋ฉด์ ์ถ๋ ฅํด์ค๋ค
req.cookie.count์ ๊ฐ์ด ์๋ค๋ฉด count ๊ฐ์๋ฅผ 0์ผ๋ก ์ค์ ํด์ค๋ค
๊ฐ์์์๋ var๋ฅผ ์ฌ์ฉํด์ ๋ณ์ ์ ์ธ์ ์์น๊ฐ ์๊ด์์์ง๋ง let์ ์ฌ์ฉํ๋ ค๋ฉด ๋ณ์ ์ ์ธ์ ๊ฐ์ฅ ์์์ ํด์ค์ผ ํ๋ค
๋ฐฉ๋ฌธ ํ์๊ฐ ์ฆ๊ฐํ ๋๋ง๋ค res.cookie๋ฅผ ์ฌ์ฉํด์ count๋ฅผ 1์ฉ ์ฆ๊ฐ์์ผ์ฃผ๊ณ , ํ๋ฉด์ ์ถ๋ ฅํด์ค๋ค
โโโ ๊ทธ ๊ฒฐ๊ณผ


let products = {
1:{title: 'The history of web 1'},
2:{title: 'The next web'}
};
app.get('/products', function(req, res){
let output='';
for(let name in products){
output += `
<li>
<a href="/cart/${name}">${products[name].title}</a>
</li>
`
}
res.send(`<h1>Products</h1><ul>${output}</ul><a href="/cart">Cart</a>`);
})
์ด ๋ถ๋ถ์ ๊ฐ์๊ฐ ์ ๊ฒจ์์ด์ ์ผ๋จ ์ฝ๋๋ง ๋ฐ๋ผ ์ผ๋ค
์ฌ๊ธฐ์ products ๊ฐ์ฒด๋ id ๊ฐ์ ํด๋นํ๋ title์ ๊ฐ์ด ๋ด๊ฒจ์๋ค
/product๋ฅผ get ๋ฐฉ์์ผ๋ก ๋ผ์ฐํธ ํด์ฃผ๊ณ ! ๋ฐ๋ณต๋ฌธ์ ๋๋ ค์ 1, 2์ title์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ณ , url์ผ๋ก ์ฐ๊ฒฐํด์ฃผ์๋ค
๋ง์ง๋ง์ผ๋ก cart ํ์ด์ง์๋ ์ฐ๊ฒฐํด์ฃผ์๋ค
์ด์ ๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ์ ๋์ ํ์ด์ง๋ฅผ ๋ผ์ฐํธ ํด์ค๋ค
app.get('/cart/:id', function(req, res){
let id = req.params.id;
let cart;
let cart = req.cookies.cart;
if(!req.cookies.cart){
cart = {}; // ๋น ๊ฐ์ฒด - ์ ๋ณด x -> ํ๋ฒ๋ง
}
if(!cart[id]){ //์๋ id์ ์ ๊ทผํ๋ฉด
cart[id] = 0; // cnt 0์ผ๋ก ์ค์
}
cart[id] = parseInt(cart[id])+1; // ํด๋น url์ count ๋ํ๊ธฐ
res.cookie('cart', cart); // ์ฌ์ฉ์์ ์ปดํจํฐ์ cart ๊ฐ์ฒด ์ฌ๊ธฐ
res.send(cart);
})
cookie cart๊ฐ ์๋ค๋ฉด cart์ ๊ทธ๋๋ก ๋์ , ์๋ค๋ฉด ์ต์ด๋ก ์คํ๋์๋ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ์์ฑ!
id๊ฐ ์๋ cart๋ผ๋ฉด 0์ผ๋ก ์ค์ ํด์ฃผ๊ณ , ํ์ฌ cart์์ 1์ ๋ํด์ค๋ค

์ด๊ฒ์ฒ๋ผ cart ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด id๊ฐ 1์ธ ์ฌ์ดํธ์ 2๋ฒ, id๊ฐ 2์ธ ์ฌ์ดํธ์ 4๋ฒ ๋ฐฉ๋ฌธํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค
res.redirect('/cart');
๊ทธ๋ฆฌ๊ณ cart ํ์ด์ง๋ก ๋ณด๋ด๊ธฐ
๋ค์์ผ๋ก๋ cart ํ์ด์ง ๋ผ์ฐํธ ํ๊ธฐ!
app.get('/cart', function(req, res){
let cart = req.cookies.cart;
let output='';
if(!cart){
res.send('Empty!');
}
else{
for(let id in cart){
output += `<li>${products[id].title} (${cart[id]})</li>`;
}
}
res.send(`
<h1>Cart</h1>
<ul>${output}</ul>
<a href="/products">Products List</a>`)
})
cart๊ฐ ๋น์ด์์ผ๋ฉด ๋น์ด์๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๊ณ ,
๊ทธ๋ ์ง ์๋ค๋ฉด ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด ๋ฌผํ์ ์ด๋ฆ๊ณผ ์นดํธ์ ์๋ฅผ output์ ๋ด์์ค๋ค
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก output์ ์ถ๋ ฅํด์ฃผ๊ณ products ํ์ด์ง๋ก ์ด๋ํ๋ ๋ฒํผ์ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค
โโโ ๊ทธ ๊ฒฐ๊ณผ
๋ง์ง๋ง์ผ๋ก ๋ณด์๊ณผ ๊ด๋ จ๋ ์ฟ ํค!!
โ cookie๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ https ๋ฐฉ์์ผ๋ก ํต์ ํ๋ ๊ฒ์ด ์ข๋ค (์ดํดํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ํต)
โ cookie ๊ฐ ์์ฒด๋ฅผ ์ํธํ: app.use(cookieParser('134123jrehfds**(^'));
์ด๋ฐ ์์ผ๋ก cookieParser๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ ์๋ฌด ๊ฐ์ ์ ๋ ฅํด์ฃผ๋ฉด ์ ๊ฒ key ๊ฐ์ด ๋๋ค
๊ทธ๋ฆฌ๊ณ /count์์ count๋ฅผ ํ๋ ๋ฐฉ๋ฒ ๋ํ ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค
app.use(cookieParser('134123jrehfds**(^'));
app.get('/count', function(req, res){
let count = parseInt(req.signedCookies.count); //๋ฌธ์๋ฅผ ์ซ์๋ก
if(!req.signedCookies.count){ // cookie์ ๊ฐ์ด ์๋ค๋ฉด
count=0;
}
count = count+1;
res.cookie('count', count, {signed: true});
res.send('count : '+ count);
})
req.cookies๋ฅผ ์ฐ๋ ๋ถ๋ถ์ req.signedCookies๋ก, cookie๋ฅผ ๋ง๋ค์ด ์ฃผ๋ ๋ถ๋ถ์ 3๋ฒ์งธ ์ธ์๋ก
{signed: true}๋ฅผ ์ถ๊ฐํด์ค๋ค

์ฒ์๊ณผ ๋ค๋ฅด๊ฒ Set-Cookie์์ count์ ๊ฐ์ด ์ซ์๊ฐ ์๋๊ณ ์ํธํ๋ ์ ๋ณด๋ก ๋ฐ๋๋ค!
์ค๋ ์ ์ฌ๊ธฐ๊น ์ง ! !!!

ํ์ใ ใ ์์ฆ ๊ตํํ์, ํดํ, ๋ผํผ์ ๋ฑ๋ฑ ๋๋ฉ ๋จธ๋ฆฌ๊ฐ ์ํ๋ค ํด
์ด๋ป๊ฒ ํด์ผ๋ ์ง ๋ ๊ณ ๋ฏผํด๋ด์ผ๊ฒ ๋ค
4์ผ์ ๋ผํผ์ ๊ฒฐ์ ๋๊ณ !
18์ผ์ ์๊ฐ์ ์ฒญํ๊ณ ๊ฒฐ์ ๋ ๋ฏ!!
์ค๋๋ถํฐ ์์นจ๋ง๋ค ์~๊ธ ํ ์ต ํ์ ๊ฐ์ผ๋๋๋ฐ ๊ณผ์ ๊ฐ ๋ ๋ง์ใ ใ ใ ใ ;ใ ;
๋ ํ๋ก์ ํธ๋ ํด์ผ๋๋๋ใ ใ ใ
'c o d i n g . . ๐ > Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Nodejs + DB ํ๊ธฐ (0) | 2022.06.19 |
---|---|
[์ํ์ฝ๋ฉ] NodeJs ํ์ฉํ๊ธฐ(2) (0) | 2021.08.09 |
[์ํ์ฝ๋ฉ] Node.js ๋ฅผ ์ด์ฉํด ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ(4) (0) | 2021.07.12 |
[์ํ์ฝ๋ฉ] Node.js ๋ฅผ ์ด์ฉํด ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ(3) (0) | 2021.07.12 |
[์ํ์ฝ๋ฉ] Node.js ๋ฅผ ์ด์ฉํด ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ(2) (0) | 2021.07.12 |