๋ฆฌ์•กํŠธ

Node.JS

Irene1988 2025. 4. 19. 15:41

๐Ÿง  Node.js๋ž€?

Node.js =

"JavaScript๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹ˆ๋ผ ์„œ๋ฒ„์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ๊ธฐ์ˆ "
(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ)

ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์ •๋ฆฌํ•˜๋ฉด: โœ… Node.js๋Š” ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋Œ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์—”์ง„

 

๐ŸŽฏ Node.js๋ฅผ ์™œ ๋งŒ๋“ค์—ˆ์„๊นŒ?

์›๋ž˜ JavaScript๋Š”

  • ์˜ค์ง ๋ธŒ๋ผ์šฐ์ € ์•ˆ์—์„œ๋งŒ ์ž‘๋™ํ–ˆ๋‹ค.
  • ์›นํŽ˜์ด์ง€์— ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ๋™์ž‘์„ ์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋งŒ ์‚ฌ์šฉ.

๊ทธ๋Ÿฐ๋ฐ ์‚ฌ๋žŒ๋“ค์ด ์ƒ๊ฐํ•œ ๊ฑฐ์•ผ:

"์–ด? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด๋ ‡๊ฒŒ ๋น ๋ฅด๊ณ  ํŽธํ•œ๋ฐ,
๋ธŒ๋ผ์šฐ์ € ๋ง๊ณ  ์„œ๋ฒ„์—์„œ๋„ ์“ธ ์ˆ˜ ์žˆ์œผ๋ฉด ๊ฐœ๊ฟ€ ์•„๋ƒ?"

๊ทธ๋ž˜์„œ ๋‚˜์˜จ ๊ฒŒ Node.js์•ผ.

 

๐Ÿ”ฅ Node.js์˜ ํŠน์ง•

ํŠน์ง• ์„ค๋ช…
๋น„๋™๊ธฐ & ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์š”์ฒญ์ด ๋“ค์–ด์™€๋„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , ๋ฐ”๋กœ ๋‹ค์Œ ์ž‘์—… ์‹คํ–‰
์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘ (๊ฐ€๋ณ๊ณ  ๋น ๋ฆ„)
๋น ๋ฅธ ์†๋„ V8 ์—”์ง„(Chrome์— ํƒ‘์žฌ๋œ ์ดˆ๊ณ ์† JS ์—”์ง„) ์‚ฌ์šฉ
ํฌ๋กœ์Šค ํ”Œ๋žซํผ Windows, Linux, macOS ์–ด๋””์„œ๋‚˜ ์‹คํ–‰ ๊ฐ€๋Šฅ
npm ์ƒํƒœ๊ณ„ ์ˆ˜๋งŽ์€ ์˜คํ”ˆ์†Œ์Šค ํŒจํ‚ค์ง€๋“ค์„ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ์Œ

 

๐Ÿ“š Node.js ํ๋ฆ„ ์ดํ•ด (์—„์ฒญ ์‰ฝ๊ฒŒ!)

Node.js ๋™์ž‘๋ฐฉ์‹์€ "์ „ํ™”๊ธฐ + ์•Œ๋žŒ์‹œ๊ณ„" ๋ชจ๋ธ๋กœ ์ดํ•ดํ•˜๋ฉด ๋ผ.

  1. ๋ˆ„๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ (์ „ํ™”๊ฐ€ ์˜จ๋‹ค๊ณ  ์ƒ๊ฐํ•ด)
  2. Node.js๊ฐ€ "์‘ ์•Œ๊ฒ ์–ด!" ํ•˜๊ณ  ์ฒ˜๋ฆฌ ์˜ˆ์•ฝ๋งŒ ํ•ด
  3. ๋‹ค์Œ ์š”์ฒญ ๋ฐ”๋กœ ๋ฐ›์œผ๋Ÿฌ ๊ฐ (์ „ํ™”๋ฅผ ๋Š์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋„˜์–ด๊ฐ)
  4. ์˜ˆ์•ฝํ•ด๋‘” ์ž‘์—…(์˜ˆ: ํŒŒ์ผ ์ฝ๊ธฐ, DB ์กฐํšŒ)์ด ์™„๋ฃŒ๋˜๋ฉด
  5. "๋ ๋ง!" ํ•˜๊ณ  ์•Œ๋žŒ์ฒ˜๋Ÿผ ์™„๋ฃŒ ๋ฉ”์‹œ์ง€ ๋ฐ›์Œ → ๊ฒฐ๊ณผ ์ „์†ก

๐Ÿ“ข ์ฆ‰,
"๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์˜ˆ์•ฝ → ๊ฒฐ๊ณผ ๋‚˜์˜ค๋ฉด ์•Œ๋žŒ ๋ฐ›๊ธฐ"
์ด๊ฒŒ Node.js ์Šคํƒ€์ผ์ด์•ผ.

๐Ÿ‘‰ ์ด๋Ÿฐ ๊ฑธ "๋น„๋™๊ธฐ(Asynchronous) ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜(Event-driven)" ์ด๋ผ๊ณ  ํ•ด.

 

๐Ÿ› ๏ธ Node.js ์ฃผ์š” ์‚ฌ์šฉ์ฒ˜

