🎯 Node.js의 μž‘λ™ 원리λ₯Ό μ΄ν•΄ν•˜κ³ , μ™ΈλΆ€ λͺ¨λ“ˆμ„ 톡해 μ‹€μŠ΅ν•˜λ©° npm μ‚¬μš©λ²•μ„ μ΅νž™λ‹ˆλ‹€.


πŸ“™ Today I Learned

Node.js νŠΉμ§•

μ‹±κΈ€ μŠ€λ ˆλ“œ

  • ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ‘œ λͺ¨λ“  μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

이벀트 기반

  • μš”μ²­(이벀트)이 듀어와야 μž‘μ—…μ„ μ‹œμž‘ν•˜κ³ , μ—†μœΌλ©΄ λŒ€κΈ°ν•©λ‹ˆλ‹€.

  • λΆˆν•„μš”ν•œ μžμ› λ‚­λΉ„ 없이 ν•„μš”ν•œ μˆœκ°„μ—λ§Œ λ°˜μ‘ν•©λ‹ˆλ‹€.

λ…ΌλΈ”λ‘œν‚Ή I/O

  • ν•˜λ‚˜μ˜ μž‘μ—…μ΄ 끝날 λ•ŒκΉŒμ§€ 기닀리지 μ•Šκ³ , λŒ€κΈ° μ‹œκ°„μ΄ 생기면 λ‹€λ₯Έ μž‘μ—…μ„ λ¨Όμ € μ²˜λ¦¬ν•©λ‹ˆλ‹€.

🍜 Node.js λ™μž‘ 원리 μ˜ˆμ‹œ

πŸ§‘β€πŸ³ 1️⃣ μ‹±κΈ€ μŠ€λ ˆλ“œ = μš”λ¦¬μ‚¬λŠ” ν•œ λͺ…
ν•œ λͺ…μ˜ μš”λ¦¬μ‚¬(Node.js)λŠ” μ—¬λŸ¬ μ†λ‹˜(μš”μ²­)μ—κ²Œμ„œ 주문을 λ°›μŠ΅λ‹ˆλ‹€.

♻️ 2️⃣ 이벀트 루프 = μš”λ¦¬μ‚¬κ°€ μš”λ¦¬ν•  μˆœμ„œλ₯Ό μ •ν•˜λŠ” 방법
μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” μž‘μ—…μ€ λŒ€κΈ°μ—΄μ— μΆ”κ°€ν•˜κ³ , λ¨Όμ € μ²˜λ¦¬ν•  수 μžˆλŠ” μž‘μ—…λΆ€ν„° μ‹€ν–‰ν•©λ‹ˆλ‹€.

πŸ’¨ 3️⃣ λ…ΌλΈ”λ‘œν‚Ή I/O = 기닀리지 μ•Šκ³  μ—¬λŸ¬ μš”λ¦¬λ₯Ό λ™μ‹œμ— 처리
μš”λ¦¬μ‚¬λŠ” λΌλ©΄πŸœμ„ λ§Œλ“€λ©΄μ„œλ„, 물이 λ“λŠ” λ™μ•ˆ μ£Όλ¨Ήλ°₯πŸ™μ„ μ€€λΉ„ν•˜κ³ , μƒˆμš°νŠ€κΉ€πŸ€μ„ νŠ€κΈ°λ©΄μ„œ 라면도 계속 ν™•μΈν•˜λŠ” λ°©μ‹μœΌλ‘œ μ΅œλŒ€ν•œ μ‹œκ°„μ„ μ ˆμ•½ν•˜λ©° μΌν•©λ‹ˆλ‹€.


Node.js πŸ†š Spring

  • Node.js β†’ μ‹±κΈ€ μŠ€λ ˆλ“œ + 비동기(λ…ΌλΈ”λ‘œν‚Ή) 방식
  • Spring β†’ λ©€ν‹° μŠ€λ ˆλ“œ + 동기(λΈ”λ‘œν‚Ή) 방식

Node.jsλŠ” 가볍고 λΉ λ₯Έ μ²˜λ¦¬κ°€ ν•„μš”ν•œ μ„œλ²„ κ°œλ°œμ— μ ν•©ν•©λ‹ˆλ‹€.




λͺ¨λ“ˆ

  • κΈ°λŠ₯ λ‹¨μœ„λ‘œ κ΅¬μ„±λœ μ½”λ“œ μ‘°κ°μž…λ‹ˆλ‹€.

  • Node.jsμ—μ„œ require λ˜λŠ” importλ₯Ό μ‚¬μš©ν•˜μ—¬ λΆˆλŸ¬μ˜΅λ‹ˆλ‹€.

  • Node.js 덕뢄에 JavaScriptμ—μ„œλ„ λͺ¨λ“ˆμ„ λ§Œλ“€κ³  μ‚¬μš©ν•  수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


