์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 

๋น ๋ฅด๊ฒŒ ์•Œ์•„๋ณด๋Š” Javascript V8์—”์ง„

JavaScript์—”์ง„์ธ V8์— ๋Œ€ํ•ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ์ข€ ๋” ํšจ์œจ์ ์ธ ์ฝ”๋“œ์ž‘์„ฑ๋ฒ•์— ๋Œ€ํ•œ ํžŒํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Thumbnail

์ดˆ๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • V8 ์—”์ง„ ๋™์ž‘๋ฐฉ์‹๊ณผ ์—ญ์‚ฌ

  • JavaScript ์ฝ”๋“œ ์‹คํ–‰ํ๋ฆ„

  • ์ธ๋ผ์ด๋‹, ํžˆ๋“  ํด๋ž˜์Šค, ์ธ๋ผ์ธ ์บ์‹ฑ ๋“ฑ ์ตœ์ ํ™” ๊ธฐ๋ฒ•

  • ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ ์ตœ์ ํ™” ํŒ

V8 ์—”์ง„์˜ ๋™์ž‘๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ ,

ํ•จ๊ป˜ ์„ฑ์žฅํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด์š”!


์›น ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์ž์ฃผ ์ ‘ํ•˜๋Š” Chrome ๋ธŒ๋ผ์šฐ์ €์™€ Node.js ์—์„œ ์‚ฌ์šฉ๋˜๋Š”

Google์ด ๊ฐœ๋ฐœํ•œ JavaScript ์—”์ง„์ž…๋‹ˆ๋‹ค.


์ด๋Ÿฐ ๋ถ„๋“ค์—๊ฒŒ ๋„์›€์ด ๋˜์š” ๐Ÿค“

๐Ÿค”: ๋” ์ข‹์€ JavaScript ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ ์‹ถ์€๋ฐ...

๐Ÿค—: JavaScript ๋ฌธ๋ฒ•์€ ์•Œ์ง€๋งŒ ๋” ์ข‹์€ ๊ฐœ๋ฐœ์ž๋กœ ๊ฑฐ๋“ญ๋‚˜๊ธฐ ์œ„ํ•ด์„ , JavaScript ์—”์ง„์˜ ์ž‘๋™์›๋ฆฌ๋ฅผ ์–ด๋А์ •๋„๋Š” ์•Œ๊ณ  ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๊ณ  ์ตœ์ ํ™”๋˜๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ์ž‘์„ฑํ•œ ๊ฒƒ๊ณผ ์ดํ•ดํ•˜๊ณ  ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์—๋Š” ํฐ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿค”: ๊ทธ๋ž˜์„œ ์—”์ง„์ด ์™œ ์ค‘์š”ํ•œ๊ฐ€์š”?

๐Ÿค—: ์—”์ง„์ด ์—†๋‹ค๋ฉด JavaScript ์–ธ์–ด๋Š” ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์—†์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๋ฌผ๋ก , ์—”์ง„ ๋‚ด๋ถ€๊นŒ์ง€ ์•Œ ํ•„์š”๋Š” ์—†์ง€๋งŒ, ๋™์ž‘๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ๋ฉด ๋” ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ‘๋ฐ”ํƒ•์ด ๋˜๋ฆฌ๋ผ ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋‚ด์šฉ์„ ๋ฐฐ์›Œ์š” ๐Ÿคฉ

์„น์…˜ 0. ๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ...

์ด ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ์–ป์„์ ์€ ๋ฌด์—‡(What)์ด ์žˆ์„์ง€? ์™œ(Why) ์•Œ์•„์•ผ ํ•˜๋Š”์ง€? ํ•จ๊ป˜ ์•Œ์•„๋ด์š”!

์„น์…˜ 1. JavaScript V8์—”์ง„

JIT ์ปดํŒŒ์ผ๋Ÿฌ, ์ธํ„ฐํ”„๋ฆฌํ„ฐ, ์ •์  ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋ฉฐ V8 ์—”์ง„์˜ ๋™์ž‘๋ฐฉ์‹์„ ํ•จ๊ป˜ ์•Œ์•„๋ด์š”!
๋˜ํ•œ, V8 ์—”์ง„์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ๊ณผ ์—ญ์‚ฌ์— ๋Œ€ํ•ด ์Šต๋“ํ•˜๊ณ  ๋‹ค๋ฅธ JavaScript ์—”์ง„์ธ SpiderMonkey์™€ JavaScriptCore(JSC)์˜ ์ปดํŒŒ์ผ๋Ÿฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋น„๊ตํ•ด๋ด์š”!

section1.001

์„น์…˜ 2. V8 ์—”์ง„์˜ ์ตœ์ ํ™” ์ „๋žต - ์ธ๋ผ์ด๋‹ (Inlining)

์ธ๋ผ์ด๋‹ ์ตœ์ ํ™”๋ž€ ์–ด๋–ค ๊ฑด์ง€ ์•Œ์•„๋ด์š”!
๋˜ํ•œ, ์ธ๋ผ์ด๋‹ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์ด์ ์ด ์žˆ์„์ง€๋„ ์ƒ๊ฐํ•ด๋ด์š”!

section2.001

์„น์…˜ 3. V8 ์—”์ง„์˜ ์ตœ์ ํ™” ์ „๋žต - ํžˆ๋“  ํด๋ž˜์Šค (Hidden Class)

