์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[Node.js] 1์žฅ ๋…ธ๋“œ ์‹œ์ž‘ํ•˜๊ธฐ

22-23/22-23 Node.js

by Kimpeep 2022. 9. 19. 19:00

๋ณธ๋ฌธ

728x90

๐Ÿ” Node.js๋Š” Chorme V8 Javascript ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ Javascript ๋Ÿฐํƒ€์ž„์ด๋‹ค.

๋…ธ๋“œ๋Š” ์ „๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€๋งŒ, Javascript ๋Ÿฐํƒ€์ž„์œผ๋กœ์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์„œ๋ฒ„์™€ ๋Ÿฐํƒ€์ž„์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ผ๊นŒ?

๐Ÿ“Œ ์„œ๋ฒ„

ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์—์„œ ์ž…๋ ฅ ํ›„, ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ๋‚ด๋ ค๋ฐ›๊ธฐ, ์ฆ‰ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ €์žฅํ•˜๊ณ , ์ „์†กํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ์ฆ‰ ์„œ๋ฒ„์ด๋‹ค.

๐Ÿ“Œ ๋Ÿฐํƒ€์ž„

ํŠน์ • ์–ธ์–ด๋กœ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋œปํ•œ๋‹ค.

์ฆ‰, ๋…ธ๋“œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰๊ธฐ๋ผ๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

 

๐Ÿ” libuv ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ฐ ๋…ผ๋ธ”๋กœํ‚น I/O ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

๐Ÿ“Œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜

์ด๋ฒคํŠธ (ํด๋ฆญ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ ๋“ฑ) ๋ฐœ์ƒ ์‹œ, ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด ๋‘” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์ „์— ๋“ฑ๋กํ•ด ๋‘๊ณ , ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ๋ฆฌ์Šค๋„ˆ์— ์žˆ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

โœ… ์ด๋ฒคํŠธ ๋ฃจํ”„

์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๊ฐ€ ๋™์‹œ์— ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์–ด๋–ค ์ˆœ์„œ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ• ์ง€ ํŒ๋‹จํ•˜๋Š” ์—ญํ• 

FILO ์ˆœ์„œ๋กœ ์‹คํ–‰์ด ๋˜๋ฉฐ, ๋…ธ๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•˜๊ธฐ์— ๋ฃจํ”„(Loop)๋ผ๊ณ ๋„ ๋ถ€๋ฆ„

 

๐Ÿ“Œ ๋…ผ๋ธ”๋กœํ‚น I/O ๋ชจ๋ธ

 I/O == Input, Output, ์ž…๋ ฅ/์ถœ๋ ฅ์„ ์˜๋ฏธํ•˜๋ฉฐ, ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ (ํŒŒ์ผ ์ฝ๊ธฐ, ์“ฐ๊ธฐ, ํด๋” ๋งŒ๋“ค๊ธฐ ๋“ฑ)  ๋˜๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•œ ์š”์ฒญ ๋“ฑ์ด I/O์˜ ์ผ์ข…์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

๋…ผ๋ธ”๋กœํ‚น I/O ๋ชจ๋ธ์€ ์ด์ „ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ , ๋ฐ”๋กœ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

โœ… ๋ธ”๋กœํ‚น ๋ชจ๋ธ

์ด์ „ ์ž‘์—…์ด ๋๋‚˜์•ผ์ง€๋งŒ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ

 

๋…ผ๋ธ”๋กœํ‚น์€ ๋ธ”๋กœํ‚น์— ๋น„ํ•ด ์ž‘์—… ์‹œ๊ฐ„๋„ ๋‹จ์ถ•๋˜๋ฉฐ, ์ด์— ๋”ฐ๋ผ ์„ฑ๋Šฅ๋„ ํฌ๊ฒŒ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. 

I/O ์ž‘์—…์ด ์—†๋”๋ผ๋„, ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์คŒ์œผ๋กœ์จ ์ž‘์—… ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

๋”๋ถˆ์–ด, ๋…ผ๋ธ”๋กœํ‚น๊ณผ ๋™์‹œ๋Š” ๋‹ค๋ฅธ ์˜๋ฏธ์ด๋‹ค. 

โœ… ๋™์‹œ์„ฑ

๋™์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ž‘์—…์„ ๋…ผ ๋ธ”๋กœํ‚น ์ฒ˜๋ฆฌํ•ด์•ผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

 

๐Ÿ“Œ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ž€?

์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜๋ฟ์ด๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์—†๋Š” ์ด์œ ์ด๊ธฐ๋„ ํ•˜๋‹ค.

