Webpack์ด ๋ญ ์ง ๊ฐ๋ ์์๋๋ฐ, ์ ๋ง ์น์ ํ๊ฒ ์ค๋ช ํด์ฃผ๋ ๊ธ์ ๋ฐ๊ฒฌํ์ฌ ์ ๋ฆฌํด๋ณด์๋ค. ์ถ์ฒ๋ ํ๋จ์! ๐
Webpack?
๋ธ๋ผ์ฐ์ ๋ HTML, CSS, Javascript (์ฆ, ํ์ฅ์๊ฐ .html, .css, .js ์ธ ๊ฒ๋ค)๋ง ์ธ์ํ๋ค.
JSP๋ HTML ์ฝ๋ ์์ Java ์ฝ๋๋ฅผ ์ฝ์ ํจ์ผ๋ก์จ, ์๋ฒ์์ ๋์ ์์ญ์ ์ฑ์๋์ HTML ์ฝ๋์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ์ฅ์๊ฐ .jsp ์ด์ด๋, ๋ธ๋ผ์ฐ์ ๋ ์ต์ข ์ ์ผ๋ก๋ ํด๋น ํ์ผ์ HTML ํ์ผ๋ก ์ธ์ํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก, Vue.js๋ ํ์ฅ์๊ฐ .vue์ด๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ์ด๋ป๊ฒ ์ธ์ํ์ฌ ๋์ํ๋ ๊ฒ ์ผ๊น?
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, ๋ธ๋ผ์ฐ์ ๋ .vue ํ์ฅ์๋ฅผ Javascript ํ์ผ๋ก ์ธ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ , ์ด๋ฅผ ๊ฐ๋ฅ์ผ ํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก Webpack์ด๋ฉฐ, Webpack์ Bundle์ด๋ผ๋ ๊ณผ์ ์ ๊ฑฐ์ณ, .vue ํ์ผ์ .js ํ์ผ๋ก ๋ณํํด์ค๋ค.
๊ทธ๋์ Webpack์ Module Bundler๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
(vue cli๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์น ํฉ ๊ธฐ๋ฐ์ ํ๋ก์ ํธ๊ฐ ๋๋ค.)
Webpack์ด Bundle์ ์์ํ๊ธฐ ์ํด์๋, ์์์ ์ญํ ์ ํ๋ ํ์ผ์ด ํ์ํ๋ค.
๊ทธ ํ์ผ์ Entry File(์ํธ๋ฆฌ ํ์ผ)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ํ์ผ์ด ์กด์ฌํ๋ค๊ณ , ๋ฌด์กฐ๊ฑด ๋ฒ๋ค๋ง์ ํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ํธ๋ฆฌ ํ์ผ์ ๊ธฐ์ ์ผ๋ก ํ์ฌ ๋ฒ๋ค๋ง ํด์ผํ๋ ํ์ผ๋ง ์งํํ๋ ๊ฒ์ด๋ค.
(๋ณดํต main.js๊ฐ ์ํธ๋ฆฌ ํ์ผ ์ญํ ์ ํ๋ค. Vue ์ธ์คํด์ค ์์ฑ ์ญํ . vue.config.js์์ ์ํธ๋ฆฌ ํ์ผ์ ์์๋ก ์ง์ ํด์ค ์ ์๋ค.)
์ค์ ๋ก, ๋ด๊ฐ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ํ๊ธฐ ์ํด ์ ํ ํ main.js๋ฅผ ๋ณด๋ฉด
import { createApp } from 'vue'
import { createRouter, createWebHistory } from 'vue-router'
import App from './App'
import BootStrapVue from 'bootstrap-vue-3';
import 'bootstrap/dist/css/bootstrap.css';
import 'bootstrap-vue-3/dist/bootstrap-vue-3.css';
import router_main from './router/index.js'
//createRotuer : ์ค์ Vue Router ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ์ฐ์ด๋ function
const router = createRouter(
{
/** process.env.BASE_URL์ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก "/"๋ฅผ ๊ฐ๋๋ค.
๋ค๋ง, vue.config.js ํ์ผ์์ ์์๋ก ์ค์ ๊ฐ์ ์ง์ ํ ์ ์๋ค. */
//createWebHashHistory : Vue Router๋ฅผ ํตํด URL๋ก ๋งคํ๋ vue ์ปดํฌ๋ํธ๋ฅผ ์ ํํ ์์ ํ์ํ ํ์คํ ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ์, ํด์ํ์ผ๋ก ์ธ ์ ์๊ฒ ํด์ฃผ๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ function
//createWebHistory : ๋ ๋ค๋ฅธ ์ธ์คํด์ค ์์ฑ ๊ธฐ๋ฒ. hash(#)๊ฐ ๋ถ์ง ์๋๋ค.
history : createWebHistory(process.env.BASE_URL),
routes : router_main
}
)
const app = createApp(App);
app.use(router);
app.use(BootStrapVue);
const instance = app.mount('#app');
export { app, instance };
createApp function์ผ๋ก ๋ง๋ค์ด์ง๋ ๊ฒ, Vue Application ์ธ์คํด์ค
์ธ์คํด์ค ์์ฑ ์, ์ ๋ฌ๋๋ ์ App์ด๋ผ๋ ํ๋ผ๋ฏธํฐ๋ App.vue์ด๋ผ๋ ๋ชจ๋(ํ์ผ)์ด๋ค.
์ํธ๋ฆฌ ํ์ผ์ด ๋ฒ๋ค๋ง์ ์์์ ์ ์๋ ค์ค๋ค๋ฉด, App.vue ํ์ผ์ .vue ํ์ผ๋ค์ ์ง์ ์ ์ ํด์ฃผ๋ ์ญํ ์ด๋ค. (์ฌ๊ธฐ์ ์ฝ๊ฐ ๋ฉ์นซ ,,ใ ๊ทธ๋ฅ ์ปดํฌ๋ํธ๋ค์ ์ต์์ ์ปดํฌ๋ํธ๋ผ๋ ์๋ฏธ์ธ ๊ฒ ๊ฐ๋ค.)
๋ชจ๋ .vue ํ์ฅ์์ธ ํ์ผ๋ค์ด ์ต์์ ์ปดํฌ๋ํธ์ธ App.vue์ ๋ชจ์ฌ, ์ด๋ฅผ main.js์ importํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑ.
์ฆ, main.js์์๋ createApp function์ ํตํด App.vue๋ฅผ ์์์ ์ผ๋ก ํ๋ app ์ธ์คํด์ค๋ฅผ ์์ฑํด์ค๋ค.
๋ง์ง๋ง์ผ๋ก, app.mount('#app'); ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋๋ฐ
์ฌ๊ธฐ์ #app์ด๋, ๋จ ํ๋์ HTML ํ์ผ์ธ, index.html์ div ํ๊ทธ์ id ๊ฐ์ด๋ค. ์ค์ง์ ์ผ๋ก ๊ทธ๋ ค์ง๋ ์ฝ๋๋ App.vue๊ฐ ๋ ๊ฒ.
Reference (๐๐ป)
[Vue.js_#03] N : 1 (feat. webpack)
0. ์์ํ๊ธฐ์ ์์ ์ฌ์ค ์ ๋ฒ ํธ์ ์ด์ด์ ์ด๋ฒ ํธ๋ ์ข ์ง๋ฃจํ์ง ์์๊น, ๋ผ๋ ์๊ฐ์ด ๋ญ๋๋ค. ๋์ฒด Vue.js ์ ๋ํด์ ์ค๋ช ํ๋ ํฌ์คํ ์ด๋ผ๊ณ ํด๋๊ณ Vue.js๋ฅผ ์ค์ง์ ์ผ๋ก ํ์ฉํ๋ ์ค๋ช ์ ์ด๋ ์
blinders.tistory.com