JavaScript Object๋ฅผ ECMAScript Spec์ƒ์—์„œ ์ •์˜ํ•œ  ํ˜•ํƒœ๋ฅผ ์•Œ์•„๋ณด๊ณ  ๊ฐ์ฒด ๋‚ด ์†์„ฑ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์•Œ์•„๋ด์š”!
๊ทธ๋ฆฌ๊ณ  ์™œ ํžˆ๋“  ํด๋ž˜์Šค๋ผ๋Š” ๊ฐœ๋…์ด ์ƒ๊ธฐ๊ฒŒ ๋˜์—ˆ๋Š”์ง€, ๋˜ ์–ด๋–ค ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๋ณด๊ณ  Transition Chains์„ ๊ตฌ์„ฑํ•˜๋Š” ์ˆœ์„œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ™์ด ์‚ดํŽด๋ด์š”!

section3.001

์„น์…˜ 4. V8 ์—”์ง„์˜ ์ตœ์ ํ™” ์ „๋žต - ์ธ๋ผ์ธ ์บ์‹ฑ (Inline Caches, ICs)

์„น์…˜ 3์—์„œ ํžˆ๋“  ํด๋ž˜์Šค์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ์Šต๋‹ˆ๋‹ค! ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ตœ์ ํ™”ํ•˜๋Š” ์ธ๋ผ์ธ ์บ์‹ฑ ๋™์ž‘๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„๋ด์š”!

์ธ๋ผ์ธ ์บ์‹ฑ์ด ๊ด€๋ฆฌํ•˜๋Š” ์ƒํƒœ(Transition Mark)๋Š” ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๋ฉฐ ์ธ๋ผ์ธ ์บ์‹ฑ์˜ ์ด์ ์„ ์–ป๊ธฐ ์œ„ํ•ด์„  ๋ฌด์—‡์„ ์ฃผ์˜ํ•ด์•ผํ•˜๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ์š”!

section4.001

์„น์…˜ 5. ํžˆ๋“  ํด๋ž˜์Šค(Hidden Class) ์กฐ๊ธˆ ๋” ์‚ดํŽด๋ณด๊ธฐ

์˜ˆ์ œ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉฐ ๋‘ ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ ํžˆ๋“  ํด๋ž˜์Šค๋ฅผ ๊ณต์œ ํ•˜๋Š”์ง€ ๋งž์ถฐ๋ณด๋Š” OX ํ€ด์ฆˆ ์‹œ๊ฐ„์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค!
์ด 6๊ฐœ์˜ ํ€ด์ฆˆ๋ฅผ ์ค€๋น„ํ•ด๋ณด์•˜๋Š”๋ฐ์š”. ํ™”๋ฉด์„ ์ž ์‹œ ๋ฉˆ์ถ”๋ฉฐ ์ •๋‹ต์„ ์ƒ๊ฐํ•ด์ฃผ๋ฉฐ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”!
๊ทธ๋ฆฌ๊ณ  Node.js๋กœ V8์—”์ง„์˜ ๋‚ด์žฅํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ํžˆ๋“ ํด๋ž˜์Šค์ธ์ง€ ์ง์ ‘ ๋น„๊ตํ•ด๋ณด๋Š” ์‹œ๊ฐ„๋„ ๊ฐ€์ง€๊ฒ ์Šต๋‹ˆ๋‹ค!

section5.001

์„น์…˜ 6. ๋งˆ์น˜๋ฉฐ...

๋ฐฐ์› ๋˜ ๊ฐœ๋…๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ์ฝ”๋“œ ์ž‘์„ฑ์‹œ ์ตœ์ ํ™” ํŒ 3๊ฐ€์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ฉฐ ๊ฐ•์˜๋ฅผ ๋งˆ๋ฌด๋ฆฌ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

๊ฐ•์˜๋ฅผ ์™„์ฃผํ•˜์…จ์Šต๋‹ˆ๋‹ค! ์ •๋ง ์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค. ๐ŸŽ‰

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • V8 ์—”์ง„ ๋™์ž‘๋ฐฉ์‹์ด ๊ถ๊ธˆํ–ˆ๋˜ ๋ถ„๋“ค

  • JavaScript ์ฝ”๋“œ ์‹คํ–‰ ํ๋ฆ„์„ ์•Œ๊ณ ์‹ถ์œผ์‹  ๋ถ„๋“ค

  • ๋‚ด ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ตœ์ ํ™”๋˜๋Š”์ง€ ๊ถ๊ธˆํ–ˆ๋˜ ๋ถ„๋“ค

  • ์—”์ง„๊ด€์ ์˜ ์‹œ์•ผ๋ฅผ ๊ฐ–์ถ”๊ณ  ์‹ถ์œผ์‹  ๋ถ„๋“ค

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • JavaScript ๊ธฐ๋ณธ ์ง€์‹

์•ˆ๋…•ํ•˜์„ธ์š”
ํ•˜์ •ํ›ˆ์ž…๋‹ˆ๋‹ค.

95

๋ช…

์ˆ˜๊ฐ•์ƒ

5

๊ฐœ

์ˆ˜๊ฐ•ํ‰

5

๊ฐœ

๋‹ต๋ณ€

5.0

์ 

๊ฐ•์˜ ํ‰์ 

1

๊ฐœ

๊ฐ•์˜

์•ˆ๋…•ํ•˜์„ธ์š”.

์—ฌ๋Ÿฌ ๊ธฐ์ˆ ๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๊ด€์‹ฌ์ด ๋งŽ์€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

 

๐Ÿ“ง: official.hajeonghun@gmail.com

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

20๊ฐœ โˆ™ (1์‹œ๊ฐ„ 34๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์•„์ง ์ถฉ๋ถ„ํ•œ ํ‰๊ฐ€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.
๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ˆ˜๊ฐ•ํ‰์˜ ์ฃผ์ธ๊ณต์ด ๋˜์–ด์ฃผ์„ธ์š”!