์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- css
- ์ํ
- ์ํ์ฃผ
- html
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ํ์ด์ฌ
- ์ค๋ผํด
- ์ฑ
- ํ๋ก๊ทธ๋๋ฐ
- ์ฝ๋ฉ
- Java
- ์นํผ๋ธ๋ฆฌ์ฑ
- ๋๊ฐ
- Python
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ์นดํ๋๊ฐ
- ์ค๋ธ์
- ๊ฐ๋ฐ
- ์ ๋ฆฌํธ๋ฆฌํธ
- JavaScript
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐฐ์์ ๋ฐฐ์
- ์๋ฐ
- ๊ฐ์ดํ ์ข ๋ญ๊ฐ๋น
- ๋ ์
- ํ์ฒ์ ๋ฆฌํธ๋ฆฌํธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ฐ์ํ
- database
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- Today
- Total
JiYoung Dev ๐ฅ
Javascript Call Stack, Callback Queue, Event Loop ๋ณธ๋ฌธ
์ด๋ฒ์ 30์ด ๋ง๋ค API๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ฅผ ๊ตฌํํ๋ฉด์ setInterval ํจ์๋ฅผ ์ฌ์ฉํ์๋ค.
์ฌ์ฉ๋ฒ์ ์๊ณ ์์๋๋ฐ setInterval์ด ์ด๋ค ๊ฑด์ง ์ฐพ์๋ณด๋ค๊ฐ ๋น๋๊ธฐ์ ๊ด๋ จ๋ ๊ฐ๋ ๋ค์ด ๋์์ ์ ๋ฆฌ๋ฅผ ํ๊ฒ ๋์๋ค.
๋ฐ๋ผ์ ์ค๋์ ๋น๋๊ธฐ ๊ฐ๋ ์ ๋ฑ์ฅํ๋ Call Stack, Callback Queue, Event Loop์ ๋ํด ์์๋ณด์๋ค.
๋ณธ๋ก ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ธ๋ผ์ฐ์ ์์ HTML ๋ด๋ถ Javascript๋ก ์์ฑ๋ ์ฝ๋๊ฐ ์คํ๋๋ ๊ณผ์ ์ ๋ํด ์ ์ ์ ๋ฆฌํด๋ณด์.
๐ Javascript ์คํ์๋ฆฌ
์น ๋ธ๋ผ์ฐ์ ๋ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋๋ค.
- ์ฌ์ฉ์ ์ธํฐํ์ด์ค: ๊ฒ์์ฐฝ, ๋ค๋ก๊ฐ๊ธฐ/์์ผ๋ก๊ฐ๊ธฐ ๋ฒํผ, ์๋ก๊ณ ์นจ ๋ฑ ๋ธ๋ผ์ฐ์ ํ๋ก๊ทธ๋จ ์์ฒด GUI
- ๋ธ๋ผ์ฐ์ ์์ง: ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋ ๋๋ง ์์ง ์ฌ์ด์ ๋์ ์ ์ด
- ๋ ๋๋ง ์์ง: ์์ฒญํ ์ฝํ ์ธ (HTML, CSS ๋ฑ) ํ์ฑ(parsing)ํ์ฌ ํ์
- ํต์ : HTTP ์์ฒญ๊ณผ ๊ฐ์ ๋คํธ์ํฌ ํธ์ถ
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง: ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ํด์ ๋ฐ ์คํ
- UI ๋ฐฑ์๋: ๊ธฐ๋ณธ์ ์ ์์ ฏ์ ๊ทธ๋ฆฌ๋ ์ธํฐํ์ด์ค๋ก ํ๋ซํผ์์ ๋ช ์ํ์ง ์์ ์ผ๋ฐ์ ์ธ ์ธํฐํ์ด์ค
- ์๋ฃ์ ์ฅ์: ๋ก์ปฌ ์คํ ๋ฆฌ์ง, ์ฟ ํค ๋ฑ ๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ์ ์ฅํ๋ ์์ญ
์์ ๊ตฌ์ฑ์์ JS ์์ง์ด HTML ๋ด <script>๋ก ๊ฐ์ผ Javascript ์ฝ๋๋ฅผ ์คํํ๋ ์์ญ์ด๋ค.
๋ ๋๋ง ์์ง์ด HTML ๋ฌธ์๋ฅผ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ํ์ฑํ๋ค๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋ํ๋ script ํ๊ทธ๋ฅผ ๋ง๋๋ฉด DOM ์์ฑ์ ์ผ์ ์ค๋จํ๋ค. script ํ๊ทธ์ src์ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์๋ฒ์ ์์ฒญํ์ฌ ์๋ต๋ฐ์ผ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ์ฑํ๊ธฐ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์๊ฒ ์ ์ด๊ถ์ ๋๊ธด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ฝ๋๋ฅผ ์ฝ๊ณ ์คํํ๋ ์๋ฆฌ๋ ์๋์ ๊ฐ๋ค.
๐ Javascript ์์ง
Javascript ์์ง์ ๋ธ๋ผ์ฐ์ ๋ด์ ๋ด์ฅ๋์ด ์์ผ๋ฉฐ ๊ทธ๊ฒ Memory Heap๊ณผ Call Stack ๋ ๊ฐ์ง ์์ญ์ผ๋ก ๊ตฌ๋ถ์ด ๊ฐ๋ฅํ๋ค.
Memory Heap
๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ฅํ๋ ๊ณณ์ผ๋ก ํจ์๋ ๋ณ์, ํจ์๋ฅผ ์คํํ ๋ ์ฌ์ฉํ๋ ๊ฐ๋ค์ ์ ์ฅํ๋ค.
ํด๋น ๋ถ๋ถ์์ ๋์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ณ์๋ ๋ฐ์ดํฐ๋ฅผ ๋น์์ฃผ๋ GC๊ฐ ์๋ค.
Call Stack
์ฝ๋๊ฐ ์คํ๋๋ฉด ์์๋ฅผ ๊ธฐ์ตํด ๋๊ณ , ํ๋์ฉ ์์ฐจ์ ์ผ๋ก ๊บผ๋ด์ ์คํํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ณต๊ฐ
Stack ์๋ฃ ๊ตฌ์กฐํํ๋ก LIFO ์์น์ ๋ฐ๋ฅธ๋ค.
Call Stack์ ๋ค์ด๊ฐ ํจ์ ํํ๋ ์๋ .js ์ฝ๋๋ฅผ ์คํํ ๊ฒฐ๊ณผ์ ๊ฐ๋ค.
function add(a, b) {
return a + b;
}
function average(a, b) {
return add(a, b) / 2;
}
console.log(average(10, 20));
- ์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด Call Stack์๋ console.log → average → add ์์ผ๋ก ์์ด๋ฉฐ, ์ค์ ์คํ์์๋ add → average → console.log ์์ผ๋ก ์คํ๋๋ค.
- ์ค์ ๋ก ์ฝ๋๋ฅผ ์คํํ์ ๋, ๋ค์์ ์คํ๋์ด์ผ ํ ์ฝ๋๋ฅผ ์์๋๋ก ๊ธฐ๋ก์ ํ๋ฉฐ, ์์ฐจ์ ์ผ๋ก ์ฝ๋๋ฅผ ์คํํ ์ ์๊ฒ ๋๋ค.
- ์ด Call Stack์ ์ ์ฅ๊ณต๊ฐ์ด ๊ฐ๋ ์ฐจ์ ๋์น๋ ํ์์ stack over flow ๋ผ๊ณ ํ๋ค.
๐ Call Stack, Callback Queue, Event Loop
Javascript๋ ์ฑ๊ธ ์ค๋ ๋์ด๊ธฐ ๋๋ฌธ์ call stack์ 10์ด ๊ฑธ๋ฆฌ๋ ์์ ์ด ํ๋๋ผ๋ ์์ผ๋ฉด ๋ชจ๋ ์์ ์ 10์ด + a๋ก ๋๋ ค์ง๋ค. ๊ทธ๋์ ํ์ํ๊ฒ Event Loop์ Callback Queue, Browser Web API์ด๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จ์ผ ์ค๋ ๋ ๊ธฐ๋ฐ์ ์ธ์ด๋ก ํ ์๊ฐ ํ๋์ ์์ ๋ง์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋น๋๊ธฐ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ๋จ์ผ ์ค๋ ๋์์๋ ๋์์ ๋ง์ ์์
์ ์ํํ ์ ์๋ค.
- ๋น๋๊ธฐ ๋์์ ํต์ฌ ์์๋ ์ธ์ด๊ฐ ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ค!
Web API
- Web API๋ ์น ํ์ด์ง์ ์ ๊ทผํ๊ณ ์กฐ์ํ๋ DOM(Document Object Model)๊ณผ BOM(Browser Object Model)์ ํฌํจํ๋ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ค.
- Web API๋ Dom ์ด๋ฒคํธ, Ajax, setTimeout ๋ฑ ๋น๋๊ธฐ ์์ ๋ค์ ์ํํ ์ ์๋๋ก API๋ฅผ ์ง์ํ๋ค.
Event Loop
- ์ด๋ฒคํธ ๋ฐ์ ์ ํธ์ถ๋๋ ์ฝ๋ฐฑ ํจ์๋ค์ ๊ด๋ฆฌํ์ฌ Callback Queue์ ์ ๋ฌํ๊ณ , Callback Queue์ ๋ด๊ฒจ์๋ ์ฝ๋ฐฑ ํจ์๋ค์ Call Stack์ ๋๊ฒจ์ค๋ค.
- ์ด๋ฒคํธ ๋ฃจํ๊ฐ Callback Queue์์ Call Stack์ผ๋ก ์ฝ๋ฐฑํจ์๋ฅผ ๋๊ฒจ์ฃผ๋ ์์ ์ Call Stack์ ์์ฌ์๋ ํจ์๊ฐ ์์๋๋ง ์ํ๋๋ค. ๋ฐ๋ณต์ ์ผ๋ก Call Stack์ด ๋น์ด์๋์ง ํ์ธ ํ๋ ๊ฒ์ tick์ด๋ผ๊ณ ํ๋ค.
Callback Queue
- Web API์์ ๋น๋๊ธฐ ์์ ๋ค์ด ์คํ๋ ํ ํธ์ถ๋๋ ์ฝ๋ฐฑํจ์๋ค์ด ๊ธฐ๋ค๋ฆฌ๋ ๊ณต๊ฐ์ด๋ค.
- Event Loop๊ฐ ์ ํด์ค ์์๋๋ก ์ค์ ์ ์์ผ๋ฉฐ, FIFO ๋ฐฉ์์ ๋ฐ๋ฅธ๋ค.
๐ SetTimeout ๋์ ์์
๋ํ์ ์ธ WebAPI ํธ์ถ ํจ์์ธ setTimeout ํจ์์ ๋์ ์์์ด๋ค.
console.log('first');
setTimeout(function cb(){
console.log('second');
}, 1000);
console.log('third');
- console.log(’first’)๊ฐ Call Stack์ ์ถ๊ฐ(push)๋๋ค.
- console.log(’first’)๊ฐ ์คํ๋์ด ํ๋ฉด์ ์ถ๋ ฅ๋ ํ, Call Stack์์ ์ ๊ฑฐ(pop) ๋๋ค.
- setTimeout(function cb…)์ด Call Stack์ ์ถ๊ฐ๋๋ค.
- setTimeout ํจ์๊ฐ ์คํ๋๋ฉด์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๊ณตํ๋ timer Web API๋ฅผ ํธ์ถํ๋ค. ๊ทธ ํ Call Stack์์ ์ ๊ฑฐ๋๋ค.
- console.log(’third’)๊ฐ Call Stack์ ์ถ๊ฐ๋๋ค.
- console.log(’third’)๊ฐ ์คํ๋์ด ํ๋ฉด์ ์ถ๋ ฅ๋๊ณ Call Stack์์ ์ ๊ฑฐ๋๋ค.
- setTimeout ํจ์์ ์ ๋ฌํ 1000ms ์๊ฐ์ด ์ง๋ ๋ค Callback์ผ๋ก ์ ๋ฌํ cb ํจ์๊ฐ Callback Queue์ ์ถ๊ฐ๋๋ค.
- Event Loop๋ Call Stack์ด ๋น์ด์๋ ๊ฒ์ ํ์ธํ๊ณ Callback Queue๋ฅผ ์ดํด ๋ณธ๋ค. cb๋ฅผ ๋ฐ๊ฒฌํ Event Loop๋ Call stack์cb ์ถ๊ฐ
- cb ํจ์๊ฐ ์คํ๋๊ณ ๋ด๋ถ์ console.log(’second’)๊ฐ Call Stack์ ์ถ๊ฐ๋๋ค.
- console.log(’second’)๊ฐ ํ๋ฉด์ ์ถ๋ ฅ๋๊ณ Call Stack์์ ์ ๊ฑฐ๋๋ค.
- cb๊ฐ Call Stack์์ ์ ๊ฑฐ๋๋ค.
์์ ๊ด๋ จํ ์์ธํ ๊ธ์ ์๋ ๊ธ์ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
https://medium.com/sjk5766/javascript-๋น๋๊ธฐ-ํต์ฌ-event-loop-์ ๋ฆฌ-422eb29231a8
setTimeout vs setInterval
setTimeout: ์ง์ ๋ ์๊ฐ์ด ๊ฒฝ๊ณผํ ํ์ ํ ๋ฒ๋ง ํน์ ํจ์๋ฅผ ์คํํ๋ ๊ธฐ๋ฅ ์ ๊ณต setInterval: ์ผ์ ํ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ์ง์ ๋ ํจ์๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์คํํ๋ ๊ธฐ๋ฅ ์ ๊ณต clearInterval: setInterval() ํจ์๊ฐ ์คํ๋๊ณ ์์ ๋, clearInterval() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต ์ค์ง(๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง)
์ฐธ๊ณ ์๋ฃ
https://velog.io/@qlgks1/javascript-node-๋์-์๋ฆฌ
https://velog.io/@somda/FE-JavaScript-๋์-๊ณผ์ -Callback-Queue-Event-Loop
https://medium.com/sjk5766/javascript-๋น๋๊ธฐ-ํต์ฌ-event-loop-์ ๋ฆฌ-422eb29231a8
'Study > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Frontend Fundemental (ํ ์ค, ํ๋ก ํธ์๋ ์ข์ ์ฝ๋ ์์ฑํ๊ธฐ) ์ ๋ฆฌ (1) | 2025.01.16 |
---|---|
Webpack: ๊ฐ๋ ๊ณผ ์ค์ (0) | 2024.11.27 |
[React] ๋๋๊ทธ ์ค ๋๋กญ ํ์ผ ์ ๋ก๋ ๊ธฐ๋ฅ ๊ตฌํ (1) | 2024.11.05 |
[React] Spring Boot์ ์ฐ๋ํ์ฌ shop ๋ง๋ค๊ธฐ (2023.06.09) (0) | 2023.06.09 |
[React] ๊ฐ๋ฐ ์ฐธ๊ณ ์ฌ์ดํธ ๋ฐ ํ ํ๋ฆฟ ์ ์ฉํ๋ ๋ฒ (2023.06.09) (0) | 2023.06.09 |