๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JavaScript

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ์ง€๋งŒ ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๋Š” ์ด์œ 

์šฐ์„  ๊ธ€์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ๊ฐœ๋…๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ  ๊ฐ€๋ฉด ์ข‹์„ ๋“ฏํ•˜๋‹ค. 

 

ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ ์ฐจ์ด

ํ”„๋กœ์„ธ์Šค๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ๋งํ•˜๋ฉฐ, ์Šค๋ ˆ๋“œ๋Š” ์ด ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ํ๋ฆ„ ๋‹จ์œ„๋ฅผ ๋งํ•œ๋‹ค.

 

ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ์ตœ์†Œ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ ๋ณ„๋„์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋…๋ฆฝ์ ์œผ๋กœ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. (code, data, heap, stack)

์Šค๋ ˆ๋“œ๋Š” ์ด์ค‘์— stack๋งŒ ๋”ฐ๋กœ ํ• ๋‹น๋ฐ›๊ณ  ๋‚˜๋จธ์ง€ ์˜์—ญ์€ ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ ์„œ๋กœ ๊ณต์œ ํ•œ๋‹ค.

 

ํ”„๋กœ์„ธ์Šค : ์ž์‹ ๋งŒ์˜ ๊ณ ์œ  ๊ณต๊ฐ„๊ณผ ์ž์›์„ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉ

์Šค๋ ˆ๋“œ : ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ๊ณต๊ฐ„๊ณผ ์ž์›์„ ๊ณต์œ ํ•˜๋ฉด์„œ ์‚ฌ์šฉ

 

์ฆ‰ ์Šค๋ ˆ๋“œ๋Š” ์‹คํ–‰๋˜๋Š” ํ๋ฆ„์˜ ๋‹จ์œ„์ด๋ฉฐ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์ด ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค์ค‘์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 

ํ•œ ๋ฒˆ์— ๋งŽ์€ ์ผ๋“ค์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ V8์—”์ง„์€ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์ด ๋ง์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ ํž™๊ณผ ๋‹จ์ผ ํ˜ธ์ถœ ์Šคํƒ(Call Stack)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค ๋ผ๋Š” ๋ง๊ณผ ๊ฐ™๋‹ค. 

์ฆ‰ ํ•˜๋‚˜์˜ ๋ฉ”์ธ์Šค๋ ˆ๋“œ์—์„œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋“ค์ด Call Stack์— ์Œ“์ด๊ฒŒ ๋˜๊ณ  LIFO(Last In First Out) ๋ฐฉ์‹์œผ๋กœ ํ•œ ๋ฒˆ์—

ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋งŒ ์‹คํ–‰๋œ๋‹ค.

 

๊ทธ๋Ÿผ ์ด์ œ ์–ด๋–ป๊ฒŒ ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ด๋ฃจ์–ด ์ง€๋Š”์ง€ ์•Œ์•„๋ณด์ž 

 

๋น„๋™๊ธฐ์ ? 

๋น„๋™๊ธฐ์ (Asynchronous) ์ด๋ž€, ๋จผ์ € ์‹คํ–‰๋œ ์ฝ”๋“œ์˜ ์ž‘์—…์ด ๋๋‚˜๊ธฐ ์ „์— ๋” ๋‚˜์ค‘์— ์‹คํ–‰๋œ ์ฝ”๋“œ์˜ ์ž‘์—…์ด ๋๋‚  ์ˆ˜ ์žˆ์Œ์„ ๋งํ•œ๋‹ค. ์ฆ‰, ๋™์‹œ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฝ”๋“œ๋“ค์„ ๋งํ•œ๋‹ค.

 

์™ผ์ชฝ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์—”์ง„์ด๊ณ  ๊ทธ ๋ฐ–์—  WebAPI, Callback Queue, Event Loop์™€ ๊ฐ™์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋™์ž‘์— ๊ด€์—ฌํ•˜๋Š” ๊ฒƒ๋“ค์ด ์กด์žฌํ•œ๋‹ค

 

Web API

Web API๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” API์ด๋ฉฐ, Ajax, Timeout ๋“ฑ ๋น„๋™๊ธฐ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค. 

SetTimeOut์„ ์˜ˆ๋กœ๋“ค์–ด ๋™์ž‘์„ ์„ค๋ช…ํ•˜๋ฉด,

Callback์— SetTimeOut์„ ์‹คํ–‰ํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด Web API์—๊ฒŒ SetTimeOut ํ•จ์ˆ˜๋ฅผ ์š”์ฒญํ•˜๊ฒŒ ๋˜๊ณ  

๊ฐ™์ด ํ˜ธ์ถœ๋œ ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” Callback Queue ์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ์ดํ›„ EventLoop๊ฐ€ Call Stack์ด ๋น„์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๋ฉด 

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ Call Stack์— ๋„ฃ์–ด ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

Callback Queue

 

๋น„๋™๊ธฐ๋กœ ์‹คํ–‰๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋“ค์ด Call Stack์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ๋Œ€๊ธฐํ•˜๋Š” ๋Œ€๊ธฐ๊ณต๊ฐ„์ด๋ผ๊ณ  ๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

Call Stack์— ์‹คํ–‰์ค‘์ธ ์ž‘์—…์ด ์กด์žฌํ•˜๋Š”์ง€ Event Loop๊ฐ€ ํŒ๋‹จํ•˜๊ณ  ๋น„์–ด์žˆ๋‹ค๋ฉด Call Stack์œผ๋กœ 

์ˆœ์„œ๋Œ€๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. 

  • Queue(ํ) : ์ž๋ฃŒ๊ตฌ์กฐ์ค‘ ํ•˜๋‚˜๋กœ FIFO(First In First Out)์˜ ๊ตฌ์กฐ์ด๋‹ค.

 

Event Loop

Event Loop๋Š” Call Stack๊ณผ Callback Queue๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ด€์ฐฐํ•˜๋‹ค๊ฐ€ Call Stack์ด ๋น„์–ด์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋˜๋ฉด 

Callback Queue์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์˜ฎ๊ธฐ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค 

 


 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ task๋ฐ–์— ์‹คํ–‰ํ•  ์ˆ˜ ์—†์ง€๋งŒ 

Web API, Callback Queue, Event Loop ์˜ ์—ญํ• ๋กœ ์ธํ•ด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์ด๋‹ค.