Node.js๋ ๋ฌด์์ธ๊ฐ? :์๋ฒ์ฌ์ด๋์ ๊ดํ์ฌ
Node.js๋ ์๋ฒ ์ฌ์ด๋์์ JavaScript๋ฅผ ์คํํ ์ ์๋ ์คํ ์์ค ๋ฐํ์ ํ๊ฒฝ์ด๋ค.
๊ธฐ์กด์๋ JavaScript๊ฐ ์ฃผ๋ก ํด๋ผ์ด์ธํธ ์ธก์์ ์ฌ์ฉ๋์์ง๋ง, Node.js๋ฅผ ํตํด ์ด์ ๋ ์๋ฒ ์ธก์์๋ ์ฌ์ฉํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค.
Node.js์ ๋ํด ์ธ๊ธํ๊ธฐ ์์, ์๋ฒ ์ฌ์ด๋์ ๋ํด์ ๋จผ์ ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
์น ์ดํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ฑ ์์๋ ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ ์ฌ์ด๋์ ์๋ฒ ์ฌ์ด๋ ๊ฐ์ ์ํธ์์ฉ์ผ๋ก ๊ตฌ์ฑ์ด ๋๋๋ฐ,
์๋ฒ ์ฌ์ด๋๋ ์น ์๋ฒ์์ ์คํ๋๋ ์ฝ๋๋ ์ฒ๋ฆฌ ๋ก์ง์ ๊ฐ๋ฆฌํจ๋ค. ์ฆ, ์๋ฒ ์ธก์์ ์คํ๋๋ ๋ถ๋ถ์ ๋งํ๋ค.
์๋ฒ ์ฌ์ด๋์์ ์คํ๋๋ ์ฝ๋๋ ์ฃผ๋ก DB์์ ์ํธ์์ฉ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋ก์ง ์คํ, ํ์ผ ์์คํ
์ ๊ทผ ๋ฑ๊ณผ ๊ฐ์ ์๋ฒ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ค.
์์ปจ๋, ์น์์ ์ฌ์ฉ์ ์์ฒญ(request)์ ๋ฐ์๋ค์ด๊ณ ์ฒ๋ฆฌ ํ ๊ฒฐ๊ณผ(response)๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๊ธฐ ์ํด์๋
์๋ฒ ์ฌ์ด๋์์ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ด๋ค.
ํด๋ผ์ด์ธํธ ์ฌ์ด๋๋ ์ฃผ๋ก HTML, CSS, JavaScript ๊ฐ์ ํ๋ก ํธ์๋ ์ธ์ด๋ฅผ ์ฌ์ฉํด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ณ ,
์๋ฒ ์ฌ์ด๋๋ ์๋ฒ ์ฌ์ด๋ ์ธ์ด๋ ๋ฐํ์ ํ๊ฒฝ์ ์ฌ์ฉํด ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋ก์ง ์คํ, DB์ฐ๋ ๋ฑ ์๋ฒ ์์
์ ์ํํ๋ค.
์์ ๋งํ ๊ฒ์ฒ๋ผ ์น ์ดํ๋ฆฌ์ผ์ด์
์์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋์ ์๋ฒ ์ฌ์ด๋๋ ์ญํ ์ ๋๋์ด ์ฒ๋ฆฌํ๊ณ ์ํธ์์ฉ์ ํตํด ์์ ํ ์น์ ๊ตฌ์ถํ๋ค.
๊ธฐ์กด ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ ์ฃผ๋ก ์น ๋ธ๋ผ์ฐ์ ์์ ํด๋ผ์ด์ธํธ ์ธก ์คํฌ๋ฆฝํธ๋ก ์ฌ์ฉ๋์ด์ ธ ์๋ค.
Netscape Live Wire๋ 1996๋
๋์ ์ถ์๋ ์๋ฒ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ด๊ธฐ ํํ์๊ณ , ์น ์๋ฒ ํ์ฅ ๊ธฐ์ ์ด์๋ค.
๋น๋ก ์์ฉํ๋ ๋์ง ์์ ์ง์์ ์ธ ๊ฐ๋ฐ์ด ๋์ง๋ ์์์ง๋ง ์๋ฒ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ด๊ธฐ ํํ๋ผ๋ ์ ์ด ์ฃผ๋ชฉํ ๋งํ๋ค.
์ดํ v8 ์์ง์ด ๋ฑ์ฅํ๋ฉด์ Ryan Dahl์ด๋ผ๋ ์ฌ๋์ด ์ด ์์ง์ ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ฒ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ
์ฆ, Node.js๋ฅผ ๊ฐ๋ฐํ๋ค.
์ฌ๋ด์ด์ง๋ง ๋น์ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ ๋ณด์์ ์ด ๋ง์๊ณ ์ฃผ๋ฅ ์ธ์ด๋ ์๋์๊ณ v8์์ง์ด ์์ฉํ๋ ๊ฑด ๋ ์ดํ์๋ค๋๋ฐ
Ryan Dahl ๋น์ ์ ๋๋์ฒดโฆ
Node.js์ ์ญ์ฌ
2008๋
์ v8 ์์ง์ด ์ธ์์ ๋ฐํ๋ ๋์ด๋ค.
์ด๋ฌํด 2009๋
Ryan Dahl์ v8์์ง๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ์ฌ์ฉํด Node.js๋ฅผ ๊ฐ๋ฐํ๋ค.
2010๋
Node.js ์ํ๊ณ๋ npm์ด ๋ฑ์ฅํ๊ณ , ์ดํ ์์๋ค์ด ํ๋ ์์ํฌ๋ค์ด ๊ฐ๋ฐ๋๋ค.
์ฐจ์ฐจ ๊ณต๋ถํ๊ณ ๋ ์ ๋ฆฌํ๊ฒ ์ง๋ง, npm์ Node์ ํจํค์ง ๊ด๋ฆฌ์๋ก ๊ฐ๋ฐ์๋ค์ด ๋ชจ๋๊ณผ ํจํค์ง๋ฅผ ๊ณต์ ํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ๋๋ ์ญํ ์ ํ๋ค.
๋ํ, ์๋ฒ ์ฌ์ด๋ ํ๋ ์์ํฌ๋ Express.js๋ Koa, Hapi, Meteor ๋ฑ์ด ์๋๋ฐ,
๊ฐ๋ฐ์๋ค์ด ํธ๋ฆฌํ๊ฒ ์๋ฒ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ฐํ ์ ์๋๋ก ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฒฐํ๊ณ ์ ์ฐํ ์น์ ๋ง๋ค ์ ์๋๋ก ์ง์ํ๋ ์ญํ ์ ํ๋ค.
Node.js์ ํน์ง๊ณผ ์ด์
Node.js๋ ๋น๋๊ธฐ์ (I/O์์
)์ด๊ณ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ ๋ฐฉ์์ ์ฑํํ๋ค.
์ด๋ฐ ๋ฐฉ์์ ๋ง์ ๋์ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ๊ณ , ๋ธ๋กํน ์์
๋๊ธฐ ์๊ฐ์ ์ต์ํ ํ ์ ์์ด ๋์ ์ฒ๋ฆฌ๋๊ณผ ํ์ฅ์ฑ์ ์ ๊ณตํ๋ค.
Node.js๋ v8์์ง์ ๊ธฐ๋ฐ์ผ๋ก ํ JavaScript๋ผ๋ ๊ฒ๋ ์ฃผ๋ชฉํ ๋งํ ํน์ง์ด๋ค. v8 JavaScript ์์ง์ ํตํด
Node.js๋ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ์ปดํ์ผํ๊ณ ์คํํ๋ค. ์ฆ, ๋ฐ์์๋๊ฐ ์๋นํ๋ค.
Node.js๋ ๋จ์ผ ์ค๋ ๋ ๋ชจ๋ธ์ ์ฌ์ฉํด ๊ฐ๊ฐ์ ์์ฒญ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
์ด๋ ๊ฒํ๋ฉด ์ค๋ ๋ ๊ฐ์ ๋๊ธฐํ๋ ๊ณต์ ์์ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ์ค์ผ ์ ์๊ณ ์๋ฒ์ ํ์ฅ์ฑ์ ๋์ผ ์ ์๋ค.
Node.js๊ฐ ๊ฐ์ง ์์ฒญ๋ ์ํ๊ณ๋ ํน์ง์ด์ ์ด์ ์ด๋ค. Node.js๋ ๋ง์ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์ ํ๋ฐํ ์ํ๊ณ๋ฅผ ๊ฐ๊ณ ์์ด
npm์ ํตํด ๋ค์ํ ํจํค์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณต๋ฐ์ ์ ์๋ค. ์ด๋ ๋ชจ๋์ ์ฝ๊ฒ ์ฌ์ฉํ๊ณ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํด ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ผ ์ ์๋ค
ํด๋ผ์ด์ธํธ ์ฌ์ด๋์ ์๋ฒ ์ฌ์ด๋์ ์ธ์ด๊ฐ ๊ฐ๋ค๋ ๊ฒ ๋ํ ์์ฒญ๋ ํน์ง์ด๋ ์ด์ ์ด์ง ์์๊น ์ถ๋ค.
์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ค์ ์ผ๊ด๋ ์ธ์ด๋ฅผ ํตํด ๊ฐ๋ฐํ ์ ์๊ณ , ์ค์ ๋ก Node.js๋ ๊ฐ๊ฒฐํ๊ณ ์ ์ฐํ ๋ฌธ๋ฒ ๋ํ ๊ฐ๊ณ ์์ด
์ฝ๋ ๊ณต์ ์ ์ฌ์ฌ์ฉ ๋ฑ ํจ์จ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
๋ง์ง๋ง์ผ๋ก Node.js๋ ๋ค์ํ ์ด์ ์ฒด์ ์์ ๋์ํ ์ ์๋ ํฌ๋ก์ค ํ๋ซํผ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
๋ฐ๋ผ์, Node.js๋ ๋๊ท๋ชจ ๋คํธ์ํฌ ์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ ํฉํ๊ณ ์ค์๊ฐ ์น, API ์๋ฒ, ๋ง์ดํฌ๋ก ์๋น์ค, ์น ์๋ฒ ๋ฑ์ผ๋ก๋ ํ์ฉ๋๋ค.
Express.js๋ ๋ฌด์์ธ๊ฐ?
Express.js๋ ์๋ฒ์ฌ์ด๋ ํ๋ ์์ํฌ๋ค. ์ด๋ฌ๊ณ ์ ๋ฆฌ๋ฅผ ๋๋ธ๋ค๋ฉด ์ฌ์ฉ๋ฒ๋ง ์๋ ์ฌ๋์ด ๋๊ฒ ์งโฆ
Express.js๋ Node.js์ HTTP ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ณด์ํ๊ณ ์น ๊ฐ๋ฐ์ ๋ ์ฝ๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๋ฑ์ฅํ๋ค.
HTTP ๋ชจ๋์ ๊ธฐ๋ฅ์ ๋ณด์ํ๊ธฐ ์ํ Express์ ์ฃผ์ ํน์ง์ผ๋ก๋
๋ผ์ฐํ
(Routing)๊ณผ ๋ฏธ๋ค์จ์ด(Middleware), ๋ทฐ ์์ง ์ง์, ์ปค๋ฎค๋ํฐ ์ง์ ๊ทธ๋ฆฌ๊ณ ์ ์ ํ์ผ ์ฒ๋ฆฌ ๋ฑ์ด ์๋ค.
Express.js๋ ์๋นํ ๋ฏธ๋๋ฉํ๊ณ ์ฌํํ ๋์์ธ ์ฒ ํ์ ๊ฐ๊ณ ์์ด ํ์ํ ์ต์ํ์ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๋ ค๊ณ ํ๋ค.
์ด ํน์ง์ ํตํด ๊ฐ๋ฐ์๋ ์ํ๋ ๋ฐฉ์์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ฑํ๊ณ ํ์ฅ์ํฌ ์ ์๋ค.
๋ณธ๋ HTTP๋ชจ๋์ ๊ฐ๋ณ์ ์ธ URL ๊ฒฝ๋ก์ ๋ํ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์กฐ๊ฑด๋ฌธ๊ณผ URL ๋งค์นญ์ ์ฌ์ฉํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ Express๋ ๋ผ์ฐํ
๊ธฐ๋ฅ์ ์ฌ์ฉํด URL ๊ฒฝ๋ก์ ํด๋น ํธ๋ค๋ฌ ํจ์๋ฅผ ๋งคํํด ์ง๊ด์ ์ผ๋ก ๋ถ๋ฆฌํด ์ฌ์ฉํ๋ค.
HTTP๋ชจ๋์ ์ฌ์ฉํ ๋๋ ์์ฒญ ์ฒ๋ฆฌ์ ํ์ํ ๋ชจ๋ ์์ฒญ์ ๋ก์ง์ ์ง์ ์์ฑํด ์ฌ์ฉํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ Express๋ ๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ์ ํตํด request์ response ์ฌ์ด์ ์ค๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ ์๋ค.
HTTP๋ชจ๋์ ๋ชจ๋ HTML์ ์ง์ ์์ฑํด์ผํ์ง๋ง Express๋ ๋ค์ํ ํ
ํ๋ฆฟ ์์ง๊ณผ์ ํตํฉ์ ์ ๊ณตํด ๋์ ์น ํ์ด์ง๋ฅผ ์์ฑํ๋ค.
์ฆ, ๋ทฐ ์์ง ํ
ํ๋ฆฟ์ ํตํด ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ๊ฐํธํ๊ฒ ์์ฑํ ์ ์๋ค.
HTTP ๋ชจ๋์ ์ ์ ํ์ผ(img, CSS, JS)์ ์ฒ๋ฆฌํ๋ ๋ก์ง์ ๋น์ฐํ ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ Express๋ ์ ์ ํ์ผ ๋ฏธ๋ค์จ์ด๋ฅผ ์ ๊ณตํด ์ ์ ํ์ผ์ ์ฝ๊ฒ ๋ฐ์ ์ ์๋ค.
Express.js๋ ๊ธฐ๋ฅ์ ์ถ์ํํ๊ณ ๊ฐ๋ฐ์์๊ฒ ์๋นํ ํธ๋ฆฌํ API๋ฅผ ์ ๊ณตํด ์์ฐ์ฑ์ ๋์ฌ์ค๋ค.