2021-04-03(Sat)

ํ•ญ๋ชฉ

๋‚ด์šฉ

ํ•™์Šต ๋‚ ์งœ

2021-04-03(ํ† )

ํ•™์Šต ์‹œ๊ฐ„

11:00~23:00

ํ•™์Šต ๋ฒ”์œ„ ๋ฐ ์ฃผ์ œ

node.js, express.js

ํ•™์Šต ๋ชฉํ‘œ

qr-checkin ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•™์Šตํ•œ๋‹ค.

๋™๋ฃŒ ํ•™์Šต ๋ฐฉ๋ฒ•

-

์ƒ์„ธ ํ•™์Šต ๋‚ด์šฉ

SOP(Same Origin Policy)๋ž€?

ํ•œ origin์œผ๋กœ๋ถ€ํ„ฐ ๋กœ๋“œ๋œ document ๋˜๋Š” script๊ฐ€ ๋‹ค๋ฅธ origin์˜ ๋ฆฌ์†Œ์Šค์™€ ์ƒํ˜ธ์ž‘์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œํ•œํ•˜๋Š” ์ค‘์š”ํ•œ ๋ณด์•ˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ document๋ฅผ ๋ฐ›์„ ๋•Œ๋Š” ๊ทธ document์˜ ์ถœ์ฒ˜๋ฅผ origin์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•ด๋‘”๋‹ค.

  • ๊ทธ๋Ÿฐ๋ฐ ์ด ๋•Œ document ๋‚ด์—์„œ ์™ธ๋ถ€๋ฆฌ์†Œ์Šค๋“ค๊ณผ ์ƒํ˜ธ์ž‘์šฉ ํ•  ๋•Œ ์ตœ์ดˆ ํŒŒ์•…ํ•œ origin๊ณผ ๋‹ค๋ฅด๋‹ค๋ฉด, ๋ณ„๋„์˜ ์ œํ•œ์„ ๋‘๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ์ด origin์„ ํŒŒ์•…ํ•  ๋•Œ๋Š” scheme, Host, Port๋งŒ ๋ณด๊ณ ์„œ ํŒ๋‹จํ•˜๊ฒŒ ๋œ๋‹ค. https://www.example.com:443/path/page.html ์ด origin์ด๋ผ๊ณ  ์น˜๋ฉด, scheme(https)๊ณผ Host(www.example.com)์™€ port(443)์ด ๋™์ผํ•œ URL์„ same origin์œผ๋กœ ํŒ๋ณ„ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ port๋Š” ์ƒ๋žต๋˜์–ด์žˆ์„ ๋•Œ scheme์— ํ• ๋‹น๋˜๋Š” ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํŒ๋ณ„ํ•˜๊ฒŒ ๋œ๋‹ค.

์™œ SOP๊ฐ€ ์ค‘์š”ํ• ๊นŒ?

