Server๐Ÿงค/Node.JS

[Node.js] ์ด๋ฒคํŠธ๊ธฐ๋ฐ˜

yujindonut 2022. 10. 3. 23:45
728x90

๋…ธ๋“œ๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๋ผ๋Š” ๋ง์„ ๋งŽ์ด ๋“ฃ๋Š”๋‹ค! ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜! ๊ทธ๊ฒŒ ๋Œ€์ฒด ๋ญก๋‹ˆ๊นŒ!

 

์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ (event-driven)

์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ (event-driven)์ด๋ž€, ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด๋‘” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

์˜ˆ ) ํด๋ฆญ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ

 

์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์— ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋“ฑ๋ก? 

์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์—์„œ๋Š” ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ, ๋ฌด์—‡์„ ํ• ์ง€ ๋ฏธ๋ฆฌ ๋“ฑ๋กํ•ด ๋‘”๋‹ค.

 

์˜ˆ) ๋ฒ„ํŠผ์„ ํด๋ฆญํ• ๋•Œ ๊ฒฝ๊ณ ์ฐฝ์„ ๋„์šฐ๋„๋ก ์„ค์ •

ํด๋ฆญ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์— ๊ฒฝ๊ณ ์ฐฝ์„ ๋„์šฐ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋“ฑ๋กํ•˜๋ฉด, ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด ๊ฒฝ๊ณ ์ฐฝ์ด ๋œฌ๋‹ค.


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

๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๊ฐ€ ์—†๊ฑฐ๋‚˜, ์ด๋ฒคํŠธ๋ฅผ ๋‹ค ์ฒ˜๋ฆฌํ•˜๋ฉด, ๋…ธ๋“œ๋Š” ๋‹ค์Œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค.

์ด๋ฒคํŠธ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ์—๋Š”? ์–ด๋–ค ์ˆœ์„œ๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ• ์ง€๋Š”  '์ด๋ฒคํŠธ ๋ฃจํ”„'๊ฐ€ ํŒ๋‹จํ•œ๋‹ค!

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

: ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ํ˜ธ์ถœํ•œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋“ค์„ ๊ด€๋ฆฌํ•˜๊ณ , ํ˜ธ์ถœ๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค. ๋…ธ๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•˜๋ฏ€๋กœ '๋ฃจํ”„'

 

๋ฐฑ๊ทธ๋ผ์šด๋“œ

: setTimeout๊ฐ™์€ ํƒ€์ด๋จธ๋‚˜ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋“ค์ด ๋Œ€๊ธฐํ•˜๋Š” ๊ณณ. ์—ฌ๋Ÿฌ ์ž‘์—…์ด ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

 

ํƒœ์ŠคํŠธ ํ (์ฝœ๋ฐฑ ํ)

: ์ด๋ฒคํŠธ ๋ฐœ์ƒ ํ›„, ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋Š” ํƒœ์Šคํฌ ํ๋กœ ํƒ€์ด๋จธ๋‚˜ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋ณด๋‚ธ๋‹ค. ์ •ํ•ด์ง„ ์ˆœ์„œ๋Œ€๋กœ ์ฝœ๋ฐฑ๋“ค์ด ์ค„์„ ์„œ์žˆ๋Š”๋‹ค. ์ฝœ๋ฐฑ๋“ค์€ ์™„๋ฃŒ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์„œ์žˆ์ง€๋งŒ, ํŠน์ •ํ•œ ๊ฒฝ์šฐ์—๋Š” ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๊ธฐ๋„ ํ•œ๋‹ค.

 


์ด๋ฒคํŠธ ๋ฐœ์ƒ ์ˆœ์„œ

function run() {
	console.log('3์ดˆ ํ›„ ์‹คํ–‰');
}
console.log('์‹œ์ž‘');
setTimeout(run, 3000);
console.log('๋');

1. ์ „์—ญ์ปจํ…์ŠคํŠธ์ธ anonymous๊ฐ€ ํ˜ธ์ถœ์Šคํƒ์— ๋“ค์–ด๊ฐ. 

2. setTimeout()์ด ํ˜ธ์ถœ ์Šคํƒ์— ๋“ค์–ด๊ฐ

3. setTimeout()์ด ๋จผ์ € ์‹คํ–‰. ํƒ€์ด๋จธ์™€ ํ•จ๊ป˜ run ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ๋ณด๋‚ด๊ณ , setTimeout()์€ ํ˜ธ์ถœ์Šคํƒ์—์„œ ๋น ์ง„๋‹ค.

4. anonymous๊ฐ€ ํ˜ธ์ถœ์Šคํƒ์—์„œ ๋น ์ง„๋‹ค.

5. ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋Š” 3์ดˆ๋ฅผ ์„ธ๊ณ  run ํ•จ์ˆ˜๋ฅผ ํƒœ์Šคํฌ ํ์— ๋ณด๋‚ธ๋‹ค.

6. ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด ํƒœ์Šคํฌ ํ์—์„œ ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์™€ ํ˜ธ์ถœ ์Šคํƒ์— ๋„ฃ๊ณ  ์‹คํ–‰ํ•œ๋‹ค.

์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ run ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํƒœ์Šคํฌ ํ์—์„œ ๊บผ๋‚ด ํ˜ธ์ถœ ์Šคํƒ์œผ๋กœ ์˜ฌ๋ฆฐ๋‹ค.

7. ํ˜ธ์ถœ ์Šคํƒ์œผ๋กœ ์˜ฌ๋ ค์ง„ run์€ ์‹คํ–‰๋˜๊ณ , ์‹คํ–‰ ์™„๋ฃŒ ํ›„ ํ˜ธ์ถœ ์Šคํƒ์—์„œ ๋น„์›Œ์ง„๋‹ค.

8. ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ํƒœ๊ทธ์Šค ํ์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋Œ€๊ธฐํ•œ๋‹ค.

 

 

โœ…  ์ด ๋•Œ๋ฌธ์—, setTimeout์ด ์ •ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค!

๋งŒ์•ฝ, ํ˜ธ์ถœ ์Šคํƒ์— ํ•จ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ๋“ค์–ด ์žˆ์œผ๋ฉด, 3์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„์—๋„ run ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด ์žˆ์„ ๋•Œ๋งŒ ํƒœ์Šคํฌ ํ์— ์žˆ๋Š” runํ•จ์ˆ˜๋ฅผ ์Šคํƒ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ! 

 

- anonymousํ•จ์ˆ˜ : ์ฒ˜์Œ ์‹คํ–‰ ์‹œ์˜ ์ „์—ญ ์ปจํ…์ŠคํŠธ(global context)๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

- ์ปจํ…์ŠคํŠธ: ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์„๋•Œ, ์ƒ์„ฑ๋˜๋Š” ํ™˜๊ฒฝ์„ ์˜๋ฏธ.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋Š” ์‹คํ–‰์‹œ ๊ธฐ๋ณธ์œผ๋กœ ์ „์—ญ ์ปจํ…์ŠคํŠธ ์•ˆ์—์„œ ์‹คํ–‰๋œ๋‹ค.

 


์ถœ์ฒ˜

๋”๋ณด๊ธฐ

Node.js๊ต๊ณผ์„œ

SOPT 31๊ธฐ ServerํŒŒํŠธ

 

728x90