###๐ Node.js Event Emitter
๋ธ๋ผ์ฐ์ ์์ JavaScript๋ก ์์
ํ ๊ฒฝ์ฐ ๋ง์ฐ์ค ํด๋ฆญ, ํค๋ณด๋ ๋ฒํผ ๋๋ฅด๊ธฐ, ๋ง์ฐ์ค ์์ง์์ ๋ํ ๋ฐ์ ๋ฑ๊ณผ ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ํตํด ์ฌ์ฉ์ ์ํธ ์์ฉ์ด ์ผ๋ง๋ ์ฒ๋ฆฌ๋๋์ง ์ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ฒ ์ฒ๋ผ ๋ฐฑ์๋ ์ธก์์ Node.js๋ event-driven ์์คํ
์ ์ด์ฉํด์ ์๋ ๋ฉ๋๋ค.
์ด ํจํด์๋ ํน์ Subject๋ฅผ ๊ด์ฐฐํ๋ ๋ง์ Observer๊ฐ ์์ต๋๋ค.
๊ด์ฐฐ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ด์ฌ์ด ์๊ณ ํด๋น ์ฃผ์ ๋ด๋ถ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๋ ์๋ฆผ์ ๋ฐ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
๊ทธ๋์ ๊ทธ๋ค์ ๊ทธ ์ฃผ์ ์ ์ค์ค๋ก๋ฅผ ๋ฑ๋ก(Register)ํฉ๋๋ค.
์ฃผ์ ์ ๋ํ ๊ด์ฌ์ ์์ผ๋ฉด ๋จ์ํ ํด๋น ์ฃผ์ ์์ ๋ฑ๋ก์ ์ทจ์ํฉ๋๋ค. ๋๋๋ก ์ด ๋ชจ๋ธ์ ๊ฒ์์-๊ตฌ๋
์(Publisher-Subscriber) ๋ชจ๋ธ์ด๋ผ๊ณ ๋ ํฉ๋๋ค.
Express๋ ์น ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ์ถ์ ์ํ ๊ด๋ฒ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋
ธ๋ js ์น ์ ํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ์
๋๋ค. ๋จ์ผ ํ์ด์ง, ๋ค์ค ํ์ด์ง ๋ฐ ํ์ด๋ธ๋ฆฌ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฒ์ ๊ฒฝ๋ก๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ด ๋๋ Node js ์๋จ์ ๊ตฌ์ถ๋ ๋ ์ด์ด์
๋๋ค.
=> Node.js์ API๋ฅผ ๋จ์ํํ๊ณ ์ ์ฉํ ๊ธฐ๋ฅ๋ค์ ๋ ์ถ๊ฐ ์์ผ Node.js๋ฅผ ๋ ํธ๋ฆฌํ๊ณ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ํ๋ ์์ํฌ
'HTTP request'๋ก์จ 'req'๋ก ํํ๋๋ ๊ฐ์ฒด์ด๋ค. request 'query string', 'parameters, 'body', 'HTTP header' ๋ฑ์ ํ๋กํผํฐ๋ฅผ ๊ฐ๋๋ค. 'req'๊ฐ์ฒด๋ 'Node'์ request ๊ฐ์ฒด๋ณด๋ค ํฅ์๋ ๋ฒ์ ์ด๋ค.
๊ฒฝ๋ก ๋งค๊ฐ๋ณ์๋ URL์ ํด๋น ์์น์ ์ง์ ๋ ๊ฐ์ ์บก์ฒํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ช ๋ช ๋ URL ์ธ๊ทธ๋จผํธ์ ๋๋ค. ์บก์ฒ๋ ๊ฐ์ ๊ฒฝ๋ก์ ์ง์ ๋ ๊ฒฝ๋ก ๋งค๊ฐ๋ณ์์ ์ด๋ฆ์ ํด๋น ํค๋ก ์ฌ์ฉํ์ฌ req.params ๊ฐ์ฒด์ ์ฑ์์ง๋๋ค.
res.send์ res.json๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ธฐ๋ฅ์์ผ๋ก ๊ฑฐ์ ๋์ผํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด res.send()๋ฅผ ์ด์ฉํด์ object๋ฅผ ๋ณด๋ด๋ ๋๋ ๊ฑด์ง ์๋์์ ๋ด๋ณด๊ฒ ์ต๋๋ค.
res.send์ res.json ์ฌ์ด์๋ ์ค์ ์ฐจ์ด ์ธ๋ถ์์ ๋ณด๊ธฐ์๋ ์ฐจ์ด๊ฐ ์์ง๋ง ๋ด๋ถ์์ ํธ์ถ ํ ๋ฒ์ด ๋ ์ผ์ด๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ํ object๋ฅผ ๋ณด๋ผ ๋ res.json()์ ์ด์ฉํ๋ ๊ฒ ๋ ์ง๊ด์ ์ด๊ธฐ๋ ํ๊ธฐ ๋๋ฌธ์ res.json()์ ์ด์ฉํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
reponse ๊ฐ ์๊ณ ์ผ๋จ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ฑฐ๋ ํธ์ถ์์๊ฒ ์ ๊ณตํ๊ณ ์ถ์ ๋ค๋ฅธ ์์ ์ ์ํํ๋ฉด ๋ง์ง๋ง ๋จ๊ณ๋ก ์ธ์ ์ ์ข ๋ฃํด์ผ ํฉ๋๋ค. ์ด๋ res.end()๋ฅผ ํธ์ถํ์ฌ ์ํํ ์ ์์ต๋๋ค.
'request body'์ 'key-value'์ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธด ๊ฐ์ฒด ํ๋กํผํฐ์ด๋ค. JSON ๊ฐ์ฒด์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
==> ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ์ง ์๊ณ ์๋ต์ ์ข ๋ฃํ๋ ค๋ฉด res.end()๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๊ฒ์ 404 ํ์ด์ง์ ์ ์ฉํ ์ ์์ต๋๋ค.
res.status(404).end();
Express๋ ์์ฒด ๊ธฐ๋ฅ์ด ์ต์ํ๋ ๋ผ์ฐํ ๋ฐ ๋ฏธ๋ค์จ์ด ์น ํ๋ ์์ํฌ์ ๋๋ค. Express ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณธ์ง์ ์ผ๋ก ์ผ๋ จ์ ๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ ํธ์ถ์ ๋๋ค.
๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ-์๋ต ์ฃผ๊ธฐ์์ ์์ฒญ ๊ฐ์ฒด(req), ์๋ต ๊ฐ์ฒด(res), next ๋ฏธ๋ค์จ์ด ํจ์์ ์ ๊ทผํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค. next ๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ์ ์ผ๋ฐ์ ์ผ๋ก next๋ผ๋ ๋ณ์๋ก ํ์๋ฉ๋๋ค.
MVC(๋ชจ๋ธ-๋ทฐ-์ปจํธ๋กค๋ฌ)๋ ๊ด๋ จ ํ๋ก๊ทธ๋จ ๋ก์ง์ ์ํธ ์ฐ๊ฒฐ๋ 3๊ฐ์ ์์๋ก ๋๋๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ์ํคํ
์ฒ ํจํด์
๋๋ค. - ์ํค ํผ๋์
MVC (๋ชจ๋ธ-๋ทฐ-์ปจํธ๋กค๋ฌ) ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค, ๋ฐ์ดํฐ ๋ฐ ๋
ผ๋ฆฌ ์ ์ด๋ฅผ ๊ตฌํํ๋๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ๋์์ธ ํจํด์
๋๋ค. ์ํํธ์จ์ด์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํ๋ฉด์ ๊ตฌ๋ถํ๋๋ฐ ์ค์ ์ ๋๊ณ ์์ต๋๋ค. - MDN
-Model: ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ด๋ฆฌํฉ๋๋ค.
-View: ๋ ์ด์์๊ณผ ํ๋ฉด์ ์ฒ๋ฆฌํฉ๋๋ค.
-Controller: ๋ช
๋ น์ ๋ชจ๋ธ๊ณผ ๋ทฐ ๋ถ๋ถ์ผ๋ก ๋ผ์ฐํ
ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ์ ์์ฒญ ๊ฒฝ๋ก(path)์ ๋ฐ๋ผ ์ด ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ณณ์ผ๋ก ๊ธฐ๋ฅ์ ์ ๋ฌํด์ฃผ๋ ๊ฒ์ด ๋ผ์ฐํฐ ์ ๋๋ค.