# ์ฝ๋ ๋ถํ
์ฝ๋ ๋ถํ (Code Splitting)์ ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (Single Page Application)์ ์ด๊ธฐ ์คํ์์ ํ์ํ ์น ์์์ ๋ชจ๋ ๋ค์ด ๋ฐ๋ ํน์ง์ด ์์ต๋๋ค. ์ฝ๋ ๋ถํ ์ ํ์ฉํ๊ฒ ๋๋ฉด ์ด๊ธฐ ๋ก๋ฉ์์ ๋ชจ๋ ์น ์์์ ๋ค์ด๋ฐ์ง ์๊ณ ํ์ํ ์์ ์ ๋ค์ด ๋ฐ์ ์ฑ๋ฅ ์์ ์ด์ ์ด ์๊น๋๋ค. ์ฐธ๊ณ ๋ก ๋ทฐ์์ ์ฝ๋ ๋ถํ ์ด ๊ฐ๋ฅํ ์ด์ ๋ ๋ทฐ์ ๋น๋๊ธฐ ์ปดํฌ๋ํธ ๋ก๋ฉ (opens new window)๊ณผ ์นํฉ์ ์ฝ๋ ์คํ๋ฆฌํ ๊ธฐ์ (opens new window) ๋ํ์ ๋๋ค.
# ๊ฐ๋ฐ ํ๊ฒฝ ์กฐ๊ฑด
๋ค๋ง ์ง์ฐ๋ ๋ก๋ฉ(Lazy Loading) ๋ฐฉ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ฐ๊ณ ์์ด์ผ ํฉ๋๋ค.
- ์ฑ๊ธ ํ์ผ ์ปดํฌ๋ํธ ์ฒด๊ณ (.vue)
- ์นํฉ - ๋ชจ๋ ๋ฒ๋ค๋ฌ (2.x ์ด์)
- ๋ฐ๋ฒจ Syntax-dynamic-import ํ๋ฌ๊ทธ์ธ (opens new window)
# ๋ฐ๋ฒจ Syntax-dynamic-import ์ค์น ๋ฐฉ๋ฒ
๋ทฐ CLI๋ก ์์ฑํ ๊ฒฝ์ฐ์๋ ์ด๋ฏธ 1๋ฒ๊ณผ 2๋ฒ์ ๋ง์กฑํ๊ณ ๊ณ์คํ ์ง๋ง 3๋ฒ์ ๊ฒฝ์ฐ์๋ ๋ณ๋์ ์ค์น๊ฐ ํ์ํฉ๋๋ค. ๋ฐ๋ฒจ Syntax-dynamic-import ํ๋ฌ๊ทธ์ธ ์ค์น๋ ์๋์ ์ ์ฐจ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
npm install --save-dev babel-plugin-syntax-dynamic-import
.babelrc
ํ์ผ์ ์๋์ ๊ฐ์ด ํ๋ฌ๊ทธ์ธ ์ค์ ์ถ๊ฐ
{
"plugins": ["syntax-dynamic-import"]
}
# ๋ผ์ฐํฐ์ ์ฝ๋ ๋ถํ ๋ฌธ๋ฒ
์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ทฐ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ ๋ ๋ผ์ฐํ ๋ณ๋ก ์ฝ๋๋ฅผ ๋ถํ ํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
{
path: 'url ์ด๋ฆ',
component: () => import('์ปดํฌ๋ํธ ์ด๋ฆ')
}
์์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ง์ฐ๋ ๋ก๋ฉ(Lazy Loading)์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ท๋ชจ๊ฐ ์ปค์ ธ ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ํ๋ฉด ๋ก๋ฉ ์๊ฐ์ ์ค์ผ ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์๋๋ฉด ํ๋ฉด์ด 10๊ฐ์ธ ์น ์ฑ์ด ์๋๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ์ ์์ํ์ ๋ ์ฐ์ง๋ ์์ ๋๋จธ์ง ํ๋ฉด 9๊ฐ๋ฅผ ๋ค ๋ถ๋ฌ์ค๋ ๊ฒ ๋ณด๋ค๋ ํน์ ํ๋ฉด์ผ๋ก ์ด๋ํ ๋๋ง๋ค ํด๋น ํ๋ฉด์ ๋ด์ฉ์ ์ถ๊ฐ์ ์ผ๋ก ๋ถ๋ฌ์ค๋ ๊ฒ์ด ์ ํ๋ฆฌ์ผ์ด์ ๋ก๋ฉ ์๋ ๋ฉด์์ ๋ ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ํ๊ฒฝ์ ๊ตฌ์ฑํ๊ณ ๋๋ฉด ์๋์ ๊ฐ์ด ํน์ URL์ ๋ฐ๋ฅธ ์ฝ๋ ๋ถํ ์ด ๊ฐ๋ฅํด์ง๋๋ค.
const routes = [
{
path: '/login',
name: 'login',
component: () => import('./LoginPage.vue')
},
{
path: '/main',
name: 'main',
component: () => import('./MainPage.vue')
},
];
new VueRouter({
mode: 'history',
routes: routes,
});
โ Vue Folder Structure Navigation Guard โ