๐Ÿ’ป/์›น

[Javascript] ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ, ๋„Œ-๋ธ”๋กœํ‚น)

ruhz 2022. 7. 11. 14:38

 

Javascript๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ(Single Thread)์™€ ๋„Œ-๋ธ”๋กœํ‚น(Non-Blocking)์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์–ผํ• ๋ณด๋ฉด ์ด ๋‘๊ฐ€์ง€ ํŠน์„ฑ์€ ์–‘๋ฆฝ ๋ถˆ๊ฐ€๋Šฅํ•ด๋ณด์ธ๋‹ค.

"์–ด๋–ป๊ฒŒ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ผ์„ ํ•  ์ˆ˜ ์—†์œผ๋ฉด์„œ, ํ•˜๋‚˜์˜ ์ผ์ด ๋๋‚  ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€?"

 

๋‹ต์€ JS ์—”์ง„๊ณผ ๋ธŒ๋ผ์šฐ์ €์˜ ๋™์ž‘ ๊ตฌ์กฐ์— ์žˆ๋‹ค.

 

 

JS ์—”์ง„ ์ž์ฒด๋Š” ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ๋กœ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ์นœ๊ตฌ๋‹ค.

 

๊ณ ๋ง™๊ฒŒ๋„ ์ด ๋‹จ์ˆœํ•œ ์นœ๊ตฌ๋ฅผ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ Web API๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

 

JS ์—”์ง„์€ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์ผ์„ Web API์— ์š”์ฒญํ•ด ๋†“๊ณ , ๋ณธ์ธ์ด ๋Š˜ ํ•˜๋˜๋Œ€๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ๋งŒ ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Web API๋Š” ๋ณธ์ธ์ด ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ Callback Queue์— ๋„ฃ์–ด์ค€๋‹ค. Callback Queue์— ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋„์ฐฉํ•˜๋ฉด, Event Loop์ด JS ์—”์ง„์—๊ฒŒ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚ฌ์Œ์„ ์•Œ๋ฆฐ๋‹ค. JS ์—”์ง„์€ ์ž ๊น ํ•˜๋˜ ์ผ์„ ๋ฉˆ์ถ”๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ๋“ ๋‹ค. 

 

ํ•œ ๋งˆ๋””๋กœ ์š”์•ฝํ•˜์ž๋ฉด, ๋‚˜๋Š” ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ๋ผ ํ•˜๋‚˜ ๋ฐ–์— ๋ชป๋ณด๋‹ˆ๊นŒ ์™ธ์ฃผ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฑด ์™ธ์ฃผ ์ฃผ๊ณ , ํƒ๋ฐฐํ•จ์— ๋†“๊ณ  ๊ฐ€๋ผ๊ณ  ํ•˜์ž. ๋‚ด๊ฐ€ ์•Œ์•„์„œ ์“ธํ…Œ๋‹ˆ๊นŒ! ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๋Œ€์‹  ์™ธ์ฃผ๋ฅผ ์ค€ ์ž‘์—…์€ ์ฃผ์ฒด๊ฐ€ ์ž์‹ ์ด ์•„๋‹ˆ๊ณ , ํƒ๋ฐฐํ•จ์— ๋†“๊ณ  ๊ฐ€๋Š” ํ˜•์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ํ•œ ์ค„ ํ•œ ์ค„ ์‹คํ–‰๋˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ์‹คํ–‰ ์‹œ๊ธฐ๋ฅผ ๋งž์ถœ ์ˆœ ์—†๋‹ค.

 

์œ„ ์ฒ˜๋Ÿผ ์‹คํ–‰ ์‹œ๊ธฐ๋ฅผ ๊ผญ ๋งž์ถ”์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ '๋น„๋™๊ธฐ์ '์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

์–„ํŒํ•œ ์ฝ”๋”ฉ ์‚ฌ์ „ : ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