์ฐ๋ฆฌ๊ฐ ์์ฑํ Javascript ์ฝ๋๋ ์ด๋ป๊ฒ ๋์๊ฐ๋ ๊ฒ์ผ๊น?
Javascript๊ฐ ์คํ๋๊ธฐ ์ํด ์ด๋ค ๊ณผ์ ์ด ํ์ํ์ง ์์๋ณด์.
Chrome์์ ๊ฐ๋ฐ์ ํญ์์ Console ์ฐฝ์ ํค๊ณ Javascript ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋ Chrome์ Javascript ์ฝ๋๋ฅผ ์คํ์ํฌ ์ ์๋ ์์ง์ด ์กด์ฌํ๋๋ฐ ์ด๋ฅผ V8 ์์ง์ด๋ผ๊ณ ํ๋ค.
Javascript ์์ง ์ค ๋ง์ด ์๋ ค์ ธ์๋ V8์ Google์ ์ฃผ๋ํ์ C++๋ก ๋ง๋ค์ด์ง ๊ณ ์ฑ๋ฅ์ ์์ง์ด๋ค.
์ฐ๋ฆฌ๊ฐ Javascript๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ์ธ๋ถ์์ ์คํ ํ ์ ์๋๋ก ํ๊ฒฝ์ ์ ๊ณตํด์ฃผ๋ Node.js ๋ํ V8 ์์ง์ ์ฌ์ฉํ๊ณ ์๋ค.
์ด์ธ์๋ ์ต์ด์ Javascript ์์ง์ธ SpiderMonkey(Netscape, FireFox), ๋ง์ดํฌ๋ก์ํํธ์์ ์ฌ์ฉํ๋ Chakra(Edge) ๋ฑ์ด ์กด์ฌํ๋ค.
Javascript ์์ง๋ค์ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ง๋ค๊ธฐ๊น์ง์ ๊ณผ์ ์์ ๊ณตํต์ ์ธ ๋ถ๋ถ๊ณผ ๋ค๋ฅธ ๋ถ๋ถ(์ต์ ํ ๊ด๋ จ)์ด ์กด์ฌํ๋ค.
์ฐ์ , ๊ณตํต์ ์ธ ๋ถ๋ถ๋ถํฐ ์ง๊ณ ๋์ด๊ฐ์.
์์์ ๋น์ฐํ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋๋ถํฐ์ด๋ค.
์์ง์์๋ ์ฝ๋๋ฅผ ํ์
ํ๊ธฐ ์ํด ํ์ฑํ์ฌ Abstract Syntax Tree(AST, ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ)๋ก ๋ง๋ ๋ค.
๋ง๋ AST๋ฅผ ๊ฐ์ง๊ณ ์ธํฐํ๋ฆฌํฐ๊ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ ์์ฑ๋ ๋ฐ์ดํธ ์ฝ๋๋ก ์ค์ ์๋์ ํ๊ฒ ๋๋ค.
์ดํ ๋ ๋น ๋ฅธ ์๋๋ก ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ต์ ํ ์ปดํ์ผ๋ฌ๋ก ๋ณด๋ด, ์ต์ ํ๋ ๊ธฐ๊ณ์ด๋ฅผ ์์ฑํ๊ฒ ๋๋๋ฐ ์ด ๋ถ๋ถ์์๋ ์์ง๋ง๋ค ๊ฐ๊ธฐ ๋ค๋ฅด๋ค.
์ฆ, ๊ณตํต์ ์ธ ๋ถ๋ถ์์๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
- ์์ฑ๋ ์ฝ๋๋ฅผ ํ์ฑํ์ฌ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ฅผ ๋ง๋ ๋ค.
- ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ฅผ ๋ฐํ์ผ๋ก ์ธํฐํ๋ฆฌํฐ๊ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ฝ๋๋ฅผ ์คํํ๋ค.
๊ฐ๊ธฐ ๋ค๋ฅธ ์์ง๋ค์ ์ต์ ํ ๊ณผ์ ์ ๋ณด๊ธฐ์ ์ ์ธํฐํ๋ฆฌํฐ์ ์ต์ ํ ์ปดํ์ผ๋ฌ์ ๋ํด ๋จผ์ ์ง๊ณ ๋์ด๊ฐ์.
-
์ธํฐํ๋ฆฌํฐ
๊ณ ๊ธ ์ธ์ด๋ก ์์ฑ๋ ์์์ฝ๋ ๋ช ๋ น์ด๋ค์ ํ๋ฒ์ ํ์ค์ฉ ์ฝ์ด ์คํํ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
๊ณ ๊ธ ๋ช ๋ น์ด๋ค์ ์ง์ ๊ธฐ๊ณ์ด๋ก ํ๋ฒ์ ์ ๋ถ ๋ฒ์ญํ๋ ์ปดํ์ผ๋ฌ์๋ ๋ค๋ฅด๊ฒ ํ ์ค์ฉ ๋ฒ์ญํ ๋ค ๋ฐ๋ก ์คํํ๊ธฐ ๋๋ฌธ์ ๋ฒ์ญ ์๋๋ ๋น ๋ฅด๋ ์คํ ์๋๋ ๋๋ฆฌ๋ค. -
์ต์ ํ ์ปดํ์ผ๋ฌ
๊ธฐ๋ณธ์ ์ธ ์ปดํ์ผ๋ฌ์ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ผ๋, ์ฝ๋๋ฅผ ์คํ์ ์ต์ ํ ์ํค๊ธฐ ์ํด ํ์ํ ์์ ์์ ์ธํฐํ๋ฆฌํฐ๊ฐ ํด์ํ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปดํ์ผํ์ฌ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ค.
Javascript ์์ง๋ค์ ๋ณดํต ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ, ์ต์ ํ๊ฐ ํ์ํ ์์ ์์๋ JIT(Just-In-Time) ๋ชจ๋๋ฅผ ์คํํ์ฌ ์ต์ ํ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ค.
์ต์ ํ๋ ์ฝ๋๊ฐ ์ข์ง์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์์ ๊ฒฝ์ฐ์๋ ๋ค์ ๋ฐ์ดํธ์ฝ๋๋ก ๋๋๋ฆฐ๋ค.
-
JIT(Just-In-Time)
๋์ ๋ฒ์ญ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ์ฐ๋ฉฐ ํ๋ก๊ทธ๋จ์ ์ค์ ๋ก ์คํํ๋ ์์ ์ ๊ธฐ๊ณ์ด๋ก ๋ณ์ญํ์ฌ ์ปดํ์ผํ๋ ๊ธฐ๋ฒ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์คํ ์๋๋ฅผ ๋ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
-
V8
V8์์๋ Ignition์ด๋ผ๋ ์ธํฐํ๋ฆฌํฐ๋ก ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ฑ ๋ฐ ์คํํ๋ค.
๋ฐ์ดํธ์ฝ๋๊ฐ ์คํ๋ ๋ Ignition์ ํ๋กํ์ผ๋ง ๋ฐ์ดํฐ(์ต์ ํ๊ฐ ํ์ํ ๋ถ๋ถ, ์์ฃผ ์ฌ์ฉ๋๋ ์ฝ๋๋ค)๋ฅผ ์์งํ์ฌ ์ต์ ํ ์ปดํ์ผ๋ฌ์๊ฒ ๋ณด๋ธ๋ค.
์ด ์ต์ ํ ์ปดํ์ผ๋ฌ๋ฅผ V8์์๋ TurboFan์ด๋ผ๊ณ ํ๋ค.
์ต์ ํ๊ฐ ์คํจ์์๋ ๊ธฐ๊ณ์ด์์ ๋ฐ์ดํธ์ฝ๋๋ก ๋๋๋ฆฐ๋ค. -
SpiderMonkey
SpiderMonkey์์ ์ต์ ํ ์ปดํ์ผ๋ฌ๋ ๋๊ฐ๋ค.
์ธํฐํ๋ฆฌํฐ๊ฐ ์์ฑํ ๋ฐ์ดํธ์ฝ๋๋ฅผ Baseline ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ์ฝ๊ฐ์ ์ต์ ํ๋ฅผ ํ๊ณ , ์คํํ๋ฉฐ ํ๋กํ์ผ๋ง ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ค.
์์ง๋ ํ๋กํ์ผ๋ง ๋ฐ์ดํฐ๋ค์ ํฉ์ณ IonMonkey๋ผ๋ ์ต์ ํ ์ปดํ์ผ๋ฌ์๊ฒ ๋ณด๋ด๊ณ ๊ณ ๋๋ก ์ต์ ํ๋ ์ฝ๋๋ฅผ ๋ง๋ค์ด ์คํํ๊ฒ ๋๋ค.
์ต์ ํ๊ฐ ์คํจํ๋ค๋ฉด, ๋ฐ์ดํธ์ฝ๋๋ก ๋๋ฆฌ๋๊ฒ์ด ์๋ Baseline์์ ๋์จ ์ฝ๋๋ก ๋๋ฆฐ๋ค. -
Chakra Core Chakra Core์์๋ SpiderMonkey์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋๊ฐ์ ์ต์ ํ ์ปดํ์ผ๋ฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๋ค๋ฅธ์ ์, ๋ฐ์ดํธ์ฝ๋์ ์ฝ๊ฐ์ ์ต์ ํ๋ ์ฝ๋(Simple JIT์์ ๋์จ ์ฝ๋)์์ ํ๋กํ์ผ๋ง ๋ฐ์ดํฐ๋ฅผ Full JIT ์ด๋ ์ต์ ํ ์ปดํ์ผ๋ฌ์๊ฒ ๋ณด๋ด๊ณ ์ด๋ฅผ ๊ณ ๋๋ก ์ต์ ํ๋ ์ฝ๋๋ฅผ ๋ง๋ ๋ค.
์ต์ ํ ์คํจ์์๋ ๋ฐ์ดํธ์ฝ๋๋ก ๋๋ฆฐ๋ค.
Javascript ์์ง ๋ณ๋ก ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ฑ, ์ด๋ฅผ ์ต์ ํ ์ปดํ์ผ๋ฌ์๊ฒ ๋๊ธฐ๋ ๋ฑ์ ๋ฐฉ์์ ๋์ผํ๋ ์ฝ๋์ ์ต์ ํ๋ฅผ ์ํด ์ธํฐํ๋ฆฌํฐ์ ์ปดํ์ผ๋ฌ ์ฌ์ด์ ๊ท ํ์ ์์ง๋ณ๋ก ๋ค๋ฅธ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์๋ฌธ์ ์ด ํ๋ ์๊ธฐ๊ฒ ๋๋๋ฐ, "์ ์์ง๋ค์ ์ปดํ์ผ๋ฌ๋ง ์ฌ์ฉํด์ ์ปดํ์ผํ์ง ์๊ณ ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์๊น?"
์ด์ ๋ ์ธํฐํ๋ฆฌํฐ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ด์ ์ ์๋ค.
- ๊ธฐ๊ณ์ด๋ก ๋ฐ๋ก ์ปดํ์ผํ๋ ๊ฒ๋ณด๋ค ์ธํฐํ๋ฆฌํฐ๋ก ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ฑํ๋๊ฒ์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ๋ค.
- ๋ฐ์ดํธ์ฝ๋๋ ๊ธฐ๊ณ์ด๋ณด๋ค ๊ฐ๊ฒฐํ๊ธฐ ๋๋ฌธ์ ํ์ฑ์์ ์ค๋ฒํค๋๊ฐ ์๋ค.
- ์ต์ ํ ํน์ ๋ค์ ๋๋ฆฌ๋ ๊ณผ์ ์์ ๋ฐ์ดํธ์ฝ๋ ํ๋๋ง ์๊ฐํ๋ฉด ๋๊ธฐ์ ์ปดํ์ผ ํ์ดํ ๋ผ์ธ์ ๋ณต์ก์ฑ์ด ๊ฐ์ํ๋ค.
๋ํ Javascript์์๋ ๋ค๋ฅธ ์ธ์ด์ ๋ค๋ฅด๊ฒ ์๋ฃํ์ด ์คํ ์์ ์์ ๋์ ์ผ๋ก ํ ๋น๋๊ธฐ์ ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผ์์๋ ํด๋น ์๋ฃํ์ ์ ์ถํ๊ธฐ๊ฐ ๋ฐ์ดํธ์ฝ๋์ ๋นํด ์ด๋ ต๋ค๋ ์ด์ ๋ ์กด์ฌํ๋ค.