Study_Develop/ํฌ์Šค์ฝ” X ์ฝ”๋”ฉ์˜จ ๋ถ€ํŠธ์บ ํ”„

ํฌ์Šค์ฝ” X ์ฝ”๋”ฉ์˜จ 7๊ธฐ 6์ฃผ์ฐจ ch1. MVCํŒจํ„ด๊ณผ MYSQL์—ฐ๋™ํ•˜๊ธฐ, Cookie, Session

hiijihyun 2023. 6. 5. 23:15
๋ฐ˜์‘ํ˜•

ํฌ์Šค์ฝ” X ์ฝ”๋”ฉ์˜จ 7๊ธฐ 6์ฃผ์ฐจ์—๋Š”

 form๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ•œ ๋กœ๊ทธ์ธ, ๋ฐฉ๋ช…๋ก ๊ธฐ๋Šฅ์„

mvc๊ตฌ์กฐ๋กœ ๋‚˜๋ˆ„๊ณ , mysql์„ ์—ฐ๋™ ํ•œ ํ›„

๋ฐฉ๋ช…๋ก ๊ธฐ๋Šฅ, ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค

 

๋˜ํ•œ ์œ„์—์„œ ๊ตฌํ˜„ํ•œ ๋กœ๊ทธ์ธ, ๋ฐฉ๋ช…๋ก ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ ,

Sequelize๋กœ ์žฌ๊ตฌ์„ฑ ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค.

 

๋˜ ๋ฐ”๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•,

cookie, seesion์— ๋Œ€ํ•œ ์ง„๋„๋„ ๋‚˜๊ฐ”๋‹ค.

 

์ด๋ชจ๋“  ๊ฒƒ์ด ์ผ์ฃผ์ผ ๋งŒ์— ๋‚˜๊ฐ„ ์ง„๋„๋ผ

๋’ค๋”ฐ๋ผ ๊ฐ€๋А๋ผ ์• ์ข€ ๋จน์—ˆ๋‹ค.

 

๋‹จ๊ธฐ๊ฐ„์— ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์šด ํƒ“์ธ์ง€,

์•„๋‹ˆ๋ฉด ๋‚ด๊ฐ€ ์ˆ˜์—…์‹œ๊ฐ„์— ์ง‘์ค‘์„ ๋ชป ํ•œ ํƒ“์ธ์ง€

๋งŽ์ด ํ—ท๊ฐˆ๋ฆฐ๋‹ค,,

 

์ผ๋‹จ MVCํŒจํ„ด๊ณผ MYSQL์—ฐ๊ฒฐํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋จผ์ €

๋ฆฌ๋ทฐํ•ด๋ณด๊ณ ,

Ssequelize์— ๋Œ€ํ•ด์„œ๋„ ๋ฆฌ๋ทฐํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค!

 

 


์ˆ˜์—… ๋ฆฌ๋ทฐ์— ์•ž์„œ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฑฐ ! ์ฐพ์•„๋ณธ ๊ฑฐ ๊ธฐ๋ก 

 

โ“ legacy์™€ sequelize์˜ ์ฐจ์ด

 

  1. Legacy:
    • Legacy๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ORM(Object-Relational Mapping)์ด๋‚˜ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์กด์˜ ๋ฐฉ์‹์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•ด ์ง์ ‘ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ง์ ‘ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ SQL ๋ฌธ๋ฒ•์— ์ต์ˆ™ํ•ด์•ผ ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ง์ ‘ SQL์„ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ธ๋ฐ€ํ•œ ์ œ์–ด์™€ ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ SQL ๋ฌธ๋ฒ•์— ๋Œ€ํ•œ ์ดํ•ด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์ž‘์—…์— ๋Œ€ํ•œ ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  2. Sequelize:
    • Sequelize๋Š” JavaScript ๊ธฐ๋ฐ˜์˜ ORM(Object-Relational Mapping) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•ด JavaScript ๊ฐ์ฒด์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • SQL ์ฟผ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— SQL ๋ฌธ๋ฒ•์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ํฌ๊ฒŒ ์š”๊ตฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • Sequelize๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ๊ณผ ํ˜ธํ™˜๋˜๋Š” ORM์œผ๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„ ์ด์‹์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ๋ชจ๋ธ๊ณผ ๊ด€๊ณ„ ์„ค์ •, ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰, ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ๋“ฑ์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Sequelize๋Š” ORM ํŒจํ„ด์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค 
    •  
    • ์š”์•ฝํ•˜๋ฉด, Legacy๋Š” ๊ธฐ์กด์˜ SQL ์ฟผ๋ฆฌ ์ž‘์„ฑ ๋ฐ ์ง์ ‘์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํ˜ธ ์ž‘์šฉ์— ์˜์กดํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— Sequelize๋Š” ORM ํŒจํ„ด๊ณผ JavaScript ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋ฉฐ, SQL ์ฟผ๋ฆฌ ์ž‘์„ฑ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. Sequelize๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ถ”์ƒํ™”ํ•˜๊ณ , ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์‹œํ€„๋ผ์ด์ฆˆ๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด,