ํ•ด์ปค๊ฐ€ ์•…์˜์ ์ธ ์ฝ”๋“œ๋ฅผ ๋„ฃ์€ ์‚ฌ์ดํŠธ๋ฅผ ์œ ์ €๊ฐ€ ์—ด์–ด๋ฒ„๋ฆฐ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

  1. ๋งŒ์•ฝ ์œ ์ €๊ฐ€ gmail ๋“ฑ์— ์ ‘์†ํ•ด๋‘” ์ƒํƒœ๋ผ๋ฉด ์ฟ ํ‚ค๊ฐ€ ์‚ด์•„์žˆ์„ ๊ฒƒ์ด๊ณ , ํ•ด์ปค๋Š” '์•…์˜์ ์ธ ์ฝ”๋“œ'๋ฅผ ํ†ตํ•ด ์ด ์ฟ ํ‚ค๋ฅผ ์ž๋™์œผ๋กœ ์ฒจ๋ถ€ํ•˜์—ฌ ๊ตฌ๊ธ€ ๋ฉ”์ผ ์„œ๋ฒ„์— ์œ ์ €์˜ ๋ฉ”์ผ ์ •๋ณด๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. ๊ตฌ๊ธ€ ๋ฉ”์ผ ์„œ๋ฒ„๋Š” ์ฟ ํ‚ค๋งŒ ํ™•์ธํ•˜๊ณ  ๋ฉ”์ผ ์ •๋ณด๋ฅผ ์‘๋‹ตํ•œ๋‹ค.

  3. ์ด์ œ SOP ์œ ๋ฌด์— ๋”ฐ๋ผ ํ•ด์ปค์—๊ฒŒ ๋ฉ”์ผ์ •๋ณด๊ฐ€ ๋„˜์–ด๊ฐ€๋Š”์ง€ ์œ ๋ฌด๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

    • SOP๊ฐ€ ์—†๋‹ค๋ฉด? ๋ฉ”์ผ ์ •๋ณด๊ฐ€ ๊ทธ๋Œ€๋กœ ํ•ด์ปค์—๊ฒŒ ๋„˜์–ด๊ฐ„๋‹ค.

    • SOP๊ฐ€ ์žˆ๋‹ค๋ฉด? origin์ด gmail์ด ์•„๋‹ˆ๋ผ ํ•ด์ปค์˜ ์‚ฌ์ดํŠธ์ด๋ฏ€๋กœ CORS ์ •์ฑ…์— ์˜ํ•ด ๋ฉ”์ผ ์ •๋ณด read๊ฐ€ ๋ถˆ๊ฐ€ํ•˜๋‹ค. ํ•ด์ปค๋Š” ์ •๋ณด๋ฅผ ์ฝ์„ ์ˆ˜ ์—†๋‹ค!

Cross-origin Network Access๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

Cross-origin๊ฐ„์˜ ํ†ต์‹ ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š”?

  • JSONP

    • NO!

    • ๋ชจ๋“  origin ๋Œ€์ƒ์œผ๋กœ SOP๋ฅผ ๋ฌด๋ ฅํ™”

  • CORS

    • YES!

    • ํ—ˆ์šฉํ•  origin๋งŒ์„ Access-Control-Allow-Origin์— ๋ช…์‹œ์ ์œผ๋กœ ์ถ”๊ฐ€

express ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ์˜ ๋ฏธ๋“ค์›จ์–ด

๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋Š” ์š”์ฒญ ์˜ค๋ธŒ์ ํŠธ(req), ์‘๋‹ต ์˜ค๋ธŒ์ ํŠธ(res), ๊ทธ๋ฆฌ๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”์ฒญ-์‘๋‹ต ์ฃผ๊ธฐ ์ค‘ ๊ทธ ๋‹ค์Œ์˜ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๊ฐ–๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๊ทธ ๋‹ค์Œ์˜ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ next๋ผ๋Š”์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋กœ ํ‘œ์‹œ๋œ๋‹ค.

  • ๋ฏธ๋“ค์›จ์–ด(Middleware)๋ž€ ์š”์ฒญ๊ณผ ์‘๋‹ต ์ค‘๊ฐ„์— ๊ฑฐ์ณ๊ฐ€๋Š” ํ•จ์ˆ˜๋กœ, ์–ด๋– ํ•œ ๋™์ž‘์„ ํ•˜๊ฑฐ๋‚˜, ์˜ค๋ฅ˜๋ฅผ ๊ฑธ๋Ÿฌ๋‚ด๊ธฐ๋„ ํ•œ๋‹ค. Express์—์„œ๋Š” ์‚ฌ์‹ค์ƒ ๋ชจ๋“  ๊ฒƒ์ด ๋ฏธ๋“ค์›จ์–ด์ด๋‹ค.

  • ํ˜„์žฌ์˜ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๊ฐ€ ์š”์ฒญ-์‘๋‹ต ์ฃผ๊ธฐ๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” next() ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ทธ ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜์— ์ œ์–ด๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ์š”์ฒญ์€ ์ •์ง€๋œ ์ฑ„๋กœ ๋ฐฉ์น˜๋œ๋‹ค.

  • app.use() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ธ์ž๋กœ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋ฅผ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

  • ๋ฏธ๋“ค์›จ์–ด์˜ ๊ฒฝ์šฐ, ๋™๊ธฐ์ ์œผ๋กœ ์ž‘์„ฑ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ, ์ˆœ์„œ๋ฅผ ์ฃผ์˜ํ•ด์„œ ์ž‘์„ฑํ•ด ์ฃผ์–ด์•ผํ•œ๋‹ค.

