Cloudflare, Mozilla ๋ฐ Facebook์€ JavaScript ๋กœ๋”ฉ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด BinaryAST๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

Cloudflare, Mozilla, Facebook ๋ฐ Bloomberg์˜ ์—”์ง€๋‹ˆ์–ด ์ œ์•ˆ ๋œ ์ƒˆ๋กœ์šด ํ˜•์‹ ๋ฐ”์ด๋„ˆ๋ฆฌ AST ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์ดํŠธ๋ฅผ ์—ด ๋•Œ JavaScript ์ฝ”๋“œ์˜ ์ „๋‹ฌ ๋ฐ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด. BinaryAST๋Š” ๊ตฌ๋ฌธ ๋ถ„์„ ๋‹จ๊ณ„๋ฅผ ์„œ๋ฒ„ ์ธก์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์ด๋ฏธ ์ƒ์„ฑ๋œ ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST). BinaryAST๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” JavaScript ์†Œ์Šค ์ฝ”๋“œ ๊ตฌ๋ฌธ ๋ถ„์„์„ ์šฐํšŒํ•˜์—ฌ ์ฆ‰์‹œ ์ปดํŒŒ์ผ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œํ—˜์šฉ ์ค€๋น„๋œ MIT ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ์ œ๊ณต๋˜๋Š” ์ฐธ์กฐ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. ํŒŒ์‹ฑ์—๋Š” Node.js ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ตœ์ ํ™” ๋ฐ AST ์ƒ์„ฑ์„ ์œ„ํ•œ ์ฝ”๋“œ๋Š” Rust๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์ธก ์ง€์›
BinaryAST๋Š” ์ด๋ฏธ ๋‹ค์Œ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์•ผ๊ฐ„ ์ง‘ํšŒ ํŒŒ์ด์–ดํญ์Šค. BinaryAST์˜ ์ธ์ฝ”๋”๋Š” ์ตœ์ข… ์‚ฌ์ดํŠธ ๋„๊ตฌ ์ˆ˜์ค€๊ณผ ํ”„๋ก์‹œ ๋˜๋Š” ์ฝ˜ํ…์ธ  ์ „๋‹ฌ ๋„คํŠธ์›Œํฌ ์ธก์˜ ์™ธ๋ถ€ ์‚ฌ์ดํŠธ ํŒจํ‚ค์ง• ์Šคํฌ๋ฆฝํŠธ ๋ชจ๋‘์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์›Œํ‚น๊ทธ๋ฃน์˜ BinaryAST ํ‘œ์ค€ํ™” ๊ณผ์ •์€ ์ด๋ฏธ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ECMA TC39, ์ดํ›„ ํ˜•์‹์€ gzip ๋ฐ brotli์™€ ๊ฐ™์€ ๊ธฐ์กด ์ฝ˜ํ…์ธ  ์••์ถ• ๋ฐฉ๋ฒ•๊ณผ ๊ณต์กดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cloudflare, Mozilla ๋ฐ Facebook์€ JavaScript ๋กœ๋”ฉ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด BinaryAST๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

Cloudflare, Mozilla ๋ฐ Facebook์€ JavaScript ๋กœ๋”ฉ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด BinaryAST๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

JavaScript๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ฝ”๋“œ ๋กœ๋“œ ๋ฐ ๊ตฌ๋ฌธ ๋ถ„์„ ๋‹จ๊ณ„์— ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์ธ๊ธฐ ์‚ฌ์ดํŠธ์—์„œ ๋‹ค์šด๋กœ๋“œ๋œ JavaScript์˜ ์–‘์ด 10MB์— ๊ฐ€๊น๋‹ค๋Š” ์ (์˜ˆ: LinkedIn์˜ ๊ฒฝ์šฐ 7.2MB, Facebook - 7.1MB, Gmail - 3.9MB)์„ ๊ณ ๋ คํ•˜๋ฉด JavaScript์˜ ์ดˆ๊ธฐ ์ฒ˜๋ฆฌ์— ์ƒ๋‹นํ•œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ๋กœ๋“œ๋  ๋•Œ ์ฆ‰์‹œ AST๋ฅผ ์™„์ „ํžˆ ๋นŒ๋“œํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ € ์ธก์˜ ๊ตฌ๋ฌธ ๋ถ„์„ ๋‹จ๊ณ„๋„ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค. ํ˜„์žฌ ์š”์†Œ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด ๋ˆ„๋ฝ๋œ ์ •๋ณด).