โœ… ํ”„๋กœ์„ธ์Šค VS ์Šค๋ ˆ๋“œ

ํ”„๋กœ์„ธ์Šค : ์šด์˜์ฒด์ œ์—์„œ ํ• ๋‹นํ•˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„๋กœ, ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์˜ ์ž์›์„ ๊ณต์œ ํ•˜์ง€ ์•Š์Œ

์Šค๋ ˆ๋“œ : ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ํ๋ฆ„์˜ ๋‹จ์œ„๋กœ, ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ™์€ ์ฃผ์†Œ์˜ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด, ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Œ

 

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

์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋Š” ์ ์› ํ•˜๋‚˜๊ฐ€ ํ˜ผ์ž์„œ ๋งŽ์€ ์ผ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, CPU๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—… ๋˜๋Š” ์ ์›์ด ์•„ํ”„๊ฒŒ ๋  ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. 

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์— ๋น„ํ•ด ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ๋Š๊ปด์งˆ ์ˆ˜ ์žˆ์œผ๋‚˜, ์‹ค์ œ๋กœ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์šฐ๋ฏ€๋กœ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ ๋ฐฉ์‹์„ ๋Œ€์‹  ์‚ฌ์šฉํ•œ๋‹ค.

 

โœ… ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ VS ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ
ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ ์‚ฌ์šฉ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค ์‚ฌ์šฉ
CPU ์ž‘์—…์ด ๋งŽ์„ ๋•Œ ์‚ฌ์šฉ I/O ์š”์ฒญ์ด ๋งŽ์„ ๋•Œ ์‚ฌ์šฉ
ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์–ด๋ ค์›€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋น„๊ต์  ์‰ฌ์›€

๐Ÿ” Node.js๊ฐ€ ์„œ๋ฒ„๊ฐ€ ๋œ๋‹ค๋ฉด?

์„œ๋ฒ„์—๋Š” I/O ์š”์ฒญ์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๊ธฐ์—, I/O ์ž‘์—…์„ ๋…ผ๋ธ”๋กœํ‚น ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์žฅ์ ์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜  CPU ๋ถ€ํ•˜๊ฐ€ ํฐ ์ž‘์—…์œผ๋กœ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๊ธฐ์—, ๊ฐœ์ˆ˜๋Š” ๋งŽ์ง€๋งŒ ํฌ๊ธฐ๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐ์— ์ ํ•ฉํ•˜๋‹ค.

์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…, ์ฃผ์‹ ์ฐจํŠธ, JSON ๋ฐ์ดํ„ฐ ์ œ๊ณต API ์„œ๋ฒ„ ๋“ฑ์—์„œ ๋…ธ๋“œ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

 

๋…ธ๋“œ๋Š” ์›น ์„œ๋ฒ„๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด, WAS๋ฅผ ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์œผ๋ฉฐ, ์ž๋ฐ”์Šผํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•˜๋‚˜๋กœ ๋ชจ๋“  ์›น ์‚ฌ์ดํŠธ๋ฅผ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ” Node.js๋ฅผ ์„œ๋ฒ„ ์™ธ์˜ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•ด ๋ณด์ž

์•ž์„œ ์ด์•ผ๊ธฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ, ๋…ธ๋“œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„์ด๊ธฐ์— ์„œ๋ฒ„ ์™ธ๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์›น ํ”„๋ ˆ์ž„์›Œํฌ์ธ ์•ต๊ทค๋Ÿฌ, ๋ฆฌ์•กํŠธ, ๋ทฐ ๋“ฑ์ด ๋…ธ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,

๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ ๋„๊ตฌ์ธ ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ, ๋ฐ์Šคํฌํ†ฑ ๊ฐœ๋ฐœ ๋„๊ตฌ์ธ ์ผ๋ ‰ํŠธ๋ก ๋„ ๋…ธ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋‹ค.

 

๐Ÿ” Node.js์™€ ๊ด€๋ จ๋œ ์ž๋ฃŒ ๋ชจ์Œ.zip

๋…ธ๋“œ ๊ณต์‹ ์‚ฌ์ดํŠธ : https://nodejs.org/ko/

 

Node.js

Node.jsยฎ is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

๋…ธ๋“œ ๊ณต์‹ ๊ฐ€์ด๋“œ : https://nodejs.org/ko/docs/guides/

 

๊ฐ€์ด๋“œ | Node.js

Node.jsยฎ is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

 


Node.js 

Editor : PeeP 

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