Node๋ ๋ฌด์์ผ๊น?
JavaScript์ ๋ฐํ์์ด๋ค.
์ฐ๋ฆฌ๋ JavaScript์ ๋ฐ๋ก ์ค์นํ์ง ์๋๋ค. ๋์ ์ผ์ ํ ์ฌ์์ ๊ฐ์ถ์ด์ผ ํ๋ค.
ECMAScript ์ฌ์์ ๊ฐ์ถ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ JavaScript๋ฅผ ์คํํ๋ค!
์ค๋ซ๋์ ๋ธ๋ผ์ฐ์ ๋ JavaScript๋ฅผ ์์ฑํ๊ณ ์คํํ ์ ์๋ ์ ์ผํ ์ฅ์์๋ค.
๊ทธ๋์ JavaScript๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ๋ค.
Node๋ ๋ธ๋ผ์ฐ์ ๋ฐ์์ ์๋๋๋ JavaScript์ ์คํ ํ๊ฒฝ์ด๋ค.
์ด์ JavaScript ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด์ง ์๊ณ , ์ฌ์ง์ด ๋ธ๋ผ์ฐ์ ๊ฐ ์์ด๋ ์คํํ ์ ์๋ค.
(๊ทธ๋ ๋ค๊ณ ๋๊ฐ์ ์ผ์ ํ ์ ์๋ ๊ฑด ์๋๋ค. )
(-> ๋ธ๋ผ์ฐ์ ๊ฐ ์์ผ๋ฉด ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ์ ์ธ ์ ์๊ณ , ์ฌ์ฉ์์ ์ ๋ ฅ, ์ด๋ฒคํธ ๋ฑ์ ์ฌ์ฉํ ์ ์๋ค. )
๊ทธ๋๋ Node๋ ์ ๋ง ์ ์ฉํ๋ค!!
Node๋ ๋ธ๋ผ์ฐ์ ๋ฐ์์ ์คํ๋๋ JavaScript์ด๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์๋ ๊ตฌ๋ฌธ์ ์จ์ ์๋ฒ ์ธก์์ ์คํ๋๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
Node์ ์ฌ์ฉ๋ฒ!
1. Web Servers
2. Command Line Tools
3. Native Apps (VSCode is a Node app!)
4. Video Games
5. Drone Software
6. A Whole Lot More!
1. ์น ์๋ฒ ๊ตฌ์ถ (Web Servers)
=> ์๋ฒ ์ธก ๋ก์ง์ ์จ์ ํ์คํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ ๋ค.
์ง๊ธ์ ์๋ฒ๋ฅผ ์์ฒญํ๋ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์ Node ์์ด ์์ฑํ ์ ์๋ค.
AJAX๋ก API๋ฅผ ์์ฒญํด์ ์ ๋ณด๋ฅผ ๋ฐ๊ณ , ๋ธ๋ผ์ฐ์ ์์ ์์ ํ ์๋ ์๋ค.
ํ์ง๋ง ๋ด API๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด? ๋ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค์ด์ ๊ฑฐ๊ธฐ์ ์น ์๋ฒ๋ฅผ ์ฐ๊ฒฐํ๊ณ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด?
์ด๋ Node๋ฅผ ์ด๋ค.
(์ด๊ฒ Node์ ๊ฐ์ฅ ํํ ์ฉ๋ ์ค ํ๋๋ค. )
Express๋ Node์ ์ ๋ช ํ ํ๋ ์์ํฌ
Node๋ Netfilx, Uber, NASA์์ ์ฐ์ธ๋ค.
2. ๋ช ๋ น์ค ๋๊ตฌ๋ฅผ ๋ง๋ ๋ค. (Command Line Tools)
๋ช ๋ น์ค ๋๊ตฌ๋ ์ ํต์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ์๋ ๊ฒฝ์ฐ ๋ช ๋ น์ค์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋งํ๋ค.
(npm๋ ๋ช ๋ น์ค ๋๊ตฌ๋ค.)
3. ๋ค์ดํฐ๋ธ ์ฑ (Native Apps (VSCode is a Node app!))
VSCode, Slack๋ Node์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ค.
(VSCode๋ js๋ก ๋ง๋ค์์ง๋ง ๋ธ๋ผ์ฐ์ ์์ ์คํ๋์ง ์๋๋ค. ๊ทธ๋์ ๋ค์ดํฐ๋ธ ์ฑ์ผ๋ก๋ง ์คํํ๊ณ ์๋ค.)
4. ๊ฒ์ (Video Games)
UNITY ๋ฑ์ด ๋ ๋ง์ด ์ฐ์ด๊ธด ํ์ง๋ง, CrossCode๋ผ๋ ๊ฒ์์ js์์ node.js๋ก ๋ง๋ค์ด์ง ๊ฒ์์ด๋ค.
5. ๋๋ก ์ํํธ์จ์ด (Drone Software)
๋ชจ๋ ๋ถ๋ถ์ Node๋ก ์ ์ดํ ์ ์๊ณ , ๋ธ๋ผ์ฐ์ ์์ ๋ฒ์ด๋ ์ ์๋ค.
6. ๊ธฐํ ๋ฑ๋ฑ
ํฐ๋ฏธ๋์์ ๋ ธ๋ ํ์ฉํ๊ธฐ
ํฐ๋ฏธ๋์ node ์ํฐ๋ฅผ ์น๋ฉด, Node REPL์ ์๋ ์ค์ด๋ค.
์ฌ๊ธฐ์ ๋น ์ ธ๋์ค๋ ค๋ฉด ctrl + c๋ฅผ ๋๋ฒ ์น๋ฉด ๋๋ค.
REPL(read-eval-print loop) ์ฝ๊ณ ํ๊ฐํ๊ณ ์ถ๋ ฅํ๋ค.
๋ธ๋ผ์ฐ์ ์ js ์ฝ์์ REPL์ด๋ค.
์ฝ๋๋ฅผ ์ฝ์์ ์ ๋ ฅํ๋ฉด ์ฝ๋๋ฅผ ์ฝ๊ณ ํ๊ฐํ๊ณ ๋ญ๊ฐ๋ฅผ ์ถ๋ ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ณผ์ ์ ๋ค์ ๋ฐ๋ณตํ๋ค.
<๋ธ๋ผ์ฐ์ ์๋ ์์ง๋ง Node์ ์๋ ๊ธฐ๋ฅ์ด ์๋ค!>
-> ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ API๊ฐ Node์๋ ์๋ค. window์ document๋ ์๋ค.
(๊ทธ๋์ node ํ๊ฒฝ์์ (ํฐ๋ฏธ๋์ node ์ํฐ ํ) document๋ฅผ ์ ๋ ฅํ๋ฉด ์ค๋ฅ๊ฐ ๋ฌ๋ค.)
์ฐธ๊ณ
์๋์ฐ๋ ๋ธ๋ผ์ฐ์ ์์ ์ ์ญ ๊ฐ์ฒด์ด๋ค. (๋ชจ๋ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด์ด๋ค.)
Node์๋ ์ ์ญ์ด ์๋ค. => global
๐ Node ์ ์ญ์ setTimeout ์ด ์์ด์ setTimeout์ ์คํํ ์ ์๋ค.
<๋ธ๋ผ์ฐ์ ์๋ ์์ง๋ง Node์ ์๋ ๊ธฐ๋ฅ์ด ์๋ค! ์ฌ์ง์ด ์์ฒญ ๋ง๋ค!>
์ ๋ถ ๋ด์ฅ ๋ชจ๋์ด๊ณ , ์ด ๋ชจ๋์ ์ด์ฉํด์ ์ด์ ์ฒด์ ์ ํ์ผ๊ณผ ํด๋๋ฅผ ๋ค๋ฃฐ ์ ์๋ค.
Node ํ๊ฒฝ์์ js ์ฝ๋๋ฅผ ์ ๋ ฅํ ์ ์๋ค. (ํฌ๋กฌ ์ฝ์์ฒ๋ผ)
Node REPL์ ์ ์ฉํ์ง๋ง ์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ์คํํ ์๋ ์๋ค. (์ฝ๊ณ ํ๊ฐํ๊ณ ์ถ๋ ฅ๋ง ๊ฐ๋ฅํจ)
playnode.js๋ผ๋ ํ์ผ์ ๋ฐ๋ณต๋ฌธ ์์ ์ฝ์์ฐฝ์ 'hi hailie go for it!' ๋ฅผ ๋ก๊ทธํ๋ผ๋ ๋ช ๋ น์ ๋ด๋ ธ๋ค.
๊ทธ๋ฆฌ๊ณ node playnode.js ์ํฐ๋ฅผ ์น๋ฉด ์ ์ฌ์ง์ฒ๋ผ ํฐ๋ฏธ๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋ณผ ์ ์๋ค.
๐ ๋๋ ํ ๋ฆฌ, ํ์ผ ๊ฒฝ๋ก๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ด์์ด์ผํ๋ค!
node ํด๋๋ช
/ํ์ผ๋ช
<nvm(Node Version Manager)>
const args = process.argv.slice(2);
for (let arg of args) {
console.log(`'hi there, ${arg}`)
}
โฅ ์ธ์๋ฅผ ๋ง๋ ๋ค๋ฉด argv์ ์ฒ์ ์์ 2๊ฐ๋ ๋ฌด์ํ๋ค.
(์ฒซ๋ฒ์งธ ์์๋ process.argv(์คํ๊ฐ๋ฅํ ๊ฒฝ๋ก)์ด๊ณ , ๋๋ฒ์งธ ๊ฐ์ ํด๋น ํ์ผ์ ๊ฒฝ๋ก์ด๊ธฐ ๋๋ฌธ์ด๋ค.)
fs (file system)
fs (file system) ํ์ผ ์์คํ ์ ์๋ฏธํ๋ ๋ชจ๋์ด๋ค. ํ์ผ์ ์์ฑํ๊ณ ์ฝ๊ณ ํ์ผ์ ์ถ๊ฐํ๊ณ ์๋ก์ด ํ์ผ์ ๋ง๋ค ๋ ์ฐ์ด๋ ๋ค์ํ ๋ฉ์๋๊ฐ ์๋ฉ ์๋ค.
๐ ์๋ง์ ๋ฉ์๋๊ฐ ์๋ค.
https://nodejs.org/api/fs.html
ํ์ผ์ ์ฝ๊ฑฐ๋ ํด๋๋ฅผ ์์ฑํ๋ ๋ฉ์๋๋ ํ์ผ์ด๋ ํด๋๋ฅผ ์ญ์ ํ๋ ๋ฉ์๋๋ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
- ๋๊ธฐ ๋ฐฉ์ : ์์ฒญ์ ํ ํ ์๋ฃ๋์ด์ผ์ง๋ง ๋ค์ ๋์์ผ๋ก ๋์ด๊ฐ๋ค. (blocking)
- ๋น๋๊ธฐ ๋ฐฉ์
๐ fs๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ ธ์์ผํ๋ ๋ชจ๋์ด๋ค. โญ๏ธโญ๏ธโญ๏ธ
const fs = require('fs');
3rd-party ๋ชจ๋์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
์๋ฅผ๋ค์ด, Node.js ๊ณต์ ๋ฌธ์์ ์๋ ๋ชจ๋(์๋ ํํฐ ๋ชจ๋)์ธ underscore๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด,
๐ ํฐ๋ฏธ๋์์ ์๋์ฒ๋ผ ์ ๋ ฅํด์ underscore ๋ฅผ ์ค์นํ ์ ์๋ค.
npm install underscore
๐ ์ค์น ํ require ๊ตฌ๋ฌธ์ ํตํด์ underscore๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
const _ = require('underscore');