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๊ฐ ์ค์ํ ๊น?
ํด์ปค๊ฐ ์ ์์ ์ธ ์ฝ๋๋ฅผ ๋ฃ์ ์ฌ์ดํธ๋ฅผ ์ ์ ๊ฐ ์ด์ด๋ฒ๋ฆฐ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด๋ณด์.
๋ง์ฝ ์ ์ ๊ฐ gmail ๋ฑ์ ์ ์ํด๋ ์ํ๋ผ๋ฉด ์ฟ ํค๊ฐ ์ด์์์ ๊ฒ์ด๊ณ , ํด์ปค๋ '์ ์์ ์ธ ์ฝ๋'๋ฅผ ํตํด ์ด ์ฟ ํค๋ฅผ ์๋์ผ๋ก ์ฒจ๋ถํ์ฌ ๊ตฌ๊ธ ๋ฉ์ผ ์๋ฒ์ ์ ์ ์ ๋ฉ์ผ ์ ๋ณด๋ฅผ ์์ฒญํ ์ ์๋ค.
๊ตฌ๊ธ ๋ฉ์ผ ์๋ฒ๋ ์ฟ ํค๋ง ํ์ธํ๊ณ ๋ฉ์ผ ์ ๋ณด๋ฅผ ์๋ตํ๋ค.
์ด์ 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๋ ์๋์ ๊ฐ์ด ํ ๊ฒ์ด๋ค.
node ๊ธฐ์ด ํ์ต (์๋ฃ)
QR ์ฝ๋ ๋ฆฌ๋๊ธฐ ๋ฏ์ด๋ณด๊ธฐ (์งํ ์ค)
ํ ์ด๋ธ ๋ถ์ด๊ธฐ
๋ถ์ธ ํ ์ด๋ธ์ ์ด๋ฒคํธ ์ ๋ ฅํ๋ ์ด๋๋ฏผ ํ์ด์ง ๊ฐ๋ฐ
๋ค์ ํ์ต ๊ณํ
QR ์ฝ๋ ๋ฆฌ๋๊ธฐ์ ํ ์ด๋ธ ๋ถ์ด๊ธฐ
Last updated