๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Dev/Back-End

Node.js์™€ npm: ๋ชจ๋“ˆ ๊ด€๋ฆฌ์™€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜

yesolz 2024. 8. 29. 23:42
728x90
 

 

๋ชจ๋“ˆ(Module)

ํŠน์ • ๊ธฐ๋Šฅ์„ ์บก์Šํ™”ํ•œ ์ฝ”๋“œ์˜ ๋ธ”๋ก ๋˜๋Š” ํŒŒ์ผ. ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์ฝ”๋“œ์˜ ์กฐ์งํ™”๋ฅผ ๋•๋Š”๋‹ค.

1. ๊ธฐ๋ณธ ๋‚ด์žฅ๋œ ๊ฒƒ

  • Node.js์—๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋ณธ ๋‚ด์žฅ ๋ชจ๋“ˆ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
  • setTimeout()
  • fs, http, path ๋“ฑ.

2. ์™ธ๋ถ€ ๋ชจ๋“ˆ

  • Node.js ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์ธ NPM(Node Package Manager)์„ ํ†ตํ•ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ค์น˜ ํ›„ ํ”„๋กœ์ ํŠธ์—์„œ ์™ธ๋ถ€ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Node.js์—์„œ exports๋Š” ๋ชจ๋“ˆ์„ ์ •์˜ํ•˜๊ณ  ์™ธ๋ถ€๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

๋‹ค๋ฅธ ํŒŒ์ผ์ด๋‚˜ ๋ชจ๋“ˆ์—์„œ ์ •์˜๋œ ๋ชจ๋“ˆ์€ require๋กœ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ vs ํ”„๋ ˆ์ž„์›Œํฌ

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ์˜ ์ง‘ํ•ฉ. ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉ.
    • ์ œ์–ด๊ถŒ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ๋‹ค! ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ.
  • ํ”„๋ ˆ์ž„์›Œํฌ
    • ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์„œ๋น„์Šค ๊ตฌ์กฐ๋ฅผ ์ •์˜. ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ทธ ํ‹€ ์•ˆ์—์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ๋•๋Š”๋‹ค.
    • ์ œ์–ด๊ถŒ์€ ํ”„๋ ˆ์ž„์›Œํฌ์— ์žˆ๋‹ค! (IoC) ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ทœ์น™๊ณผ ๊ตฌ์กฐ์— ๋งž์ถฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ชจ๋“ˆ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„์ด๋‹ค. 

ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

