๐ Code Splitting ์ด๋?
Code spliting์ ํฐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฒญํฌ๋ก ๋ถํ ํ์ฌ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ์ ์ด๋ค. ์ด๋ฌํ ์์ ์ฒญํฌ๋ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์์ผ๋ฏ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๋จ์ถํ ์ ์๋ค.
๐ Javascript์์ Code Splitting์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
๐ ๋์ import ์ฌ์ฉ
์ต์ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋์ ์ํฌํธ์ "import()" ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋์ ์จ๋๋งจ๋ ๋ฐฉ์์ผ๋ก ๋ก๋ํ ์ ์๋ค. ๋์ import๋ Promise๋ฅผ ๋ฐํํ๋ฏ๋ก ํ์ํ ๋ ๋ชจ๋์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋ํ ์ ์๋ค.
์๋ ์์์์๋ ํ์ด์ง๊ฐ ์ฒ์ ๋ก๋๋ ๋๊ฐ ์๋๋ผ ๋ฒํผ์ด ํด๋ฆญ๋ ๋ my-module.js ๋ชจ๋์ด ๋ก๋๋๋ค.
const button = document.getElementById('load-button');
button.addEventListener('click', async () => {
const module = await import('./my-module.js');
module.doSomething();
});
๐ Webpack ๋๋ ๊ธฐํ ๋ฒ๋ค๋ฌ ๊ตฌ์ฑ
Webpack๊ณผ ๊ฐ์ ๋น๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ code splitting์ ๊ตฌ์ฑํ์ฌ ๋ฒ๋ค์ ๋ ์์ ์ฒญํฌ๋ก ์๋ ๋ถํ ํ ์ ์๋ค.
์๋๋ code splitting ์ ์ํ Webpack ์ค์ ์์์ธ๋ฐ, ์ด๊ธฐ ๋ฐ ๋น๋๊ธฐ ์ํฌํธ ๋ชจ๋์ ๋ํด ์ฒญํฌ๋ฅผ ๋ถํ ํ๋๋ก Webpack์ ์ง์ํ๋ค.
// webpack.config.js
module.exports = {
// ...๊ธฐํ ์ค์ ์๋ต...
optimization: {
splitChunks: {
chunks: 'all',
},
},
};
๐ Route ๊ธฐ๋ฐ Code Splitting
์ฌ๋ฌ route๋ฅผ ๊ฐ์ง ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ route ๊ธฐ๋ฐ code splitting์ ๊ตฌํํ ์ ์๋ค. ๊ฐ route์ JavaScript ์ฝ๋๊ฐ ๋ณ๋์ ์ฒญํฌ๋ก ๋ถํ ๋์ด ๊ฐ route์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ด ๋จ์ถ๋๋ค.
์์์์ "Home", "About" ์ปดํฌ๋ํธ๋ ๊ฐ๊ฐ์ ๊ฒฝ๋ก์ ์ก์ธ์คํ ๋ ์จ๋๋งจ๋ ๋ฐฉ์์ผ๋ก ๋ก๋๋๋ค.
import { lazy, Suspense } from 'react';
const Home = lazy(() => import('./Home'));
const About = lazy(() => import('./About'));
function App() {
return (
<div>
<Suspense fallback={<div>Loading...</div>}>
<Route path="/" exact component={Home} />
<Route path="/about" component={About} />
</Suspense>
</div>
);
}
๐ Tree Shaking
code splitting์ ๊ตฌํํ ๋ ๋น๋ ์ค์ ์์ tree shaking์ ํ์ฑํํ ์ ์๋ค. tree shaking์ ๊ฐ์ ธ์จ ๋ชจ๋์์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํด์ ํ์ํ ์ฝ๋๋ง ์ต์ข ๋ฒ๋ค์ ํฌํจ๋๋๋ก ๋ง๋ ๋ค.
๐ ๋ถ์ ๋ฐ ์ต์ ํ
code splitting์ ๊ตฌํํ ํ์๋ Webpack ๋ฒ๋ค ๋ถ์๊ธฐ ๋๋ ๊ตฌ๊ธ ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ์ performance(์ฑ๋ฅ)๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ๋ค์ ๋ถ์ํ๋ ๊ฒ์ด ์ข๋ค. ์ด๋ฅผ ํตํด ์ถ๊ฐ์ ์ผ๋ก ์ต์ ํํด์ผ ํ ๋ถ๋ถ์ ๋ํด ์ ์ ์๋ค.
๐ Lazy Loading Library ์ฌ์ฉํ๊ธฐ
React๋ Vue.js์ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ/ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ code splitting ๋ฐ lazy loading์ ์ํ ๋ด์ฅ ์ง์ ๋๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์๋ฅผ ๋ค์ด React์ "React.lazy()" ๋ Vue์ "vue-router"๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ ์์ํฌ๋ณ ๋ฐฉ์์ผ๋ก code splitting์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
๐ ๋ง์น๋ฉฐ
code splitting์ ๊ตฌํํ๋ฉด ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ด๊ณ ๋ฆฌ์์ค ํ์ฉ์ ์ต์ ํํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ค. ํนํ ๋ณต์กํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ด ํฌํจ๋ ๋๊ท๋ชจ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ์๋ ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ค์ํ๋ค.
๊ฐ๋ฐ ์งํ ์ํฉ์ ๋ฐ๋ผ, ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ/ํ๋ ์์ํฌ์ ๋ฐ๋ผ ์ ์ ํ ์ต์ ํ๋ฅผ ์ ์ฉํด๋ณด์!
'Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ณตํต ์ปดํฌ๋ํธ ์ค๊ณ ์ฌ์ (0) | 2025.03.30 |
---|---|
CSS ๋ญ ์ธ๊น์? (TailwindCSS vs Styled-components) (0) | 2023.05.01 |