controller์— ๊ฒฝ๋กœ, sequelize์ฟผ๋ฆฌ๋ฌธ์„ ๊ธฐ์žฌํ•˜๊ณ ,

model์—๋Š” mysql์ •๋ณด๋ฅผ ๊ธฐ์žฌํ•œ๋‹ค

 

 

 


MVCํŒจํ„ด๊ณผ MYSQL์—ฐ๋™ํ•˜๊ธฐ

 

์ผ๋‹จ ๋‹ค์‹œ๊ธˆ ์ƒ๊ธฐ ์‹œ์ผœ๋ณด๋Š” 

MVCํ๋ฆ„ ..

 

ํŒŒ์ผ ๊ตฌ์กฐ๋Š” ์ด๋ ‡๋‹ค!

 

๊ตฌํ˜„ํ•ด ๋ณผ ๊ฒƒ!

 

npm install mysql

์„ ์ž…๋ ฅํ•˜์—ฌ mysql์„ ์„ค์น˜ํ•˜์—ฌ ์ค€๋‹ค.

 

model/visitor.js

- ์™ธ๋ถ€์—์„œ ์ตœ์ƒ์œ„ root๊ณ„์ •์œผ๋กœ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

- mysql์—์„œ root๊ณ„์ •์œผ๋กœ์˜ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” 

๋ณด์•ˆ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค. root๊ณ„์ •์€ mysql์—์„œ ๊ฐ€์žฅ ๋†’์€ ๊ถŒํ•œ์„ ๊ฐ€์ง€๋А ์‚ฌ์šฉ์ž ๊ณ„์ •์œผ๋กœ,

๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์ž‘์—…์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ๊ฐ–๋Š”๋‹ค.

 

๋”ฐ๋ผ์„œ root๊ณ„์ •์ด ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด,

ํ•ด์ปค๋‚˜ ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž์—๊ฒŒ ํฐ ์œ„ํ—˜์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

 

- ์ฆ‰, ์ƒˆ๋กœ์šด์‚ฌ์šฉ์ž (user ๊ณ„์ •) ๋ฅผ ๋งŒ๋“ค๊ณ  

๊ทธ ์‚ฌ์šฉ์ž๋กœ ์ ‘๊ทผ์„ ํ•ด์•ผํ•œ๋‹ค.

 

ํ„ฐ๋ฏธ๋„ ์ฐฝ์—์„œ mysql์‚ฌ์šฉ์ž ์ถ”๊ฐ€ํ•˜๊ณ , db์— ๊ถŒํ•œ ๋ถ€์—ฌํ•˜๊ธฐ

 

 

model/Visitor.js>

โ“์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”?

 

- ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ๋น„๋™๊ธฐ์  ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

- ์œ„์˜ ์ฝ”๋“œ์—์„œ exports.MgetVisitor1 ํ•จ์ˆ˜๋Š” mysql์ฟผ๋ฆฌ๋ฅผ์‹คํ–‰ํ•˜์—ฌ

๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์ด๋•Œ, ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ 

๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

- ์ด๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์„ ๋–„,

'rows'๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ์›ํ•˜๋Š” ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

-์ฝœ๋ฐฑํ•จ์ˆ˜ ๋Œ€์‹ , promises๋‚˜ async/await์™€ ๊ฐ™์€

๋น„๋™๊ธฐ ์ œ์–ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ๋„ ๋น„์Šทํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„์ˆ˜ ์žˆ๋‹ค.

 

 

controller/visitor.js>

 - res.render("visitor", {data: result});;๋ฐฉ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ 

visitorํŽ˜์ด์ง€์— ์ „๋‹ฌํ•˜๊ณ  ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.

 

 

 

router>

 


 

์„ธ์…˜(Session)๊ณผ ์ฟ ํ‚ค(Cookie)์˜ ์ฐจ์ด 

 

1. ์„ธ์…˜(Session)

- ์„ธ์…˜์€ ์„œ๋ฒ„ ์ธก์—์„œ ์‚ฌ์šฉ์ž ์ƒํƒœ๋ฅผ

์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹

 

- ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜๋ฉด

์„œ๋ฒ„๋Š” ๊ณ ์œ ํ•œ ์„ธ์…˜์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ

 

- ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ์„ธ์…˜ ์‹๋ณ„์ž๋ฅผ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅํ•˜๊ฑฐ๋‚˜