κΈ°λ³Έ λ‚΄μž₯ λͺ¨λ“ˆ

Node.js에 κΈ°λ³Έ ν¬ν•¨λœ λͺ¨λ“ˆμž…λ‹ˆλ‹€.

function second() {
  console.log('λ‘λ²ˆμ§Έ');
}

setTimeout(second, 3000); // 3초 λ’€, λ‘λ²ˆμ§Έ 좜λ ₯

μ™ΈλΆ€ λͺ¨λ“ˆ(라이브러리)

μΆ”κ°€μ μœΌλ‘œ μ„€μΉ˜ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλŠ” λͺ¨λ“ˆμž…λ‹ˆλ‹€.

라이브러리
πŸ“š λ„μ„œκ΄€κ³Ό λΉ„μŠ·ν•œ κ°œλ…μœΌλ‘œ λ„μ„œκ΄€μ—μ„œ νŠΉμ • λΆ„μ•Όμ˜ 책을 빌렀 μ‚¬μš©ν•˜λ“―μ΄, λΌμ΄λΈŒλŸ¬λ¦¬λ„ ν•„μš”ν•œ κΈ°λŠ₯을 가져와 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μž₯점: μ›ν•˜λŠ” κΈ°λŠ₯을 μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 단점: μ–΄λ–€ 라이브러리λ₯Ό 선택할지 κ³ λ―Όν•΄μ•Ό ν•˜κ³ , μ°ΎλŠ” 데 μ‹œκ°„μ΄ 걸릴 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.


라이브러리 πŸ†š ν”„λ ˆμž„μ›Œν¬

κ΅¬λΆ„λΌμ΄λΈŒλŸ¬λ¦¬ν”„λ ˆμž„μ›Œν¬
κ°œλ…νŠΉμ • κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” μ½”λ“œ λͺ¨μŒμ• ν”Œλ¦¬μΌ€μ΄μ…˜ 전체 ꡬ쑰λ₯Ό 제곡
λ°©μ‹κ°œλ°œμžκ°€ 직접 ν•„μš”ν•œ κΈ°λŠ₯을 μ„ νƒν•΄μ„œ μ‚¬μš©ν”„λ ˆμž„μ›Œν¬μ˜ ꡬ쑰에 맞좰 개발

πŸ–ΌοΈ ν”„λ ˆμž„μ›Œν¬λŠ” ν•„μš”ν•œ 라이브러리λ₯Ό 미리 ν¬ν•¨ν•˜κ³  있으며, μ •ν•΄μ§„ ν‹€ μ•ˆμ—μ„œ κ°œλ°œμ„ μ§„ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.




npm (Node Package Manager)

Node.jsμ—μ„œ μ™ΈλΆ€ λͺ¨λ“ˆ(라이브러리)을 μ„€μΉ˜ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€.

  • npm install λͺ¨λ“ˆ : npm이 μ €μž₯μ†Œμ— μ™ΈλΆ€ λͺ¨λ“ˆ μ„€μΉ˜

  • npm install λͺ¨λ“ˆλͺ… -g : λ‚΄ 컴퓨터에 μžˆλŠ” λͺ¨λ“  ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš©ν•˜λ„λ‘ κΈ€λ‘œλ²Œ μ„€μΉ˜ (μΆ”μ²œ ❌)

예제 1️⃣ : figlet μ‚¬μš©

figlet λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©΄ λ¬Έμžμ—΄μ„ μ•„μŠ€ν‚€ μ•„νŠΈλ‘œ λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ„€μΉ˜

npm이 μ €μž₯μ†Œμ— figlet λͺ¨λ“ˆμ„ μ„€μΉ˜ν•©λ‹ˆλ‹€.

npm install figlet

μ‚¬μš© 방법

var figlet = require('figlet'); 

figlet('Hello World!!', function (err, data) {
  if (err) {
    console.log('Something went wrong...');
    console.dir(err);
    return;
  }
  console.log(data);
});

require('figlet')

  • figlet λͺ¨λ“ˆμ„ 가져와 μ‚¬μš©ν•©λ‹ˆλ‹€.

πŸ’‘ μ™ΈλΆ€ λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ €λ©΄ npm install둜 μ„€μΉ˜ν•œ ν›„ require()둜 λΆˆλŸ¬μ™€μ•Ό ν•©λ‹ˆλ‹€.