๊ทธ๋“ค์€ ์ฝ”๋“œ๋ฅผ ์ตœ์†Œํ™”๋˜๊ณ  ์••์ถ•๋œ ํ˜•ํƒœ๋กœ ๋ฐฐํฌํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ƒ์„ฑ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์บ์‹ฑํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ์‚ฌ์ดํŠธ์—์„œ๋Š” ์ฝ”๋“œ๊ฐ€ ์ž์ฃผ ์—…๋ฐ์ดํŠธ๋˜๋ฏ€๋กœ ์บ์‹ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. WebAssembly๊ฐ€ ํ•ด๊ฒฐ์ฑ…์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฝ”๋“œ์— ๋ช…์‹œ์ ์ธ ์ž…๋ ฅ์ด ํ•„์š”ํ•˜๋ฉฐ ๊ธฐ์กด JavaScript ์ฝ”๋“œ์˜ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ JavaScript ์Šคํฌ๋ฆฝํŠธ ๋Œ€์‹  ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํƒ€์‚ฌ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ๊ฒ€์ฆํ•˜๊ธฐ ์–ด๋ ต๊ณ , ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋ฉด ์›น ๊ณ„์ธตํ™”๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๊ณ , ์ถ”๊ฐ€ ๋ณด์•ˆ ์œ„ํ—˜์ด ๋ฐœ์ƒํ•˜๋ฉฐ, ๋ฒ”์šฉ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ˜•์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

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

facebook.com ์ฝ”๋“œ ํ…Œ์ŠคํŠธ์— ๋”ฐ๋ฅด๋ฉด JavaScript ๊ตฌ๋ฌธ ๋ถ„์„์€ CPU ๋ฆฌ์†Œ์Šค์˜ 10-15%๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ๊ตฌ๋ฌธ ๋ถ„์„์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ƒ์„ฑ ๋ฐ JIT์šฉ ์ดˆ๊ธฐ ์ฝ”๋“œ ์ƒ์„ฑ๋ณด๋‹ค ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. SpiderMonkey ์—”์ง„์—์„œ๋Š” AST๋ฅผ ์™„์ „ํžˆ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด 500~800ms์ธ๋ฐ BinaryAST๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์ˆ˜์น˜๊ฐ€ 70~90% ์ค„์—ˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์›น ๋ถˆ๊ฝƒ๋†€์ด์˜ ๊ฒฝ์šฐ BinaryAST๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JavaScript ๊ตฌ๋ฌธ ๋ถ„์„ ์‹œ๊ฐ„์ด ์ตœ์ ํ™” ์—†๋Š” ๋ชจ๋“œ์—์„œ๋Š” 3~10%, ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ ๋ฌด์‹œ ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด 90~97% ์ •๋„ ๋‹จ์ถ•๋ฉ๋‹ˆ๋‹ค.
1.2MB JavaScript ํ…Œ์ŠคํŠธ ์„ธํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ BinaryAST๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๋ฐ์Šคํฌํ†ฑ ์‹œ์Šคํ…œ(Intel i338)์—์„œ 314ms์—์„œ 7ms๋กœ, ๋ชจ๋ฐ”์ผ ์žฅ์น˜(HTC One M2019)์—์„œ 1455๋…„์—์„œ 8ms๋กœ ๋นจ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€