(๋ฆฌ์•กํŠธ๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ์ง€ ํ”„๋ ˆ์ž„์›Œํฌ์ธ์ง€๋Š” ์ค‘์š”ํ•œ ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์˜ ๊ธ€์—์„œ ๋”ฐ๋กœ ๋‹ค๋ฃจ์—ˆ๋‹ค!)

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ: ํ”„๋ก ํŠธ์—”๋“œ ๊ด€์ ์—์„œ์˜ ์ฐจ์ด

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ์‚ฌ์šฉ ๋ฐฉ์‹์—์„œ๋„ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. 1. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(

yesolz.tistory.com

 

 

 

ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž NPM

npm์€ node๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž

npm install ๋ชจ๋“ˆ๋ช…

npm uninstall ๋ชจ๋“ˆ๋ช…

** npm i ๋ชจ๋“ˆ๋ช… - g : ๋‚ด ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ // ๋น„์ถ” !

 

์ฝœ๋ฐฑ ํ•จ์ˆ˜

npm i figlet ์œผ๋กœ ์˜์กด์„ฑ ์„ค์น˜ ํ›„.

require๋กœ figlet ๋ณ€์ˆ˜์—๋‹ค, "figlet"์ด๋ผ๋Š” ๋ชจ๋“ˆ์„ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค.

require - ๋‚ด์žฅ ๋ชจ๋“ˆ, ์™ธ๋ถ€ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์“ฐ๋Š” ํ•จ์ˆ˜.

var figlet = require("figlet");

figlet("yesolz", function (err, data) {
  if (err) {
    console.log("Something went wrong...");
    console.dir(err);
    return;
  }
  console.log(data);
});

 

figlet ์˜ ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค.

๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ํ•จ์ˆ˜์˜ ์ด๋ฆ„ ์—†์ด ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๊ณ  ์žˆ๋‹ค. 

  •   ์ต๋ช…์˜ ํ•จ์ˆ˜๋ฅผ ์“ฐ๋Š” ์ด์œ  = ์ด ํ•จ์ˆ˜๋ฅผ ์“ธ ์ผ์ด ๋‹ค๋ฅธ ๋ฐ๋Š” ์—†์–ด์„œ
  •   figlet ๋งŒ๋“  ์‚ฌ๋žŒ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ๋ฐ›๊ธฐ๋กœ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ
  •   ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฌธ์ž์—ด์„ ๋ฐ›์•„์„œ, ์•„์Šคํ‚ค ์•„ํŠธ๋ฅผ ๋งŒ๋“  ๋‹ค์Œ์—
  •   ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ = ์ฝœ๋ฐฑ

 

http ๋ชจ๋“ˆ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜

let http = require("http");

function onRequest(request, response) {
  response.writeHead(200, { "Content-Type": "text/plain" });
  response.write("Hello Node.js");
  response.end();
}

http.createServer(onRequest).listen(8888);

http๋Š” ๋ณ„๋„์˜ ์„ค์น˜ ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ -> ๋‚ด์žฅ ๋ชจ๋“ˆ

http.createServer(onRequest)

createServer ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๋ฐ›์„ ์ค€๋น„๋ฅผ ๋งˆ์นœ ํ›„์—(HTTP ์„œ๋ฒ„ ์ƒ์„ฑ) ์ง€์ •๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜(onRequest)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹ 3๊ฐ€์ง€

if (true) {
  var num1 = 7;
  const num2 = 3;
  let num3 = 5;
}

console.log(num1);
console.log(num2); // num2 is not defined
console.log(num3); // num3 is not defined

const๊ณผ let์€ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. (์ค‘๊ด„ํ˜ธ ์Šค์ฝ”ํ”„)

{}๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ ์–ธ๋˜๋ฉด, ๊ทธ ๋ฐ–์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. 

 

ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด

์•„๋ž˜์˜ ๋‘ ์ฝ”๋“œ ๋ผ์ธ์˜ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” ๋™์ผํ•˜์ง€๋งŒ, ๋ฌธ๋ฒ•์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

  console.log(num1 + " X " + num2 + " = " + num1 * num2);
  console.log(`${num1} X ${num2} = ${num1 * num2}`); // ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด (ES6)

์ฒซ๋ฒˆ์งธ ๋ฐฉ์‹์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ดˆ๊ธฐ ๋ฒ„์ „๋ถ€ํ„ฐ ์‚ฌ์šฉ๋œ ๊ฒƒ์ด๋‹ค. ๋‹จ์ˆœํžˆ ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•œ๋‹ค. (concatenation)

๋‘๋ฒˆ์งธ ๋ฐฉ์‹์€ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค. ๋ฐฑํ‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๊ฐ์‹ธ๊ณ , ${} ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด ๋‚ด์—์„œ ๋ณ€์ˆ˜๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•˜์—ฌ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. ES6์—์„œ ๋„์ž…๋˜์—ˆ๋‹ค.

 

package.json๊ณผ package-lock.json ์ฐจ์ด์ 

package.json : ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์„ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ์ผ

package-lock.json : ์‹ค์ œ๋กœ ์„ค์น˜๋œ ์˜์กด์„ฑ์˜ ์ •ํ™•ํ•œ ๋ฒ„์ „์„ ๊ธฐ๋กํ•˜์—ฌ ์ผ๊ด€์„ฑ์„ ์œ ์ง€.

npm install <๋ชจ๋“ˆ๋ช…> ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ์™ธ๋ถ€ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, 

 

์ด ๊ณผ์ •์—์„œ package.json์˜ dependencies์— ์„ค์น˜ํ•œ ๋ชจ๋“ˆ์ด ์ถ”๊ฐ€๋˜๊ณ , package-lock.json์— ์ •ํ™•ํ•œ ๋ฒ„์ „ ์ •๋ณด๊ฐ€ ๊ธฐ๋ก๋œ๋‹ค.

package-lock.json ํŒŒ์ผ์—์„œ "resolved" ํ•„๋“œ๋Š” NPM์ด ํŠน์ • ํŒจํ‚ค์ง€๋ฅผ ์–ด๋””์„œ ๋‹ค์šด๋กœ๋“œ ํ–ˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

NPM์˜ ๋™์ž‘ ์›๋ฆฌ

NPM์ด package.json ํŒŒ์ผ์— ๋ช…์‹œ๋œ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•  ๋•Œ,

NPM์€ ์ค‘์•™ ์ €์žฅ์†Œ์ธ npmjs.org(NPM ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ)์—์„œ ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์ฐพ์•„ resolved ํ•„๋“œ์— ๋ช…์‹œ๋œ URL๋กœ๋ถ€ํ„ฐ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•œ๋‹ค.

์ด URL์€ .tgz ํ˜•์‹์˜ ์••์ถ•ํŒŒ์ผ(Tarball)์ด๋‹ค. NPM์€ ์ด ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„, ์ž๋™์œผ๋กœ ์••์ถ•์„ ํ’€๊ณ , ๋ชจ๋“ˆ์„ ํ”„๋กœ์ ํŠธ์˜ node_modules ํด๋”์— ์ €์žฅํ•œ๋‹ค.

์ด ๊ณผ์ •์—์„œ NPM์€ package-lock.json ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œ๋œ ํŒจํ‚ค์ง€์˜ ์ •ํ™•ํ•œ ๋ฒ„์ „๊ณผ ๋‹ค์šด๋กœ๋“œ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•œ๋‹ค. 

 

ํ•จ๊ป˜ ๋ณด๋ฉด ์ข‹์€ ๊ธ€

https://yesolz.tistory.com/entry/Nodejs%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC-%EC%8B%B1%EA%B8%80-%EC%8A%A4%EB%A0%88%EB%93%9C-%EA%B8%B0%EB%B0%98-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%A3%A8%ED%94%84-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-IO

 

Node.js์˜ ๋™์ž‘ ์›๋ฆฌ: ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ๋ฃจํ”„, ๋…ผ๋ธ”๋กœํ‚น I/O

Node.js๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํŠน์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ฐ ๋…ผ๋ธ”๋กœํ‚นI/O ๋ชจ๋ธ์„ ํ†ตํ•ด ๋น„๋™๊ธฐ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋‹ค. ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์ด

yesolz.tistory.com

 

728x90