[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