๐Ÿ“ŒLanguage/JavaScript

TIL) Node๋ž€? Node์˜ ์‚ฌ์šฉ๋ฒ•, fs ๋ชจ๋“ˆ, ํ„ฐ๋ฏธ๋„์—์„œ ๋…ธ๋“œ ํ™œ์šฉํ•˜๊ธฐ, 3rd-party ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

hellohailie 2022. 6. 4. 20:00

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');