Skip to content

Latest commit

ย 

History

History
111 lines (67 loc) ยท 6.24 KB

javascript_mechanism_engine.md

File metadata and controls

111 lines (67 loc) ยท 6.24 KB

Javascript ๋™์ž‘ ์›๋ฆฌ - ์—”์ง„ํŽธ

์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ 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๋ฅผ ๊ฐ€์ง€๊ณ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ ์ƒ์„ฑ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์‹ค์ œ ์ž‘๋™์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

์ดํ›„ ๋” ๋น ๋ฅธ ์†๋„๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™” ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ๋ณด๋‚ด, ์ตœ์ ํ™”๋œ ๊ธฐ๊ณ„์–ด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๋ถ€๋ถ„์—์„œ๋Š” ์—”์ง„๋งˆ๋‹ค ๊ฐ๊ธฐ ๋‹ค๋ฅด๋‹ค.

์ฆ‰, ๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

  1. ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.
  2. ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

์ตœ์ ํ™” ๊ณผ์ •

๊ฐ๊ธฐ ๋‹ค๋ฅธ ์—”์ง„๋“ค์˜ ์ตœ์ ํ™” ๊ณผ์ •์„ ๋ณด๊ธฐ์ „์— ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ์ตœ์ ํ™” ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•ด ๋จผ์ € ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž.

  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ

    ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์›์‹œ์ฝ”๋“œ ๋ช…๋ น์–ด๋“ค์„ ํ•œ๋ฒˆ์— ํ•œ์ค„์”ฉ ์ฝ์–ด ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.
    ๊ณ ๊ธ‰ ๋ช…๋ น์–ด๋“ค์„ ์ง์ ‘ ๊ธฐ๊ณ„์–ด๋กœ ํ•œ๋ฒˆ์— ์ „๋ถ€ ๋ฒˆ์—ญํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํ•œ ์ค„์”ฉ ๋ฒˆ์—ญํ•œ ๋’ค ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆ์—ญ ์†๋„๋Š” ๋น ๋ฅด๋‚˜ ์‹คํ–‰ ์†๋„๋Š” ๋Š๋ฆฌ๋‹ค.

  • ์ตœ์ ํ™” ์ปดํŒŒ์ผ๋Ÿฌ

    ๊ธฐ๋ณธ์ ์ธ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง„ ์•Š์œผ๋‚˜, ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์„ ์ตœ์ ํ™” ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์‹œ์ ์—์„œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ํ•ด์„ํ•œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

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์—์„œ๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋‹ค๋ฅด๊ฒŒ ์ž๋ฃŒํ˜•์ด ์‹คํ–‰ ์‹œ์ ์—์„œ ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๊ธฐ์— ๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผ์‹œ์—๋Š” ํ•ด๋‹น ์ž๋ฃŒํ˜•์„ ์œ ์ถ”ํ•˜๊ธฐ๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ์— ๋น„ํ•ด ์–ด๋ ต๋‹ค๋Š” ์ด์œ ๋„ ์กด์žฌํ•œ๋‹ค.





Reference