url์˜ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌ

 

- ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์„ธ์…˜ ์‹๋ณ„์ž๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ

์‚ฌ์šฉ์ž์˜ ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ

 

ex. ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์‹œ ์„ธ์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ์„ธ์…˜์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์—ฌ

์ธ์ฆ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š”๊ฒฝ์šฐ

 

2. ์ฟ ํ‚ค(Cookie)

- ์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์‚ฌ์šฉ์ž ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด

ํด๋ผ์ด์–ธํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹

 

- ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•˜์—ฌ 

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค์‹œ ์š”์ฒญํ•  ๋•Œ ๋งˆ๋‹ค ์ฟ ํ‚ค๋ฅผ ํ•จ๊ป˜ ์ „์†ก

 

- ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ ์ฟ ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ

์‚ฌ์šฉ์ž์˜ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๊ด€๋ฆฌ

 

ex. ์‡ผํ•‘ ์›น ์‚ฌ์ดํŠธ์—์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ์„ ์ถ”๊ฐ€ํ•˜๊ณ ,

ํด๋ผ์ด์–ธํŠธ์˜ ์ฟ ํ‚ค์— ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์•„์ดํ…œ์„ ์ €์žฅํ•˜์—ฌ

๋‹ค์Œ ๋ฐฉ๋ฌธ์‹œ์—๋„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ์ด ์œ ์ง€๋˜๋Š” ๊ฒฝ์šฐ

 

 

โ“์„ธ์…˜๊ณผ ์ฟ ํ‚ค์˜ ๋ณด์•ˆ๊ณผ ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ

 

์„ธ์…˜์€ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— 

์ผ๋ฐ˜์ ์œผ๋กœ ์ฟ ํ‚ค๋ณด๋‹ค ์•ˆ์ „ํ•˜๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜, ์„ธ์…˜์€ ์„œ๋ฒ„ ์ธก ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ

์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ˜๋ฉด, ์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฏ€๋กœ

์„œ๋ฒ„ ๋ถ€ํ•˜๋Š” ๊ฐ์†Œํ•˜์ง€๋งŒ, 

ํด๋ผ์ด์–ธํŠธ์—์„œ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋–„๋ฌธ์— ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ

์ €์žฅํ•˜๋Š” ๋ฐ๋Š” ์ œํ•œ์ด ์žˆ๋‹ค.

 

 

Cookie ์‚ฌ์šฉํ•˜๊ธฐ

๐Ÿ“Œcookie์‚ฌ์šฉ์‹œ ํ•„์š”ํ•œ ์„ค์น˜ , ๋ฉ”์†Œ๋“œ ๋“ฑ

npm install cookie-parser //์ฟ ํ‚ค ์„ค์น˜ํ•˜๊ธฐ

const cookieParser = require("cookie-parser");
app.use(cookieParser()); 
// cookie-parser ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„

res.cookie('์ฟ ํ‚ค์ด๋ฆ„', '์ฟ ํ‚ค๊ฐ’', '์˜ต์…˜๊ฐ์ฒด');
//expressํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ, ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉ

 

๐Ÿ“ŒCookie ์˜ˆ์ œ

 

cookies.js ์ฃผ์š”์ฝ”๋“œ!

 

app.use(cookieParser());

app.get("/", (req, res) => {
  res.render("index", { data: req.cookies.popup });
});

app.post("/setCookie", (req, res) => {
  res.cookie("popup", "hide", {
    maxAge: 60 * 1000,
  });
  res.send({ result: true });
});

 

 

popup ์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ hide๊ฐ’์„ ๊ฐ€์ง€๋Š” ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•œ๋‹ค.

์ด๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ €์— ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•˜์—ฌ ์ €์žฅ

/setCoolie๊ฒฝ๋กœ๋กœ post์š”์ฒญ์ด ๋“ค์–ด์˜จ ๊ฒฝ์šฐ

'popup'์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•œ ํ›„,
{result: true}๋ผ๋Š” json์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

index.ejs ์ฃผ์š” ์ฝ”๋“œ!

const myModal = new bootstrap.Modal("#exampleModal");
    if ("<%= data %>" === "") {
        myModal.show();
    }
    function closeModal() {
        axios({
            method: "POST",
            url: "/setCookie",
        }).then((res) => {
            console.log(res.data);
        });
        myModal.hide();
    }

 

 

axios๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ post๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ /setCookie๋กœ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค

์ด๋Š” ์„œ๋ฒ„ ์ถ•์—์„œ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์š”์ฒญ์ด๋‹ค

 

axios์˜ then() ๋ฉ”์„œ๋“œ๋Š” ์„œ๋ฒ„์—์„œ ์‘๋‹ต์ด ๋„์ฐฉํ•œ ํ›„์— 