์ฃผ์š” ๋ฏธ๋“ค์›จ์–ด

  • body parser

  • express-session

์ฐธ๊ณ 

JWT vs Session ๋กœ๊ทธ์ธ ์ƒํƒœ๊ด€๋ฆฌ

https://stackoverflow.com/questions/43452896/authentication-jwt-usage-vs-session

https://namunotebook.tistory.com/14

ํ•™์Šต ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ์ดํ‰

์Œฉ๋šฑ๋งž๊ฒŒ node & express ํ•™์Šต์„ ์‹œ์ž‘ํ–ˆ๋‹ค. spring๋„ ๋„˜ ์žฌ๋ฐŒ๊ฒŒ ํ•˜๊ณ  ์žˆ์—ˆ๊ธดํ•œ๋ฐ, QRcheckin์— ์ด๋ฒคํŠธ ํ…Œ์ด๋ธ”์„ ๋ถ™์—ฌ๋ณด๊ณ  ์‹ถ์–ด์ ธ์„œ..ใ…Žใ…Ž;

๋‹ค๋ฅธ ๊ฒƒ๋ณด๋‹ค ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋Š” ๊ฐˆ์ฆ์ด ๋„ˆ๋ฌด ์ปค์ง„ ์ƒํƒœ์ด๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์ด ์“ฐ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ๋‹ค. cub3d tester๋„ ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์ด ์จ์ฃผ๋‹ˆ๊นŒ ์ฆ๊ฒ๋”๋ผ. ๋งˆ์นจ ๊ด€์‹ฌ์žˆ์—ˆ๋˜ ๊ฒƒ๋“ค์ด ๋ชจ์—ฌ์žˆ๋‹ค.

  • node

  • QR์ฝ”๋“œ

  • ์ƒ์šฉ ์„œ๋น„์Šค์— ํ…Œ์ด๋ธ” ๋ถ™์ด๊ธฐ

์‚ฌ์‹ค ๋‚˜๋ฅผ ์ œํ•œํ•˜๋Š”๊ฑด ๋‚˜ ๋ฐ–์— ์—†๋‹ค. ๋†€ ์‹œ๊ฐ„์— node & express ๊ณต๋ถ€ํ•ด๋ณด์ž, ๊ทธ๋ƒฅ ์ž ์„ ๋œ ์ž๋ฉด ๋˜์ง€ ๋ญใ…Žใ…Ž :)

flow๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ•  ๊ฒƒ์ด๋‹ค.

  1. node ๊ธฐ์ดˆ ํ•™์Šต (์™„๋ฃŒ)

  2. QR ์ฝ”๋“œ ๋ฆฌ๋”๊ธฐ ๋œฏ์–ด๋ณด๊ธฐ (์ง„ํ–‰ ์ค‘)

  3. ํ…Œ์ด๋ธ” ๋ถ™์ด๊ธฐ

  4. ๋ถ™์ธ ํ…Œ์ด๋ธ”์— ์ด๋ฒคํŠธ ์ž…๋ ฅํ•˜๋Š” ์–ด๋“œ๋ฏผ ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ

๋‹ค์Œ ํ•™์Šต ๊ณ„ํš

  • QR ์ฝ”๋“œ ๋ฆฌ๋”๊ธฐ์— ํ…Œ์ด๋ธ” ๋ถ™์ด๊ธฐ

Last updated