Node.js๋ Chrome V8 Javascript ์์ง์ผ๋ก ๋น๋์ ๋ Javascript ๋ฐํ์์ด๋ค.
ํ์ฅ์ฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ฌ์ฉ๋๋ฉฐ, ์์ฑ์ธ์ด๋กJavascript
๋ฅผ ์ฌ์ฉํ๋ค.
์ฝ๊ฒ ๋งํด Node.js๋ ์น์๋ฒ๋ ํ๋ ์์ํฌ๊ฐ ์๋๊ณ ,
JavaScript๋ก ์๋ฒ๋ฅผ ๊ตฌ์ถํ๊ณ , ์๋ฒ์์ JavaScript๊ฐ ์๋๋๊ฒ ํด์ฃผ๋ ์ผ์ข
์ ์คํํ๊ฒฝ
์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
1) ์ฐ๋ ๋ ๊ธฐ๋ฐ ๋๊ธฐ๋ฐฉ์(Blocking I/O)
ํ๋์ ์ฐ๋ ๋๊ฐ request๋ฅผ ๋ฐ์ผ๋ฉด ๋ชจ๋ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ ์๋ฃ๋๋ฉด ๋ค์ ์๋ต ์ ์ก
๊ธฐ์กด ์ ๋ฌด ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๊ธฐ ์ ์ ๋ ๋ค๋ฅธ request๊ฐ ์์ผ๋ฉด ์๋ก์ด ์ฐ๋ ๋๊ฐ ์ ๋ฌด ์ฒ๋ฆฌ
๋์ request๊ฐ ๋ง์ ๊ฒฝ์ฐ ๋ง์ ์ฐ๋ ๋๊ฐ ํ์ํด์ ์๋ฒ ๊ณผ๋ถํ
2) ๋จ์ผ์ฐ๋ ๋ ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฐ ๋น๋๊ธฐ๋ฐฉ์(Non-Blocking I/O)
ํ๋์ ์ฐ๋ ๋๊ฐ request๋ฅผ ๋ฐ์ผ๋ฉด ๋ฐ๋ก ๋ค์ ์ฒ๋ฆฌ์ ์์ฒญ์ ๋ณด๋ด๋๊ณ ๋ค๋ฅธ ์์ ์ ์ฒ๋ฆฌํ๋ค๊ฐ ๋จผ์ ์์ฒญํ ์์ ์ด ๋๋๋ฉด ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ ์๋ต์ ๋ณด๋
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ๋ฏธ๋ฆฌ ์ง์ ํด๋ ์์ ์ ์ํํ๋ ๋ฐฉ์์ผ๋ก, ์ด๋ฒคํธ๋ ํด๋ฆญ์ด๋ ๋คํธ์ํฌ ์์ฒญ๋ฑ์ด ์์ ์ ์์
์ฌ๊ธฐ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ๋ฌด์์ ํ ์ง ๋ฏธ๋ฆฌ ๋ฑ๋ก ํด ๋๋๊ฒ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋
์ ์ฝ๋ฐฑ ํจ์
๋ฅผ ๋ฑ๋กํ๋ค๊ณ ํํ
ํด๋ฆญ ์ ๊ฒฝ๊ณ ์ฐฝ์ ๋์ฐ๋ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋๊ฒ์ ์๋ก ๋ค์๋ฉด, ํด๋ฆญ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๊ฒฝ๊ณ ์ฐฝ์ ๋์ฐ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฑ๋กํด๋๋ฉด ํด๋ฆญ ๋ ๋๋ง๋ค ์ฝ๋ฐฑ ํจ์๊ฐ ์คํ๋์ด ๊ฒฝ๊ณ ์ฐฝ์ด ๋จ๋๊ฒ
์์ธํ ๋ด์ฉ์ Node.js ์ดํดํ๊ธฐ_์ด๋ฒคํธ ๋ฃจํ
3) Javascript ์ธ์ด ์ฌ์ฉ
4) ๋ ผ๋ธ๋กํน I/O
์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ ํ์ฉํ๋ฉด, ์ค๋ ๊ฑธ๋ฆฌ๋ ํจ์๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋ณด๋ด๊ณ ๊ทธ ํจ์๊ฐ ๋ค์ ํ์คํฌํ๋ฅผ ๊ฑฐ์ณ ํธ์ถ ์คํ์ผ๋ก ์ฌ๋ผ์ค๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์์ ํ์ฉํ ์ ์๋๋ฐ, ์ด๋ฅผ
๋ ผ๋ธ๋กํน ๋ฐฉ์
์ด๋ผ๊ณ ํ๋ค.
function longRunningTask(){
console.log("์ค๋ ๊ฑธ๋ฆฌ๋ ์์
");
}
console.log("์์");
setTimeout(longRunningTask,0);
console.log("๋ค์ ์์
");
๋ค์๊ณผ ๊ฐ์ด ์์ฑ ์, ๊ฒฐ๊ณผ๋ ์์ -> ๋ค์ ์์
-> ์ค๋ ๊ฑธ๋ฆฌ๋ ์์
์์ผ๋ก ์ด๋ค์ง๋ค.
์ฌ๊ธฐ์ SetTimeOut(์ฝ๋ฐฑ,0)
์ ์ฝ๋๋ฅผ ๋
ผ๋ธ๋กํน์ผ๋ก ๋ง๋ค๊ธฐ์ํด ์ฌ์ฉํ๋ ๊ธฐ๋ฒ ์ค ํ๋๋ค.
5) ์ฑ๊ธ์ค๋ ๋
์ค๋ ๋ : ์ปดํจํฐ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ ์ผ์
ํ ๋ฒ์ ํ๊ฐ์ง ์ผ๋ฐ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ฏ๋ก, ์ด๋ ํ ์์ ์์ ๋ธ๋กํน์ด ๋ฐ์ํ ์ ๋ค์ ์ผ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ค.
๋จ์ผ ์ค๋ ๋(Single-Thread)์ ๋ ผ ๋ธ๋กํน(Non-blocking I/O) ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋์ด ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ๊ฐ์ง๋ค.
๋ด์ฅ HTTP ์๋ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ๊ณ ์์ด Apache๋ฑ์ ๋ณ๋ ์ํํธ์จ์ด ์์ด ๋์์ด ๊ฐ๋ฅํ๋ค.
Javascript ์ธ์ด๋ก Front-end ๋ฟ๋ง ์๋๋ผ Back-end ๊ฐ๋ฐ ํ๊ฒฝ ๋ํ ๊ตฌ์ฑํ ์ ์์ด ์์ฐ์ฑ์ด ๋๊ณ ๋ฌ๋ ์ปค๋ธ๊ฐ ์ค์ด๋ ๋ค.
๋ค์ํ ํจํค์ง ๋งค๋์ (npm:Node Package Manager
)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ํ ๋ชจ๋(ํจํค์ง)์ ์ ๊ณตํ๋ค.
๋ชจ๋ API๋ ๋น๋๊ธฐ ๊ธฐ๋ฐ์ ์ฒ๋ฆฌ ๋ฐฉ์
์ด๋ผ ์๋ฒ ๋ก์ง์ด ๋ณต์กํ ๊ฒฝ์ฐ ์ฝ๋ฐฑ ํจ์์ ๋ช
์ ๋น ์ง ์ ์๋ค.
๋จ์ผ ์ค๋ ๋์ด๊ธฐ ๋๋ฌธ์ ํ๋์ ์์ ์ด ์ค๋๊ฑธ๋ฆฌ๋ ์๋น์ค์ ๊ฒฝ์ฐ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
ํด๋น ์ฝ๋๋ฅผ ์ํํด์ผ๋ง ์๋ฌ๋ฅผ ํ์ธํ ์ ์๊ณ , ์๋ฌ ๋ฐ์ ์ ํ๋ก์ธ์ค๊ฐ ๋ด๋ ค๊ฐ ์ ์๋ค.
์ธ์
์ ๊ณต์ ํ ๊ฒฝ์ฐ redis์ ๊ฐ์ ๋ถ๊ฐ์ ์ธํ๋ผ๊ฐ ํ์ํ๋ค.
ํ๋์ ์ธ์ด๋ก Back/Front ๊ฐ๋ฐ์ ๊ตฌ์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ
๊ฐ๋จํ ๋ก์ง์ผ๋ก ๊ตฌ์ฑํ๋ ์๋น์ค
์ ์ถ๋ ฅ(I/O)์ด ์์ฃผ ๋ฐ์ํ๋ ์๊ณ ๋น๋ฒํ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์๋น์ค
๋น๋๊ธฐ ๋ฐฉ์์ด ์ด์ธ๋ฆฌ๋ ์๋น์ค
๋น ๋ฅด๊ฒ ํ๊ฒฝ์ ๊ตฌ์ฑํ์ฌ ๊ฐ๋ฐํด์ผ ํ๋ ๊ฒฝ์ฐ
๋ ธ๋๋ฅผ ํตํด ๋ค์ํ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ ํ ์ ์์ง๋ง, ๋ ธ๋๋ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ค.
์๋ฒ๋, ๋คํธ์ํฌ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์ ๋ณด๋ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ปดํจํฐ ๋๋ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ค.
(์ฌ๊ธฐ์ ํด๋ผ์ด์ธํธ
๋ ์์ฒญ์ ๋ณด๋ด๋ ์ฃผ์ฒด๋ก, ๋ธ๋ผ์ฐ์ ์ผ์๋ ์๊ณ ๋ชจ๋ฐ์ผ ์ฑ, ์๋ฒ ์ผ ์๋ ์๋ค.)
'์นํ์ด์ง์ ์๋๊ฐ์ ๋ถ์ด๋ฃ๊ธฐ ์ํด' ๋ง๋ค์ด์ง ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก,
์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฑํ ํ๋ก๊ทธ๋จ์์คํฌ๋ฆฝํธ(script)
๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์คํฌ๋ฆฝํธ๋ ์นํ์ด์ง์ HTML ์์ ์์ฑํ ์ ์๊ณ , ์น ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ฌ๋ ์คํฌ๋ฆฝํธ๊ฐ ์๋ ์คํ๋๋ค.
๋ฐ๋ผ์ Javascript๋ ๋
๋ฆฝ์ ์ธ ์ธ์ด๊ฐ ์๋ ์คํฌ๋ฆฝํธ์ธ์ด
๋ก์จ, ํน์ ํ ํ๋ก๊ทธ๋จ ๋ด์์๋ง
๋์์ด ๊ฐ๋ฅํด์, ํฌ๋กฌ, ํ์ด์ดํญ์ค, ์ฌํ๋ฆฌ, ์ต์คํ๋ก๋ฌ๋ฑ์ ์น๋ธ๋ผ์ฐ์ ๊ฐ ์์ผ๋ฉด ์ฌ์ฉํ ์ ์๋ค๋ ๋จ์ ์ด ๊ณต์กดํ๋ค. ๋ฐ๋ผ์ client
๊ฐ๋ฐ์ ์ํ ์ฉ๋๋ก๋ง ๊ตญํ๋์ด ์์๋ค.
ํ์ง๋ง Node.js๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ Javascript๋ฅผ ์น ๋ธ๋ผ์ฐ์ ์ ๋ ๋ฆฝ์ํฌ ์ ์์ด, ํฐ๋ฏธ๋ํ๋ก๊ทธ๋จ(cmd ๋ฑ)์์ Node.js๋ฅผ ์ ๋ ฅํ์ฌ ๋ธ๋ผ์ฐ์ ์์ด ๋ฐ๋ก ์คํ์ด ๊ฐ๋ฅํ๋ค.
๋ํ, Node.js๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ ์๋ฒ๋ํ ๋ง๋ค ์ ์๋ค.
์ด์ ๊น์ง๋ Server-Client ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค ๋ ์น์์ ํ์๋๋ ๋ถ๋ถ์ JavaScript๋ก,
์๋ฒ๋ Reby, Java๋ฑ์ ์ธ์ด๋ฅผ ์จ์ ๊ตฌํํด์ผํ๋๋ฐ, Node.js๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ JavaScript ํ ๊ฐ์ง ๋ง์ผ๋ก ์ ์ฒด ์นํ์ด์ง ๊ตฌํ์ด ๊ฐ๋ฅํด์ง๋ค.
๋ฌผ๋ก ๋จ์ ์น ๊ฐ๋ฐ์ ์ํด์๋ Javascript๋ง์ผ๋ก๋ ์ถฉ๋ถํ ์ ์์ง๋ง,
์ฑํ
์ด๋ ๊ฒ์๋ฑ์ ์ค์๊ฐ ๊ธฐ๋ฅ์ ๋ฃ์๋๋, ๋ก๊ทธ์ธ ๊ธฐ๋ฅ๋ฑ์ ๋ฃ์๋๋ Node.js๋ฅผ ์ด์ฉํ๋๊ฒ์ด ์ข๋ค.(Node.js๋ฅผ ์ด์ฉํด DB ๊ตฌํ ๊ฐ๋ฅ)
JavaScript | Node.js |
---|---|
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด | ๋ธ๋ผ์ฐ์ ๋ฐ์์ ๋์ํ๋ Javascript ๋ฐํ์ |
๋ธ๋ผ์ฐ์ ์์๋ง ๋์ | ๋ฐ์คํฌํ์์ ๋์ |
Client์ ๋ํ ๊ฐ๋ฐ | ์น์๋ฒ ๊ตฌ์ถ |