์ฐ์ ๊ธ์ ์์ํ๊ธฐ ์ ์ ์ค๋ ๋์ ๋ํ ๊ฐ๋จํ ๊ฐ๋ ๋ถํฐ ์ดํดํ๊ณ ๊ฐ๋ฉด ์ข์ ๋ฏํ๋ค.
ํ๋ก์ธ์ค์ ์ค๋ ๋ ์ฐจ์ด
ํ๋ก์ธ์ค๋ ๋ฉ๋ชจ๋ฆฌ ์์์ ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ ๋งํ๋ฉฐ, ์ค๋ ๋๋ ์ด ํ๋ก์ธ์ค ์์์ ์คํ๋๋ ํ๋ฆ ๋จ์๋ฅผ ๋งํ๋ค.
ํ๋ก์ธ์ค๋ง๋ค ์ต์ ํ๋์ ์ค๋ ๋๋ฅผ ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ, ๊ฐ๊ฐ ๋ณ๋์ ์ฃผ์ ๊ณต๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋น๋ฐ๋๋ค. (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 ์ ์ญํ ๋ก ์ธํด ๋ฉํฐ ์ค๋ ๋์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ด๋ค.
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ณ์์ ํธ์ด์คํ , TDZ์ ๊ฐ๋ ๋ฐ๋ก์๊ธฐ (0) | 2022.03.12 |
---|---|
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์๋ฆฌ ( Critical Rendering Path ) (0) | 2021.12.01 |
JavaScript (ES6) - ์๋ฒ ํต์ ์ ์์ JSON (0) | 2021.05.23 |
JavaScript (ES6) - Array APIs ์ด์ ๋ฆฌ - ( ์ ์ฉํ 10๊ฐ์ง ๋ฐฐ์ด ํจ์ ) (0) | 2021.05.23 |
JavaScript (ES6) - Prototype (0) | 2021.05.20 |