Facebook ์˜คํ”ˆ ์†Œ์Šค Hermes JavaScript ์—”์ง„

Facebook ์˜คํ”ˆ ์†Œ์Šค ๊ฒฝ๋Ÿ‰ JavaScript ์—”์ง„ ์‹ ๋“ค์˜ ์‚ฌ์ž, ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ์ตœ์ ํ™”๋จ ๋„ค์ดํ‹ฐ๋ธŒ์— ๋ฐ˜์‘ํ•˜๋‹ค ์•ˆ๋“œ๋กœ์ด๋“œ ํ”Œ๋žซํผ์—์„œ. ํ—ค๋ฅด๋ฉ”์Šค ์ง€์› ๋‚ด์žฅ ์˜ค๋Š˜์˜ 0.60.2 ๋ฆด๋ฆฌ์Šค๋ถ€ํ„ฐ React Native์—์„œ. ์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ๋ณธ JavaScript ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๊ธธ๊ณ  ์ƒ๋‹นํ•œ ๋ฆฌ์†Œ์Šค ์†Œ๋น„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•”ํ˜ธ ์ž‘์„ฑ์ž : C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ MIT ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

Hermes๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ๊ฐ„ ๋‹จ์ถ•, ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„ ๊ฐ์†Œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํฌ๊ธฐ ๊ฐ์†Œ ๋“ฑ์˜ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. V8์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ๋‹จ๊ณ„๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ์ฆ‰์‹œ ์ปดํŒŒ์ผํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. Hermes๋Š” ์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋ฅผ ๋นŒ๋“œ ๋‹จ๊ณ„๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž‘๊ณ  ํšจ์œจ์ ์ธ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

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

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

์—”์ง„์—์„œ ์— ์˜ํ•ด ์ง€์› ECMAScript 2015 JavaScript ํ‘œ์ค€์˜ ์ผ๋ถ€(๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋Š” ์ด๋ฅผ ์™„์ „ํžˆ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ž„)์ด๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ์กด React Native ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Hermes๋Š” ๋ช…๋ น๋ฌธ, ๋ฆฌํ”Œ๋ ‰์…˜(Reflect ๋ฐ Proxy), Intl API ๋ฐ RegExp์˜ ์ผ๋ถ€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ eval()์˜ ๋กœ์ปฌ ์‹คํ–‰์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. React Native ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Hermes๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ์— "enableHermes: true" ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. CLI ๋ชจ๋“œ์—์„œ Hermes๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ๋ช…๋ น์ค„์—์„œ ์ž„์˜์˜ JavaScript ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ์ง€์—ฐ ์ปดํŒŒ์ผ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค ์ค‘์— ๋งค๋ฒˆ JavaScript๋ฅผ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ ์žฅ์น˜์— ์ฆ‰์‹œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์‹œ์— Facebook์€ Hermes๋ฅผ Node.js ๋ฐ ๊ธฐํƒ€ ์†”๋ฃจ์…˜์— ์ ์šฉํ•  ๊ณ„ํš์ด ์—†์œผ๋ฉฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋งŒ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค(JIT ๋Œ€์‹  AOT ์ปดํŒŒ์ผ์€ RAM์ด ์ œํ•œ๋˜๊ณ  ํ”Œ๋ž˜์‹œ๊ฐ€ ๋Š๋ฆฐ ๋ชจ๋ฐ”์ผ ์‹œ์Šคํ…œ์˜ ๋งฅ๋ฝ์—์„œ ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค). Microsoft ์ง์›์ด ์‹ค์‹œํ•œ ์˜ˆ๋น„ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๋ณด์—ฌ ์ฃผ๋Š”Hermes๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Android์šฉ Microsoft Office ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ 1.1์ดˆ ๋งŒ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‹œ๋™ ํ›„ 21.5MB์˜ RAM์„ ์†Œ๋น„ํ•˜๋Š” ๋ฐ˜๋ฉด, V8 ์—”์ง„์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ 1.4์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋Š” 30MB์ž…๋‹ˆ๋‹ค.

์ถ”๊ฐ€: ํŽ˜์ด์Šค๋ถ ์ถœํŒ ์ž์ฒด ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ. MatterMost ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ Hermes๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ž‘์—… ๊ฐ€์šฉ์„ฑ ์‹œ์ž‘ ์‹œ๊ฐ„(TTI, Time To Interact)์ด 4.30์ดˆ์—์„œ 2.01์ดˆ๋กœ ๊ฐ์†Œํ–ˆ๊ณ , APK ํŒจํ‚ค์ง€ ํฌ๊ธฐ๊ฐ€ 41MB์—์„œ 22MB๋กœ ์ค„์—ˆ์œผ๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋Ÿ‰์€ 185์—์„œ 136์œผ๋กœ ์ค„์—ˆ์Šต๋‹ˆ๋‹ค. MB.

์ถœ์ฒ˜ : opennet.ru

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