[!] ์šฐ์„ ์ ์œผ๋กœ ํ•œ๊ธ€๋กœ ์ž‘์„ฑํ•˜์—ฌ ์ถ”ํ›„ ๋ฒˆ์—ญํ•  ์˜ˆ์ •.

Summary

์šฐ๋ฆฌ๊ฐ€ ๋Œ€์ค‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Google Chrome browser์—๋Š” ์›นํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด javascript๊ฐ€ ๊ตฌ๋™๋  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, JS๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๊ณ  ์ปดํŒŒ์ผํ•˜๋Š” ์—ญํ• ์€ ์–ด๋–ค ๊ฒƒ์ด ๋งก๊ณ  ์žˆ์„๊นŒ? ์ด ์ฑ•ํ„ฐ์—์„œ๋Š” ๋‚ด๊ฐ€ ๊ณต๋ถ€ํ–ˆ๋˜ chromium javascript engine์ธ V8์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

V8์˜ ๊ตฌ์กฐ๋Š” ์–ด๋–ป๊ฒŒ ๋˜์–ด ์žˆ์„๊นŒ?

V8๊ฐ™์€ ๊ฒฝ์šฐ Chrome ๊ตฌ๋™ ์‹œ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋˜์–ด heap ๋ฐ stack ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ด€๋ฆฌํ•˜๋ฉด์„œ Javascript์˜ ๊ฐ์ข… ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ execution file๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด์™ธ์— Task/Callback queue, Microtask queue, WebAPI ๋“ฑ ๋‹ค์–‘ํ•œ ์š”์†Œ๊ฐ€ Chromium browser๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๋™์ž‘ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์—ญํ• ์€ javascript ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ๋œ ์ปดํ“จํ„ฐ์— ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œ์ผœ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋•Œ JIT(Just-In-Time) Compiler๋ผ๋Š” ๋…์ฐฝ์ ์ธ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

V8๋งŒ์˜ ํŠน์ง•์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ?

inter-comp.png

์šฐ์„  ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

  1. ์ธํ„ฐํ”„๋ฆฌํ„ฐ
    • ์žฅ์  : ํ•œ ์ค„ ํ•œ ์ค„ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
    • ๋‹จ์  : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์ ์  ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ์ฐจ๋ก€ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์˜ ๊ฒฝ์šฐ, ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ํ•œ ์ค„ ์ฝ๋Š” ๋ฐฉ์‹์— ์˜ํ•ด ๊ทธ๋•Œ๊ทธ๋•Œ ์‹คํ–‰๋œ๋‹ค.
  2. ์ปดํŒŒ์ผ๋Ÿฌ
    • ์žฅ์  : ํŒŒ์ผ ์ „์ฒด๋ฅผ ํ•œ๋ฒˆ์— ์ฝ์–ด์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž‘์—…์„ ๋‹จ์ˆœํ™”์‹œํ‚จ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ํ•จ์ˆ˜๋ฅผ 10์–ต๋ฒˆ ๋ฐ˜๋ณตํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐ˜๋ณตํ•˜๋„๋ก ์ปดํŒŒ์ผ ํ•œ๋‹ค. ์ด์ฒ˜๋Ÿผ ๋ถˆํ•„์š”ํ•œ ๋™์ž‘์„ ์ œ๊ฑฐํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋ฐฉ์‹์„ ์ตœ์ ํ™”, optimization์ด๋ผ๊ณ  ํ•œ๋‹ค.
      (์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” optimizeํ•˜์ง€ ์•Š๋Š”๋‹ค )
    • ๋‹จ์  : ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ , ์ฝ”๋“œ ์‹คํ–‰ ์ „ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผ ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ์— ์†๋„๊ฐ€ ๋Š๋ฆด ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ๋‚ด๋ถ€๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ์ž ์‹œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ฐ„๋‹จํ•œ ๊ฐœ๋…๊ณผ ์žฅ๋‹จ์ ์„ ์งš์–ด๋ดค๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ณผ์—ฐ V8 ์—”์ง„์€ ์–ด๋–ค ๋ฐฉ์‹์„ ์ทจํ–ˆ๊ธธ๋ž˜ ๋‹ค๋ฅธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„๋ณด๋‹ค ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๋ฐ”๋กœ ์—ฌ๊ธฐ์—์„œ V8 ์—”์ง„์˜ ๋…ํŠนํ•œ ์–ธ์–ด ๋ณ€ํ™˜ ๋„๊ตฌ์ธ JIT Compiler๊ฐ€ ๋“ค์–ด์˜จ๋‹ค. JIT์€ Just In Time์˜ ์•ฝ์ž์ด๋‹ค.

