์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์๊ณผ ์์ง: ์น๊ณผ ์๋ฒ์์์ ๋์ ์๋ฆฌ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์น๊ณผ ์๋ฒ ์์ชฝ์์ ์ค์ํ ์ญํ ์ ํ๋ ์ธ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ด๋ป๊ฒ ์คํ๋๋์ง๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ฐ๋ ์ ์์์ผ ํ๋ค.
์๋ฐ์คํฌํธ ๋ฐํ์: ์์ง๊ณผ API
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์คํ๋๋ ํ๊ฒฝ์ ๋งํ๋ฉฐ, ํฌ๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง๊ณผ **API(๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋ฐ์ด๋๋ฆฌ)**๋ก ๊ตฌ์ฑ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๊ณ ์คํํ๋ ์ญํ ์ ํ๋ฉฐ, ์ด ๊ณผ์ ์์ ํ์ํ API์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํจ๊ป ์ ๊ณตํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง: ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฝ๊ณ , ์ด๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ์ฌ ์คํํ๋ ์ญํ ์ ํ๋ค. ์๋ฅผ ๋ค์ด, ๊ตฌ๊ธ ํฌ๋กฌ์ V8 ์์ง์ด ๋ํ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด๋ค.
- JS Engine + Web API: ์น ๋ธ๋ผ์ฐ์ ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง๊ณผ Web API๊ฐ ๊ฒฐํฉ๋์ด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ๋ค. Web API๋ DOM ์กฐ์, ํ์ด๋จธ ์ค์ , HTTP ์์ฒญ ๋ฑ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์์ฃผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ค.
- Node.js = JS Engine + Node API: ์๋ฒ ํ๊ฒฝ์์๋ Node.js๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง๊ณผ Node API๋ฅผ ๊ฒฐํฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ๋ค. Node API๋ ํ์ผ ์์คํ ์ ๊ทผ, ๋คํธ์ํน, I/O ์ฒ๋ฆฌ ๋ฑ์ ์ง์ํ๋ค.
์ด์ฒ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง๊ณผ ๊ฐ ํ๋ซํผ์ ๋ง๋ API๋ค์ ๊ฒฐํฉํ์ฌ, ๋ค์ํ ํ๊ฒฝ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๊ฒ ํด์ค๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋์ ๋ฐฉ์
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธ ์ค๋ ๋๋ก ๋์ํ๋ฉฐ, ์ฃผ๋ก ๋ ๊ฐ์ง ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ธ Stack๊ณผ Heap์ ์ฌ์ฉํ๋ค.
- Stack: ํจ์ ํธ์ถ์ด ์ด๋ฃจ์ด์ง ๋, ํจ์ ์คํ ์์๋๋ก ์ ์ฌ๋๊ณ ์ฒ๋ฆฌ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค. ์คํ์ LIFO(Last In, First Out) ๋ฐฉ์์ผ๋ก ์๋ํ๋ฉฐ, ํจ์ ํธ์ถ์ด ์๋ฃ๋๋ฉด ์คํ์์ ์ ๊ฑฐ๋๋ค.
- Heap: ๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ฅ๋๋ ์์ญ์ด๋ค. ๊ฐ์ฒด๋ ๋ฐฐ์ด๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ํ์ ์ ์ฅ๋๋ฉฐ, ์คํ๊ณผ ๋ฌ๋ฆฌ ์์ฐจ์ ์ผ๋ก ๊ด๋ฆฌ๋์ง ์๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ฑ๊ธ ์ค๋ ๋ ํ๊ฒฝ์์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๊ฒ ํ๋ค.
๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ด๋ฒคํธ ๋ฃจํ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธ ์ค๋ ๋๋ก ๋์ํ์ง๋ง, ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํตํด ๋ฉํฐํ์คํน์ ๊ฐ๋ฅํ๊ฒ ํ๋ค. ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ์น ๋ธ๋ผ์ฐ์ ์ Node.js ํ๊ฒฝ์์ ๋ค๋ฅด๊ฒ ๊ตฌํ๋์ง๋ง, ๊ณตํต์ ์ผ๋ก ์ด๋ฒคํธ ๋ฃจํ(Event Loop)๋ฅผ ์ฌ์ฉํ๋ค.
- ์น ๋ธ๋ผ์ฐ์ ์์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ:
- ๋๊ธฐ์ค(Task Queue): ๋น๋๊ธฐ ํจ์๊ฐ ์๋ฃ๋๋ฉด, ์ฝ๋ฐฑ ํจ์๊ฐ ๋๊ธฐ์ค์ ์ ์ฌ๋๋ค.
- ๋ฌธ์ง๊ธฐ(Event Loop): ์ด๋ฒคํธ ๋ฃจํ๊ฐ ๋๊ธฐ์ค์ ๋ชจ๋ํฐ๋งํ๋ฉฐ, ์คํ์ด ๋น์ด ์์ ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํ์ผ๋ก ์ด๋์์ผ ์คํํ๋ค.
- ์์ ์ฅ(Stack + Heap): ์ฝ๋ฐฑ ํจ์๊ฐ ์คํ์์ ์คํ๋๋ฉฐ, ํ์ํ ๋ฐ์ดํฐ๋ ํ์์ ๊ฐ์ ธ์จ๋ค.
- Node.js์์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ:
- Node.js๋ ์น ๋ธ๋ผ์ฐ์ ์ ๋ฌ๋ฆฌ ์๋ฒ ํ๊ฒฝ์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด LIBUV๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉํฐ์ค๋ ๋ I/O ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ค. ์ด๋ฅผ ํตํด Node.js๋ ๋น๋๊ธฐ ์์ ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ๊ณ ์ฑ๋ฅ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋ค.
Web Worker API: ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฉํฐ์ค๋ ๋ ์ง์
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธ ์ค๋ ๋๋ก ๋์ํ์ง๋ง, Web Worker API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉํฐ์ค๋ ๋๋ฅผ ์ง์ ํ์ฉํ ์ ์๋ค. ์ด๋ ํนํ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ๋ณต์กํ ์ฐ์ฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฒ๋ฆฌํ๊ณ , ๋ฉ์ธ ์ค๋ ๋์ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ์ ํ ๋ ์ ์ฉํ๋ค.
- ์ฌ์ฉ ๋ฐฉ๋ฒ:
- ๊ฐ์ ์ฌ์ฉ: setTimeout, setInterval๊ณผ ๊ฐ์ Web API๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์ง์ ์ฌ์ฉ: postMessage, onmessage ๋ฑ์ API๋ฅผ ์ฌ์ฉํด Pub/Sub ํจํด์ผ๋ก ๋ฉํฐ์ค๋ ๋๋ฅผ ๊ตฌํํ ์ ์์ผ๋ฉฐ, ์ค๋ ๋ ๊ฐ ํต์ ์ ์ํด MessageChannel์ ํ์ฉํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์ ๋ฐํ์์ ๊ฒฐํฉ
์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ ํ๊ฒฝ์์ ๋์ํ๋ฉฐ, ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋จ์ํํ๋ค. ํ๋ ์์ํฌ๋ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒฐํฉํ์ฌ ๋จ์ผ ๋ชฉ์ ์ ๋์ด์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ:
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ํน์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋จ์ผ ๋ชฉ์ ์ ์ฝ๋ ๋ชจ์. ์๋ฅผ ๋ค์ด, jQuery๋ DOM ์กฐ์์ ํนํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
- ํ๋ ์์ํฌ: ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด์ ๊ฒฐํฉํ์ฌ ์ข ํฉ์ ์ธ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํ๋ค. ์๋ฅผ ๋ค์ด, React๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ํ์ํ ๋๊ตฌ๋ค์ ํฌํจํ ํ๋ ์์ํฌ์ด๋ค.
ํด๋น ์์์ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ ๋์์๋ฆฌ์ ๋ํด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
https://www.youtube.com/watch?v=v67LloZ1ieI
โน๏ธ์ฐธ๊ณ
[ASAC 6๊ธฐ ๊ฐ์์๋ฃ]
https://www.youtube.com/watch?v=v67LloZ1ieI
'๐ปDEV-STUDY > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JavaScript ํจ์ ๋ด this์ ๋ฉ์๋ ๋ด this ์ฐจ์ด (1) | 2024.09.09 |
---|---|
JavaScript ํจ์ ์์ฑ ๋ฐฉ๋ฒ (1) | 2024.09.08 |
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํ ๋ฐฉ์ = ํจ์ ์คํ ์๋ฆฌ (0) | 2024.09.05 |
JavaScript ๋ณ์, ํจ์ ์ ์ ๋ฐ ์ฌ์ฉ (0) | 2024.09.05 |
JavaScript ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ (4) | 2024.09.04 |