[Javascript] Tree Shaking

[์›๋ณธ ๋งํฌ]

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์—์„œ ์ค‘์š”ํ•œ ์ตœ์ ํ™” ์ค‘ ํ•˜๋‚˜๋กœ Tree-Shaking์ด๋ž€ ๊ฒƒ์ด ์žˆ๋‹ค.

https://stackoverflow.com/questions/45884414/what-is-tree-shaking-and-why-would-i-need-it

๋‚˜๋ฌด๋ฅผ ํ„ด๋‹ค๋Š” ๋ง ๊ทธ๋Œ€๋กœ, ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์†Œ์Šค์ฝ”๋“œ๋“ค์„ ์ „๋ถ€ ์ œ๊ฑฐํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์ตœ์ ํ™”๋‹ค.

C/C++, Go, Rust ๋“ฑ ์ •๊ทœ ์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š” ์ •์ƒ์ ์ธ ์–ธ์–ด๋“ค์€, ๋‹น์—ฐํžˆ ์ด๊ฑธ ์‹œํ‚ค์ง€ ์•Š์•„๋„ ๊ทธ๋ƒฅ ์•Œ์•„์„œ ํ•œ๋‹ค. ์ด ์ตœ์ ํ™”๋ฅผ ๋ณดํ†ต dead code elimination์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ, Javascript๋งŒ ์ด์ƒํ•œ ์ž๊ธฐ๋“ค๋งŒ์˜ ์šฉ์–ด๋ฅผ ๋งŒ๋“ค์–ด์„œ ์“ด๋‹ค...

์•„๋ฌดํŠผ ์ €๋Ÿฐ ์–ธ์–ด๋“ค์€ ์•„๋ฌด๋ฆฌ ๋ฌด๊ฑฐ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ importํ•˜๊ณ  ์ฝ”๋“œ์˜ ์–‘์ด ๋งŽ๋”๋ผ๋„, ์ปดํŒŒ์ผํƒ€์ž„์ด ๊ธธ์–ด์งˆ์ง€์–ธ์ • ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์€ ๋”ฑ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋งŒ ํฌํ•จ๋œ ์ฑ„๋กœ ๋งŒ๋“ค์–ด์ง„๋‹ค.




๋ฌธ์ œ

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

๊ทธ๋‚˜๋งˆ Javascript๋ฅผ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋‘๋“œ๋Ÿฌ์ง€์ง€ ์•Š๋Š”๋ฐ, ์›นํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•  ๊ฒฝ์šฐ์—๋Š” Tree-Shaking์„ ์ ์šฉํ•˜๊ณ  ๋ง๊ณ ๋กœ ๊ฝค ๊ทน์ ์ธ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.




๋ฐฉ๋ฒ•๊ณผ ์กฐ๊ฑด

Tree-Shaking์€ webpack ๊ฐ™์€ ์ถ”๊ฐ€ ๋ฒˆ๋“ค๋ง ๋„๊ตฌ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋‹ฌ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.
์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋„๊ตฌ๋Š” webpack, rollup, esbuild, parcel ๋“ฑ์ด ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์€ ๋ฐ˜๋“œ์‹œ ESM์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
์™œ๋‚˜๋ฉด, import/export๋ฅผ ์“ธ ๊ฒฝ์šฐ์—๋Š” ์ปดํŒŒ์ผํƒ€์ž„์— ์ข…์†๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋˜์–ด์„œ ์ปดํŒŒ์ผํƒ€์ž„ ์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ CommonJS์™€ require๋ฅผ ์“ธ ๊ฒฝ์šฐ์—๋Š” ์ปดํŒŒ์ผํƒ€์ž„ ๋ถ„์„์ด ์–ด๋ ต๋‹ค.

const foo = require(filename + "foo" + something)

์ด๋”ด์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ €๋Ÿฌ๋ฉด ๋ฌด์Šจ ์ˆ˜๋กœ ์•Œ๊ฒ ๋Š”๊ฐ€?



์ฐธ์กฐ
https://developer.mozilla.org/en-US/docs/Glossary/Tree_shaking
https://stackoverflow.com/questions/45884414/what-is-tree-shaking-and-why-would-i-need-it