์‚ฌ์šฉ์ฒ˜ ์˜ˆ์‹œ
API ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ ๋กœ๊ทธ์ธ, ๋ฐ์ดํ„ฐ ์กฐํšŒ ์„œ๋ฒ„
์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฑ„ํŒ…์•ฑ, ๊ฒŒ์ž„ ์„œ๋ฒ„
ํŒŒ์ผ ์ฒ˜๋ฆฌ ์„œ๋ฒ„ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ/๋‹ค์šด๋กœ๋“œ
์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„ ์œ ํŠœ๋ธŒ ๊ฐ™์€ ์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ
CLI ํˆด ๋งŒ๋“ค๊ธฐ ํ„ฐ๋ฏธ๋„ ๋ช…๋ น์–ด ํ”„๋กœ๊ทธ๋žจ (npm, eslint ๊ฐ™์€ ๊ฒƒ)

 

๐Ÿ› ๏ธ Node.js๋กœ ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ ์˜ˆ์ œ

// 1. http ๋ชจ๋“ˆ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
const http = require('http');

// 2. ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ
const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' }); // ์‘๋‹ต ํ—ค๋”
  res.end('Hello Node.js World!\n'); // ์‘๋‹ต ๋ณธ๋ฌธ
});

// 3. ์„œ๋ฒ„ ๋ฆฌ์Šค๋‹ ์‹œ์ž‘ (ํฌํŠธ 3000)
server.listen(3000, () => {
  console.log('์„œ๋ฒ„๊ฐ€ 3000๋ฒˆ ํฌํŠธ์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.');
});

์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด → ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3000 ์ ‘์†ํ•˜๋ฉด "Hello Node.js World!" ๋ผ๊ณ  ๋œฌ๋‹ค!

 

๐Ÿงฉ Node.js์˜ ๋‚ด๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ (์ข€ ๋” ์‹ฌํ™”)

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
V8 ์—”์ง„ Google Chrome์— ๋“ค์–ด๊ฐ€๋Š” ์ดˆ๊ณ ์† ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„
libuv ๋น„๋™๊ธฐ ์ž…์ถœ๋ ฅ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
์ด๋ฒคํŠธ ๋ฃจํ”„ ์š”์ฒญ์„ ํ์— ๋„ฃ๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ˜๋ณต ์žฅ์น˜
๋‚ด์žฅ ๋ชจ๋“ˆ http, fs, path ๋“ฑ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ๋“ค
npm ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž (ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ ๊ฐ€๋Šฅ)

 

๐Ÿ“ข ํ•œ๋ˆˆ์— ์š”์•ฝ

  • Node.js๋Š” "๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์„œ๋ฒ„ ๊ธฐ์ˆ "
  • ๋น ๋ฅด๊ณ  ๋น„๋™๊ธฐ์ (Non-Blocking)
  • ์„œ๋ฒ„ ๊ฐœ๋ฐœ, ์‹ค์‹œ๊ฐ„ ์„œ๋น„์Šค ๋“ฑ์— ๊ฐ•๋ ฅ
  • npm์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์›
  • ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋กœ ์ˆ˜๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

๐ŸŒŸ Node.js๋ฅผ ๊ณต๋ถ€ํ•  ๋•Œ ์ค‘์š”ํ•œ ํฌ์ธํŠธ

โœ… ๋น„๋™๊ธฐ / ๋™๊ธฐ ์ฐจ์ด ์ดํ•ดํ•˜๊ธฐ
โœ… ์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop) ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ
โœ… Express.js ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐฐ์šฐ๊ธฐ (์„œ๋ฒ„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๋ ค๊ณ )
โœ… npm ์‚ฌ์šฉ๋ฒ• ์ตํžˆ๊ธฐ
โœ… REST API ๊ธฐ๋ณธ ๊ฐœ๋… ์•Œ๊ธฐ
โœ… JWT ๊ฐ™์€ ์ธ์ฆ ๋ฐฉ์‹ ์ดํ•ดํ•˜๊ธฐ (๋„ค๊ฐ€ ํ•˜๊ณ  ์‹ถ์€ ๊ฑฐ๋ž‘ ์—ฐ๊ด€๋ผ!)

 

๐Ÿงก ์ถ”๊ฐ€๋กœ

  • ๋‚˜์ค‘์— Node.js + Express๋กœ ๋กœ๊ทธ์ธ API ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ด
  • ๊ทธ๋ฆฌ๊ณ  Next.js ์•ˆ์—์„œ๋„ Node.js ์ฝ”๋“œ๊ฐ€ ๋ถ€๋ถ„์ ์œผ๋กœ ์“ฐ์—ฌ (์˜ˆ: API Routes)

๐Ÿ”ฅ ํ•œ์ค„ ์š”์•ฝ
"Node.js๋Š” ์„œ๋ฒ„์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋Œ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ์Šˆํผ ํŒŒ์›Œ ์—”์ง„"
(๊ทธ๋ฆฌ๊ณ  ๋„ˆ๋Š” ์ด๊ฑธ ๊ฐ€์ง€๊ณ  ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฑฐ์•ผ!)

'๋ฆฌ์•กํŠธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

axios VS fetch ๋น„๊ต์™€ ์ฐจ์ด  (1) 2025.04.20
styled-components๋ž€?  (1) 2025.04.20
useCallback vs useMemo ๊ฐœ๋…  (0) 2025.04.18