How JavaScript Works
์บกํดํ๊ต๋์ ํฌ์คํ ์ ์ฝ๊ณ ์ ๋ฆฌํ์ต๋๋ค
์๋ฐ์คํฌ๋ฆฝํธ์ ๋์์๋ฆฌ: ์์ง, ๋ฐํ์, ํธ์ถ ์คํ
์๋ฐ์คํฌ๋ฆฝํธ ์์ง
๋ํ์ ์ธ ์๋ Google V8 ์์ง. V8์ Chrome๊ณผ Node.js์์ ์ฌ์ฉ
์์ง์ ์ฃผ์ ๊ตฌ์ฑ์์
Memory Heap : ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ผ์ด๋๋ ๊ณณ
Call Stack : ์ฝ๋ ์คํ์ ๋ฐ๋ผ ํธ์ถ ์คํ์ด ์์ด๋ ๊ณณ
๋ฐํ์
๊ฑฐ์ ๋ชจ๋ ๊ฐ๋ฐ์๋ค์ด setTimeout๊ณผ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ด์ฅ API๋ฅผ ์ฌ์ฉํ์ง๋ง ์ด API๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ ์ ๊ณตํ์ง๋ ์์
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ด์ฌํ๋ ์์๋ค
์๋ฐ์คํฌ๋ฆฝํธ ์์ง
Web APIs (DOM, AJAX, Timeout)
Event Loop, Callback Queue
ํธ์ถ ์คํ(Call Stack)
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธ ์ฐ๋ ๋ ๊ธฐ๋ฒ์ธ์ด๋ก ํธ์ถ ์คํ์ด ํ๋. ๋ฐ๋ผ์ ํ ๋ฒ์ ํ ์์ ๋ง ์ฒ๋ฆฌํ ์ ์์
ํธ์ถ ์คํ์ ์ฐ๋ฆฌ๊ฐ ํ๋ก๊ทธ๋จ ์์์ ์ด๋์ ์๋์ง๋ฅผ ๊ธฐ๋กํ๋ ์๋ฃ๊ตฌ์กฐ
ํจ์๋ฅผ ์คํํ๋ฉด ํด๋น ํจ์๋ ํธ์ถ ์คํ์ ๊ฐ์ฅ ์๋จ์ ์์นํ๊ณ ํจ์ ์คํ์ด ๋๋๋ฉด ํด๋น ํจ์๋ฅผ ํธ์ถ ์คํ์์ ์ ๊ฑฐ
ํ๋ ๊ฒ์ด ์คํ์ ์ญํ
ํธ์ถ ์คํ์ด ์ต๋ ํฌ๊ธฐ๊ฐ ๋๋ฉด ์คํ ๋ ๋ ค ๋ฒ๋ฆฌ๊ธฐ๊ฐ ์ผ์ด๋จ(Overflowing)
-> ์ฑ๊ธ ์ค๋ ๋ ๊ธฐ๋ฐ ์ฝ๋ฉ์ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ์ ๊ธฐ๋๋ ๋ณต์กํ ๋ฌธ์ ๋ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ฏผํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ์ฌ์(ex, ๋ฐ๋๋ฝ) -> ๊ทธ๋ฌ๋ ์ฑ๊ธ ์ค๋ ๋์์ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฑด ์๋นํ ์ ์ฝ์ด ๋ง์ -> ํ ๊ฐ์ ํธ์ถ ์คํ์ ๊ฐ๊ณ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ์ด ๋๋ ค์ง๋ค๋ฉด?
๋์์ฑ(concurrency) & ์ด๋ฒคํธ ๋ฃจํ(Event Loop)
ํธ์ถ ์คํ์ ์ฒ๋ฆฌ ์๊ฐ์ด ๋งค์ฐ ์ค๋ ๊ฑธ๋ฆฌ๋ ํจ์๊ฐ ์๋ค๋ฉด,
ํจ์๊ฐ ์คํ๋๋ ๋์ ๋ธ๋ผ์ฐ์ ๋ ์๋ฌด ์์ ๋ ๋ชปํ๊ณ ๋๊ธฐ ์ํ๊ฐ ๋จ
ํ์ด์ง ๋ ๋๋ง ๋์์ ๋ฐฉํดํ์ง ์๊ณ ๋ธ๋ผ์ฐ์ ์ ์๋ต๋ ๋์ง ์์ผ๋ฉด์ ์ฐ์ฐ๋์ด ๋ง์ ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด,
๋น๋๊ธฐ ์ฝ๋ฐฑ
210913
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ ์ค์ํ์ง ์ ์ ์์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ์๋ ๋ฐฉ์์ ๋ํด ์ข ๋ ์์๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
Last updated