์‹คํ–‰๋  ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค.

 

res๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์„œ๋ฒ„์˜ ์‘๋‹ต์„ ๋‚˜ํƒ€๋‚ธ๋‹ค

 

์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ›์œผ๋ฉด, ์ฝ˜์†”์— ์ถœ๋ ฅํ•œ ํ›„์— ๋ชจ๋‹ฌ์ฐฝ์„ ์ˆจ๊ธฐ๋Š” ์—ญํ• 

 

 


Session ์‚ฌ์šฉํ•˜๊ธฐ

 

 

-  ์›น ์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š” ์ฟ ํ‚ค

 

- ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ ‘์†ํ•œ ์‹œ์ ๋ถ€ํ„ฐ

์—ฐ๊ฒฐ์„ ๋๋‚ด๋Š” ์‹œ์ ๊นŒ์ง€์˜ ์‹œ๊ฐ„ ๋™์•ˆ ์ผ๋ จ์˜ ์š”๊ตฌ๋ฅผ ํ•˜๋‚˜์˜ ์ƒํƒœ๋กœ ๋ณด๊ณ  

๊ทธ ์ƒํƒœ๋ฅผ ์œ ์ง€์‹œํ‚จ๋‹ค.

ex) ๋กœ๊ทธ์ธ ์œ ์ง€

 

npm install express-session //session ์‚ฌ์šฉ ์ „ ์„ค์น˜ ๋ชจ๋“ˆ

const session = require('express-session');
app.use(seesion('์˜ต์…˜๊ฐ์ฒด'));
// session ๋ฏธ๋“ค์›จ์–ด

req.session.id = req.body.id;
//req.session.key = value

 

 

 

๐Ÿ“Œ Session ์˜ˆ์ œ

 

session.js ์ฃผ์š” ์ฝ”๋“œ!

const userInfo = { id: "abc", pw: "123" };

app.use(
  session({
    secret: "mysecretKey",
    resave: false,
    saveUninitialized: true,
  })
);

if (user === undefined) {
    res.render("app", { isLogin: false });
  } else {
    res.render("app", { isLogin: true, user: user });
  }
  
  app.post("/login", (req, res) => {
  console.log(req.body);
  if (req.body.id === userInfo.id && req.body.pw === userInfo.pw) {
    req.session.user = req.body.id;
    res.redirect("/");
  } else {
    res.send({ result: false });
  }
});

 

 

์„ธ์…˜์„ค์ •


express-session์€ express์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ธ์…˜๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ฏธ๋“ค์›จ์–ด๋กœ ์‚ฌ์šฉ


secret: ์„ธ์…˜์„ ์•”ํ˜ธํ™” ํ•˜๊ธฐ ์œ„ํ•œ ๋น„๋ฐ€ํ‚ค, ์ด ๋น„๋ฐ€ํ‚ค๋Š” ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ ,๋ณตํ˜ธํ™” ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ


resave: ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†๋”๋ผ๋„ ์„ธ์…˜์„ ๋‹ค์‹œ ์ €์žฅํ•  ์ง€ ์—ฌ๋ถ€๋ฅผ ์„ค์ •,

์ผ๋ฐ˜์ ์œผ๋กœ false๋กœ ์„ค์ •ํ•˜์—ฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†์„ ๊ฒฝ์šฐ, ์„ธ์…˜์„ ๋‹ค์‹œ ์ €์žฅํ•˜์ง€ ์•Š๋„๋ก ํ•จ


saveUninitialized : ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ์„ธ์…˜๋„ ์ €์žฅํ• ์ง€ ์—ฌ๋ถ€ ์„ค์ •,

์ผ๋ฐ˜์ ์œผ๋กœtrue๋กœ ์„ค์ •ํ•˜์—ฌ ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ์„ธ์…˜์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ

 

 

res.redirect("/")๋ฅผ ์“ฐ๋Š” ์ด์œ ?

 

render๋Š” ํ…œํ”Œ๋ฆฟ์„ ๋ถˆ๋Ÿฌ์˜ค๊ณ , redirect๋Š” url๋กœ ์ด๋™์„ ํ•œ๋‹ค.


    url๋กœ ์ด๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ url์— ๋งž๋Š” views๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋˜๊ณ ,

์—ฌ๊ธฐ์„œ render๋ฅผ ํ• ์ง€ ๋‹ค์‹œ redirectํ• ์ง€ ๊ฒฐ์ •

 

 


ํ•˜์ด๋ผ์ดํŠธ์ธ ์‹œํ€„๋ผ์ด์ฆˆ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€

๋‹ค์Œ ๊ธ€์—์„œ ์ž‘์„ฑํ•˜๋„๋ก ,,