๊ด€๋ฆฌ ๋ฉ”๋‰ด

C-log

section31-์šฐ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋„๊ตฌ : ๋…ธ๋“œ(Node) ๋ณธ๋ฌธ

๐Ÿ“’JS/โšกver.0

section31-์šฐ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋„๊ตฌ : ๋…ธ๋“œ(Node)

4:Bee 2023. 4. 6. 13:48
728x90
Topic explain class
Node.js ๋…ธ๋“œJS๋Š” JS์˜ ๋Ÿฐํƒ€์ž„์ด๋‹ค.
JS์˜ ์ด๋…์€ ๋ฌด์—‡์ธ๊ฐ€
JS์—๋Š” ์™œ ๊ณต์‹ํŒ์ด ์—†๋Š”๊ฐ€
JS๋Š” ์„ค์น˜ํ•˜์ง€ ์•Š๋Š” ๋Œ€์‹  ์ผ์ •ํ•œ ์‚ฌ์–‘์„ ๊ฐ–์ถ”์–ด์•ผํ•œ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ECMAScript์‚ฌ์–‘์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ JS๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๊ทœ์น™์„ ์ง€ํ‚จ๋‹ค.
๋ธŒ๋ผ์šฐ์ €๋Š” JS๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์žฅ์†Œ์ด๋‹ค.
ํ•˜์ง€๋งŒ phyton์ด๋‚˜ ruby๋กœ๋„ ์›น์„œ๋ฒ„๋‚˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•  ์ˆ˜์žˆ๋Š”๋ฐ Node.js๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „์—๋Š” ์ด๋Ÿฐ์ผ์„ ๋ชปํ–ˆ๋‹ค.

Node๋Š” ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ ์ž‘๋™๋˜๋Š” JS์˜ ์‹คํ–‰ ํ™˜๊ฒฝ์ด๋‹ค.JS์ฝ”๋“œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด์ง€ ์•Š๊ณ  ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.(๊ทธ๋ ‡๋‹ค๊ณ  ๋˜‘๊ฐ™์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.)
Node Js๊ฐœ์š”
Node์˜ ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” Express์ด๋‹ค. Node๋Š” ์–ด๋””์— ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?
ํ”„๋ ˆ์ž„์›Œํฌ๋ž€? : ํ”„๋ ˆ์ž„์›Œํฌ(Framework)๋ž€, ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ณธ์ ์ธ ๋ผˆ๋Œ€์™€ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋„๊ตฌ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€ ๋ชจ๋“ˆ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฐœ๋ฐœ์ž๋Š” ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ ๊ธฐ์กด์˜ ๊ตฌ์กฐ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๊ณ  ์ผ๊ด€๋œ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋ณด์•ˆ, ์„ฑ๋Šฅ, ํ™•์žฅ์„ฑ ๋“ฑ ์—ฌ๋Ÿฌ ์ธก๋ฉด์—์„œ ์•ˆ์ •์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
๋Œ€ํ‘œ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ๋Š” Spring, Django, Ruby on Rails, Laravel ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
 
Node REPL ๋ธŒ๋ผ์šฐ์ €์˜ JavaScript์ฝ˜์†”์€ REPL์ž…๋‹ˆ๋‹ค.  Node REPL
  REPL : REPL์€ Read-Eval-Print Loop์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. Node.js๋Š” JavaScript ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์œผ๋กœ, REPL์€ JavaScript ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์ฆ‰์‹œ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ˜์†” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, REPL์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์‹คํ–‰ํ•˜๋ฉฐ, ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ๋‹ค์‹œ ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ๋ฃจํ”„๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. Node.js์—์„œ REPL์„ ์‚ฌ์šฉํ•˜๋ฉด JavaScript ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹คํ—˜ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Node ํŒŒ์ผ ์‹คํ–‰ํ•˜๊ธฐ
Node ํŒŒ์ผ ์‹คํ–‰
Process & Argv argv๋Š” ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค์™€ Argv

{Doc}
https://nodejs.org/dist/latest-v18.x/docs/api
  argv๋ž€?
์—ฌ๊ธฐ์„œ
argc๋Š” ์ „๋‹ฌ๋œ ์ธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ, argv๋Š” ์ธ์ž๋“ค์˜ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Python์—์„œ๋„ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ sys.argv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋งจ๋“œ ๋ผ์ธ์—์„œ ์ „๋‹ฌ๋œ ์ธ์ž๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. argv๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ ์ธ์ž๋ฅผ ๋ฐ›์•„์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, node ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ํ•˜๋Š” JavaScript ํŒŒ์ผ์—์„œ argv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋งจ๋“œ ๋ผ์ธ์—์„œ ์ „๋‹ฌ๋œ ์ธ์ž๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
Node์‹ค์Šต   ํŒŒ์ผ์‹œ์Šคํ…œ ๋ชจ๋“ˆ์˜ ์ถฉ๋Œ ๊ณผ์ •
Node(gitBash)์ฝ”๋“œ
const fs = require('fs');
const folderName = process.argv[2] || 'Project'

try {
  fs.mkdirSync(folderName);
  // console.log(folderName);
  fs.writeFileSync(`${folderName}/index.html`);
  fs.writeFileSync(`${folderName}/app.js`);
  fs.writeFileSync(`${folderName}/app.css`);
} catch (e) {
  console.log("SOMETHING WENT WRONG!!");
  console.log(e);
}

์˜ค๋ฅ˜ : TypeError [ERR_INVALID_ARG_TYPE]: The "data" argument must be of type string or an instance of Buffe
r, TypedArray, or DataView. Received undefined

->.writeFileSync์˜ ์‚ฌ์šฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
fs.writeFileSync(file, data[, options]) 
{Doc}
https://nodejs.org/dist/latest-v18.x/docs/api/fs.html#fswritefilesyncfile-data-options
 
์ˆ˜์ •๋œ ์ฝ”๋“œ : fs.writeFileSync(~)์—์„œ file๋ช…๋งŒ์ž‘์„ฑํ•˜์ง€์•Š๊ณ data๋„ ์ •์˜ํ•ด์ฃผ๋ฉด์„œ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.
const fs = require('fs');
const folderName = process.argv[2] || 'Project'

try {
  fs.mkdirSync(folderName);
  // console.log(folderName);
  fs.writeFileSync(`${folderName}/index.html`, '');
  fs.writeFileSync(`${folderName}/app.js`, '');
  fs.writeFileSync(`${folderName}/app.css`, '');
} catch (e) {
  console.log("SOMETHING WENT WRONG!!");
  console.log(e);
}
 
chat gpt :
์œ„ ์ฝ”๋“œ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ชจ๋“ˆ์ธ fs ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํ•ด๋‹น ํด๋”์— index.html ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ˜„์žฌ ์ฝ”๋“œ์—์„œ๋Š” index.html ํŒŒ์ผ์— ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด index.html ํŒŒ์ผ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„ ์ฝ”๋“œ์—์„œ๋Š” index.html ํŒŒ์ผ ๋‚ด์šฉ์œผ๋กœ "Welcome to my page!"๋ฅผ ๊ฐ€์ง€๋Š” HTML ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ฃผ์„ ์ฒ˜๋ฆฌ๋œ ๋ถ€๋ถ„์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ app.js์™€ app.css ํŒŒ์ผ๋„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 

 

728x90
Comments