figlet('Hello World!!', function (err, data) {...})

  • 첫 번째 λ§€κ°œλ³€μˆ˜: λ³€ν™˜ν•  λ¬Έμžμ—΄μ„ λ‹΄μŠ΅λ‹ˆλ‹€.

  • 두 번째 λ§€κ°œλ³€μˆ˜: λ³€ν™˜ ν›„ μ‹€ν–‰ν•  ν•¨μˆ˜ (콜백 ν•¨μˆ˜)λ₯Ό λ‹΄μŠ΅λ‹ˆλ‹€.

  • err : μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄ err에 μ—λŸ¬ 정보가 λ‹΄κΉλ‹ˆλ‹€.

  • data : λ³€ν™˜λœ μ•„μŠ€ν‚€ μ•„νŠΈκ°€ λ‹΄κΉλ‹ˆλ‹€.

πŸ“žμ½œλ°± ν•¨μˆ˜κ°€ μ‚¬μš©λœ 이유

  • figlet은 비동기 ν•¨μˆ˜μ΄λ―€λ‘œ λ³€ν™˜μ΄ λλ‚˜λ©΄ μžλ™μœΌλ‘œ 콜백 ν•¨μˆ˜κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.
  • figlet을 λ§Œλ“  κ°œλ°œμžκ°€ 콜백 ν•¨μˆ˜ λ°©μ‹μœΌλ‘œ μž‘λ™ν•˜λ„λ‘ μ„€κ³„ν–ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

좜λ ₯ κ²°κ³Ό


μ‚­μ œ

npm uninstall figlet



예제2️⃣ : http λͺ¨λ“ˆ λŒμ•„λ³΄κΈ°

let http = require('http');

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

http.createServer(onRequest).listen(8888);
  • require('http') ν•¨μˆ˜λ‘œ http λͺ¨λ“ˆμ„ 가져와 μ‚¬μš©ν•©λ‹ˆλ‹€.

  • createServer ν•¨μˆ˜μ—μ„œ μš”μ²­μ„ μ²˜λ¦¬ν•œ ν›„ onRequest 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.




🧐 였늘의 발견

npm이 λ‹¨μˆœνžˆ 라이브러리λ₯Ό μ„€μΉ˜ν•˜λŠ” 도ꡬ가 μ•„λ‹ˆλΌ, ν”„λ‘œμ νŠΈμ˜ 버전 κ΄€λ¦¬κΉŒμ§€ μ²΄κ³„μ μœΌλ‘œ λ„μ™€μ€€λ‹€λŠ” κ±Έ κΉ¨λ‹¬μ•˜μŠ΅λ‹ˆλ‹€.

  • Node.js κΈ°λ³Έ μƒνƒœκ³„

    • npm install을 ν•˜λ©΄ node_modules, package.json, package-lock.json μƒμ„±ν•©λ‹ˆλ‹€.

      • package.json : ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” νŒ¨ν‚€μ§€ 섀정을 κ΄€λ¦¬ν•˜λŠ” 파일둜 "dependencies"에 ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” 라이브러리λ₯Ό λͺ…μ‹œν•˜κ²Œ λ©λ‹ˆλ‹€.

      • package-lock.json : package.json의 세뢀적인 버전 정보λ₯Ό μž κΈˆν•˜μ—¬ 보μž₯ν•˜λŠ” νŒŒμΌμž…λ‹ˆλ‹€.

      • node_modules : npm을 μ‚¬μš©ν•˜μ—¬ μ„€μΉ˜ν•œ νŒ¨ν‚€μ§€λ“€μ΄ μ €μž₯λ˜λŠ” ν΄λ”μž…λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ ꡬ쑰
πŸ“‚ my-project/
β”œβ”€β”€ πŸ“‚ node_modules/
β”‚ β”œβ”€β”€ πŸ“‚ express/
β”‚ β”‚ β”œβ”€β”€ πŸ“„ package.json
β”‚ β”‚ β”œβ”€β”€ πŸ“„ index.js
β”‚ β”‚ └── πŸ“ ... (λ‚΄λΆ€ 폴더)
β”‚ └── πŸ“ ... (기타 νŒ¨ν‚€μ§€)
β”œβ”€β”€ πŸ“„ package.json
β”œβ”€β”€ πŸ“„ package-lock.json
└── πŸ“„ index.js




πŸ–‹οΈ ν•œ 쀄 회고

npm으둜 λ‹€μ–‘ν•œ λͺ¨λ“ˆμ„ 직접 μ‚¬μš©ν•΄λ³΄λ©° 더 μ—°μŠ΅ν•΄μ•Όκ² λ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€!πŸ”₯

profile
🌱개발 기둝μž₯

0개의 λŒ“κΈ€