JIT Compiler์˜ ๊ตฌ์กฐ

jit.png

V8 ์—”์ง„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค.

  1. Parser : ์ฝ”๋“œ๋ฅผ Lexical Analysis๋ผ๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ํ† ํฐ์œผ๋กœ ๋ถ„ํ•ดํ•œ๋‹ค.
  2. AST(Abstract Syntax Tree) : Parser์—์„œ ๋ถ„ํ•ด๋œ ํ† ํฐ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ถ”์ƒ์ ์ธ ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  3. Ignition : AST์—์„œ ๋‚˜์˜จ ํŠธ๋ฆฌ๋ฅผ V8์˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์ธ ignition์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ์ด๊ฒƒ์„ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” bytecode๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค. (High-level Lang to Low-level Lang)
  4. TurboFan, Profiler : bytecode๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Human-readable Lang์„ ์‹คํ–‰์‹œํ‚ค๊ณ , ๊ทธ์ค‘ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋ผ๊ณ  ํŒ๋ณ„๋œ ์ฝ”๋“œ ์กฐ๊ฐ์€ TurboFan์œผ๋กœ ๋ณด๋‚ด์ ธ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋กœ ์žฌ๊ตฌ์„ฑ๋œ๋‹ค. (์ด๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋ผ๋Š” ๋ง์ด ๋งค์šฐ ์ถ”์ƒ์ ์ด๋ฏ€๋กœ Profiler ๋ผ๋Š” ์นœ๊ตฌํ•œํ…Œ ์‚ฌ์šฉ ๋นˆ๋„ ์ˆ˜ ๋“ฑ์„ ์ˆ˜์ง‘ํ•˜๊ฒŒ๋” ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๊ณ , ๋ชจ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด Turbofan์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋Œ€๋กœ ์ตœ์ ํ™”๋ฅผ ํ•œ๋‹ค)

Turbofan์€ ์–ด๋–ค ์กฐ๊ฑด์œผ๋กœ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฑธ๊นŒ?

  1. ์ฝ”๋“œ๊ฐ€ ๋œจ๊ฒ๊ณ  ์•ˆ์ •์ ์ธ ๊ฒƒ, ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์ž์ฃผ ํ˜ธ์ถœ๋˜๊ณ (๋œจ๊ฒ๊ณ ) ์ฝ”๋“œ๊ฐ€ ์•ˆ ๋ณ€ํ•จ(์•ˆ์ •์ )์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ๋งค๋ฒˆ ๊ฐ™์€ ํ–‰๋™์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ ๋‚ด์— ์žˆ๋Š” ์ฝ”๋“œ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•˜๊ธฐ ์‰ฝ๋‹ค.

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

[!] ๊ทธ๋Ÿฌ๋‚˜, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” 100% ์™„๋ฒฝํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ ๋ฐœ์ ํ™”(deoptimization)๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜๋„ ์žˆ๋‹ค.

Next Topic

๋‹ค์Œ์—๋Š” V8์—์„œ ์ž๋ฃŒํ˜•์ด๋‚˜ JS์˜ ๋‹ค์–‘ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์–ด๋–ค ์‹์œผ๋กœ ์ €์žฅ์ด ๋˜๊ณ  ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

reference

Categories:

Updated:

Leave a comment