์น ๋ธ๋ผ์ฐ์ ์ ๋์ ์๋ฆฌ๋ฅผ ์ ์์์ผ ํด?
์์ฆ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์น ๋ฟ๋ง ์๋๋ผ, ์๋ฒ๋ IoT๋ฑ ๊ฑฐ์ ์ ๋ถ์ผ์์ ์ฌ์ฉ์ ํ๊ณ ์๋ค.
ํ๋ก ํธ์๋์ธ ๋๋ ๋งค์ผ ๋ง์ง๊ณ ์๋ ์ธ์ด๋ก, ๊ฒฐ๊ตญ ๋ด๊ฐ ์ง ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์คํํด์ฃผ๊ธฐ ๋๋ฌธ์,
์ธ์ด๋ฅผ ํด์ํด์ฃผ๋ ์์ง์ธ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง์ ๋ํด ๊ณต๋ถํ ํ์๊ฐ ์๋ค.
๋จผ์ ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ํด์ ์์๋ฅผ ์ดํด๋ณด์๋ฉด
print(1+1)
time.sleep(1)
print(2+2)
- ์ฝ๋ ์์๋๋ก ์์์ ์๋๋ก ํ๋์ฉ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. (feat.python)
print(1+1)
์คํ ํ ๊ฒฐ๊ณผ 2 ์ถ๋ ฅtime.sleep(1)
์คํ์ผ๋ก 1์ด ์ฌ๊ณ ~print(2+2)
์คํ ํ ๊ฒฐ๊ณผ 4 ์ถ๋ ฅ
๊ทธ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋?
console.log(1 + 1)
setTimeout(function () {
console.log(2 + 2)
}, 1000)
console.log(3 + 3)
-
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฝ๋๋ฅผ ์์ ์ ๋ ๋ฐ์ ์ ๋ ๋น ๋ฅธ ๊ฒ๋ถํฐ ์คํํด์ค๋ค.
console.log(1+1)
์คํ ํ ๊ฒฐ๊ณผ 2 ์ถ๋ ฅconsole.log(3+3)
์คํ ํ ๊ฒฐ๊ณผ 6 ์ถ๋ ฅ..?setTimeout(function(){...})
์คํ์ผ๋ก ๊ฒฐ๊ณผ 4 ์ถ๋ ฅ
-
๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ๋ ์์๋ ๋ด๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์๊ณ ์๋ ์์์๋ ํ์คํ ๋ค๋ฅด๋ค.
์ด ์๋ฌธ์ ํ๊ธฐ ์ํด์ Keep Going!
How JavaScript Works ๐ตโ๐ซ
-
์น ๋ธ๋ผ์ฐ์ : ์๋ฐ์คํฌ๋ฆฝํธ ์คํํด์ฃผ๋ ์์ง(ํฌ๋กฌ, ์จ์ผ, ํ์ด์ดํญ์ค ๋ฑ)
-
์คํํ๋๋ฐ ์์ด, ์ ํํ ์๋ฆฌ์ ๋จ๊ณ๊ฐ ์กด์ฌํ๋ค.
Heap
๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ผ์ด๋๋ ๊ณณ. ์ฝ๊ฒ ๋งํด์ ๋ณ์๊ฐ ์ ์ฅ๋์ด ์๋ ๊ณต๊ฐ์ด๋ค.
Stack
์ฝ๋๋ฅผ ์คํํด์ฃผ๋ ๊ณณ. ๋จ, ํ ๋ฒ์ ํ ์ค์ฉ๋ง ์คํ ๊ฐ๋ฅํ Single Thread์ด๋ค.
์ฝ๋๋ฅผ ์คํํ๋ค๊ฐ ๋ณ์๋ฅผ ๋ง๋๋ฉด Heap ์์ ์ ์ฅ๋ ๋ณ์๋ฅผ ๊ฐ์ ธ๋ค ์ด๋ค.
setTimeout()
๊ณผ ๊ฐ์ ๋น๋๊ธฐ ํจ์๊ฐ ๋ค์ด์ค๋ฉด Waiting Room์ผ๋ก ๋๋๊ณ ๋๋จธ์ง ์ฝ๋๋ฅผ ๊ณ์ ์คํํ๋ค.
Waiting Room
Ajax ์์ฒญ ์ฝ๋๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๊ฐ์ ๋น๋๊ธฐ ํจ์๋ ์ฌ๊ธฐ์ ์ ๊น ๋๊ธฐํ๋ค.
Queue
๋๊ธฐ์ค์์ ์ฒ๋ฆฌ๊ฐ ๋๋ ๋น๋๊ธฐ ํจ์๋ค์ด ๋์ด์์ ๊ธฐ๋ค๋ฆฐ ๋ค์, ๋ค์ Stack ๊ณต๊ฐ์ผ๋ก ๋ณด๋ด์ง๋ค.
์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ ์กฐ๊ฑด์ Stack ๊ณต๊ฐ์ด ๋น์ด์์ ๋๋ง ๋ณด๋ด์ง๋ค๋ ๊ฒ!
console.log(1 + 1)
setTimeout(function () {
console.log(2 + 2)
}, 0)
console.log(3 + 3)
setTimeout()
์ ์๊ฐ์ด 0์ด๋ผ๋ฉด ์ด๋จ๊น?console.log(1+1)
์คํ ํ ๊ฒฐ๊ณผ 2 ์ถ๋ ฅconsole.log(3+3)
์คํ ํ ๊ฒฐ๊ณผ 6 ์ถ๋ ฅsetTimeout(() => {...}, 0)
์คํ ํ ๊ฒฐ๊ณผ 4 ์ถ๋ ฅ
- setTimeout๊ณผ ๊ฐ์ ํจ์๋ ๋ฌด์กฐ๊ฑด ๋๊ธฐ์ค๋ก ์ด๋ํ ๋ค์, Queue์์ ๊ธฐ๋ค๋ ธ๋ค๊ฐ Stack์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง์ผ๋ก ์ถ๋ ฅ์ด ๋๋ค.
โจ ์ ๋ฆฌ
์ ์ด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ด๋ ค์ด ๋ก์ง์ด๋ 10์ด ์ด์ ๊ฑธ๋ฆฌ๋ ์ด๋ ค์ด ์ฐ์ฐ(๋ฐ๋ณต๋ฌธ)์ด Stack์ ์์ผ๋ฉด, ์ค๊ฐ์ ๋ฒํผ ํด๋ฆญ์ ํ๊ฑฐ๋ Ajax ์์ฒญ ํ ์ฝ๋ ์คํ์ด๋ setTimeout ํจ์๋ค์ด ์๋ํ์ง ์๋๋ค..
์๋ํ๋ฉด! ๋ฒํผ์ ๋๋ฅด๋ ๊ฒ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ก, Waiting Room์ ๊ฑฐ์ณ์ Queue์ ๊ฐ๋ค๊ฐ Stack์ผ๋ก ๊ฐ์ผํ๋๋ฐ
์ด ๋ Stack์ ๊ณ์ ํ ์ผ์ด ์์ฌ์์ผ๋ฉด ๋ณด๋ด์ง ์ ์๋ค! ๐ซ
Stack์ผ๋ก ๊ฐ๊ธฐ ์ํด์๋ Stack ์๋ฆฌ๊ฐ ๊ผญ. ๊ผญ ๋น์ด์์ด์ผ ํ๋ค๋ ์ ์ ๊ธฐ์ตํ์.
๋ธ๋ผ์ฐ์ ๋ ๋ณต์กํด์ง๋ฉด ๊ทธ๋๋ก Freezingโฆ
โ๏ธ Stack ๋ฐ์๊ฒ ํ์ง๋ง ๊ฒ! ์ฌ์ดํธ๊ฐ ๋๋ ค์ ธ์ ์ฌ์ฉ์ ๊ฒฝํ์ด ๋๋น ์ง ์ ์๋ค. โ๏ธ
โ๏ธ Queue ๋ฐ์๊ฒ ํ์ง๋ง ๊ฒ! ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ค์ค์ผ๋ก ๊ฑธ์ด๋๋ฉด ๊ทธ ์์ฒด๋ก๋ ์ฌ์ดํธ๊ฐ ๋ฒ๋ฒ ๊ฑฐ๋ฆด ์ ์๋ค. โ๏ธ
โ๏ธ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋๊ธฐ์ ? ๋น๋๊ธฐ์ ? ์๋ฐ์คํฌ๋ฆฝํธ๋ ์๋ ๋๊ธฐ์ ์ฒ๋ฆฌ๋ค. ํ ๋ฒ์ ํ ์ค ์คํ(Stack)์ ํ๋ค. ๊ฐ๋ ๋น๋๊ธฐ์ ์ธ ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ๋ฐ ์ค๋ ๊ฑธ๋ฆฌ๋ ํจ์๋ ๋๋๊ณ ์ฐจ๋ก๋๋ก ์คํํ๋ค.
์ด์ด์ง๋ ๋ค์ ํฌ์คํ ์ Event Loop์ ๋ํด์ ๋ ์์ธํ๊ฒ ๋งํด๋ณผ ๊ฒ์ด๋ค.