๊ฐœ๋ฐœ ๊ณต๋ถ€/์›น ์ง€์‹ ์ฐฝ๊ณ 

Node.js ๊ตฌ์กฐ์™€ ๋™์ž‘์›๋ฆฌ

๊ฐ€์šค์ด 2024. 11. 14. 11:09

Node.js

Node.js® is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.

 

Node.js๋Š” ๋ฌด๋ฃŒ ์˜คํ”ˆ์†Œ์Šค ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋ฉฐ, ๊ฐœ๋ฐœ์ž๋“ค์ด ์„œ๋ฒ„, ์›น์•ฑ, ๋ช…๋ น์ค„ ๋„๊ตฌ, ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ์กด์— ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ๋™์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ์—๋งŒ ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์ด ์„œ๋ฒ„ ์ธก์—์„œ๋„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ ํŒ๋‹จ๋˜์–ด ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋„๋ก Node.js๋ž€ ๋Ÿฐํƒ€์ž„์ด ์ƒ๊ฒจ๋‚ฌ๋‹ค.

 

Node.js ํŠน์ง•

  • Google์˜ V8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ์‚ฌ์šฉ
  • ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜
  • ๋…ผ ๋ธ”๋กœํ‚น (๋น„๋™๊ธฐ I/O)

 

์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์˜ Node.js

์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ž€, ํ”„๋กœ์„ธ์Šค์—์„œ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์š”์ฒญ๋งŒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

* ํ”„๋กœ์„ธ์Šค: ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์˜ ์ธ์Šคํ„ด์Šค (ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜์–ด CPU์—์„œ ์‹คํ–‰๋˜๋Š” ๋‹จ์œ„)
๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ๋…๋ฆฝ์ ์ด๋ฉฐ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ์€ ๋งŽ์€ ์ž์›(๋ฉ”๋ชจ๋ฆฌ, CPU ์‹œ๊ฐ„ ๋“ฑ)์„ ์†Œ๋ชจํ•œ๋‹ค.

* ์Šค๋ ˆ๋“œ: ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์ž‘์—…์˜ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„. ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. (๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ)

 

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

 

์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ I/O

Node.js๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Libuv ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์š”์ฒญ๋“ค์„ ๋ธ”๋กœํ‚นํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ธ”๋กœํ‚น์ด๋ž€, ํŠน์ • ์ž‘์—…์„ ์™„๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ค‘์ง€ํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์ž‘์—…์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ฒŒ ๋˜์–ด ๋น„ํšจ์œจ์ ์ด๋‹ค.

 

Node.js๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„์™€ ์ฝœ๋ฐฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ๋…ผ๋ธ”๋กœํ‚น ๋ฐฉ์‹์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ–ˆ๋‹ค.

โžก๏ธ ์ด๋ฒคํŠธ ๋ฃจํ”„: ์ž‘์—…์ด ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌ๋˜๋„๋ก ๊ด€๋ฆฌํ•˜๊ณ , ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๊ด€๋ จ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰

 

๋…ผ๋ธ”๋กœํ‚น ๋ฐฉ์‹ ๋™์ž‘ ์˜ˆ์‹œ

  1. Node.js๊ฐ€ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์š”์ฒญ
  2. ์ด ์š”์ฒญ์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ(์ด๋ฒคํŠธ ๋ฃจํ”„, ์Šค๋ ˆ๋“œ ํ’€(Libuv), ๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ)์—์„œ ์ฒ˜๋ฆฌ๋˜๊ณ  Node.js๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰
  3. ๋น„๋™๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์ฝœ๋ฐฑ์„ ํ์— ์ถ”๊ฐ€
  4. Node.js๋Š” ํ˜„์žฌ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์ด๋ฒคํŠธ ๋ฃจํ”„์— ๋Œ€๊ธฐ ์ค‘์ธ ์ฝœ๋ฐฑ์„ ์‹คํ–‰

 

Node.js ๊ตฌ์กฐ

Node.js ๋‚ด๋ถ€ ๊ตฌ์กฐ

 

Libuv๋‚ด์— Thread Pool๊ณผ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด Node.js๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์˜ ์žฅ์ ์„ ํ™œ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

*๋ฐ”์ธ๋”ฉ: Node.js๋Š” ์ผ๋ถ€ ์ €์ˆ˜์ค€ ์ž‘์—… (ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ, ๋„คํŠธ์›Œํฌ ํ†ต์‹ , ์•”ํ˜ธํ™” ๋“ฑ)์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด JavaScript๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ C/C++๋กœ ์ž‘์„ฑ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ด ์„ฑ๋Šฅ์„ ์ตœ์ ํ™” ํ•จ. ์ด๋Ÿฌํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ์„ JavaScript์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜

 

Node.js ๋‹จ์ 

Node.js๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์˜ ๋น„๋™๊ธฐ ๋…ผ ๋ธ”๋กœํ‚น I/O์˜ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๋งŽ์€ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์— ๋”ฐ๋ฅธ ํ•œ๊ณ„๋„ ์กด์žฌํ•œ๋‹ค.

  • ๋ณต์žกํ•œ ์ฝ”๋“œ ๊ตฌ์กฐ: ์ฝœ๋ฐฑ ์ง€์˜ฅ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. Promise์™€ Async/await ๋„์ž…์œผ๋กœ ์ฝœ๋ฐฑ ์ง€์˜ฅ์˜ ๋ฌธ์ œ๊ฐ€ ์™„ํ™”๋˜์—ˆ์ง€๋งŒ ๋น„๋™๊ธฐ ํ๋ฆ„์„ ์ž˜ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋‹ด
  • ์ƒ๋Œ€์ ์œผ๋กœ ๋‚ฎ์€ ์„ฑ๋Šฅ: CPU๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋‹ค๋ฅธ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณต์žกํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“ˆ ๊ธฐ๋ฐ˜์˜ ๊ตฌ์กฐ๋กœ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜๊ณ  npm ํŒจํ‚ค์ง€ ์ƒํƒœ๊ณ„๋กœ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์™€ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

'๊ฐœ๋ฐœ ๊ณต๋ถ€ > ์›น ์ง€์‹ ์ฐฝ๊ณ ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

GraphQL vs Rest API  (1) 2024.11.07
JWT (JSON Web Token) ๊ฐœ๋…  (0) 2024.11.06