๋ค์ด๊ฐ๋ฉฐ
์๋ ํ์ธ์. ์ค๋๋ง์ ๊ธฐ์ ๊ธ์ ๋๋ค. ์๋ ์๋ ํ์ฌ, ๋ฉํ ๋ง, ์ ํ๋ธ, ๊ฐ์ธ ์์ ๋๋ฌธ์ ๋ฐ๋น ์ ๊ธฐ์ ๊ธ์ ๋ง์ด ๋ชป ์ฌ๋ ธ๋ค์. ์ฌํด๋ ์ฌ๋ฌ๋ถ์๊ฒ ๋์ ๋ ๋งํ ๊ธ๋ค์ ์ข ๋ ์์ฃผ ์ฌ๋ฆฌ๋ ค๊ณ ํฉ๋๋ค. ๋ง์ ๊ด์ฌ ๋ถํ๋๋ฆด๊ฒ์ ๐
์ค๋์ Vue 3์ ๋ํ ๊ธ์ ์์ฑํฉ๋๋ค. ์ด์ ์ Vue 3 ๊ฐ๋ณ๊ฒ ํ์ด๋ณด๊ธฐ ๊ธ์ ์์ฑํ์๋๋ฐ์. ํด๊ทผํ์๋ง์ ์ธํ๋ฐ ์ง์ ๊ฒ์ํ์ ์ฌ๋ผ์จ ์ง๋ฌธ๋ค์ ๋ณด๋ ๋นจ๋ฆฌ ์ ๋ฆฌํด์ ์ฌ๋ ค์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์ด์ ๊ธ์ ์ฐ๊ฒ ๋์์ด์. ์๋ง ์ ๊ฐ์๋ ํ์ต ์๋ฃ๋ก Vue.js๋ฅผ ๋ฐฐ์ฐ๊ณ ์ค๋ฌด์์ ๋ ์ฌ์ฉํ๊ณ ๊ณ์๋ ๋ถ๋ค์ด ๋ง์ ํ ๋ฐ์. ์ด์ ๋ง Vue.js๋ฅผ ๋ฐฐ์ฐ์๋ ๋ถ๋ค ๊ทธ๋ฆฌ๊ณ ์ค๋ฌด์์ ์ค๋๋ง์ ๋ทฐ CLI๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ์ค ๋ถ๋ค๊ป ์ข์ ์ฐธ๊ณ ์๋ฃ๊ฐ ๋์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค ๐
๊ทธ๋ผ ์์ํ ๊ฒ์!
Vue.js ์ปค๋ฎค๋ํฐ์ ์ผ์ด๋ ํฐ ๋ณํ
22๋ 2์ 7์ผ์ธ ์ค๋๋ถํฐ Vue.js ์ปค๋ฎค๋ํฐ ์ง์์ ํฐ ๋ณํ๊ฐ ์๊ฒผ์ต๋๋ค. ๋ฐ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ณธ ๋ฒ์ ๊ณผ ๊ณต์ ๋ฌธ์์ ์ฃผ์์ธ๋ฐ์. ์ด๋ค ๋ด์ฉ์ธ์ง ํ๋ํ๋ ์ฐจ๊ทผํ ์ดํด๋ณด๊ฒ ์ต๋๋ค ๐
์ฃผ๋ชฉํด์ผ ํ ์ฒซ ๋ฒ์งธ ๋ณํ - CDN ์ฃผ์
์ค๋๋ถํฐ Vue.js๋ก ๊ฐ๋ฐํ์ค ๋๋ Vue.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ์ฃผ์ํ์ ์ผ ํฉ๋๋ค. ๋ง์ฝ ์ด์ ๋ง Vue.js๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์์ํ์ จ๋ค๋ฉด ์๋ง HTML ํ์ผ์์ CDN์ผ๋ก ์๋์ ๊ฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค๊ณ ์ค์ค ํ ๋ฐ์.
<body>
<div id="app">
<p>{{ message }}</p>
</div>
<script src="https://unpkg.com/vue"></script>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello Vue 2'
}
})
</script>
</body>
์ฌ๊ธฐ์ script
ํ๊ทธ์ ์์ค ์ฃผ์์ธ https://unpkg.com/vue
๋ ๋ ์ด์ Vue 2 ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ค๋ฅผ ๊ฐ์ ธ์ค์ง ์์ต๋๋ค. Vue 3๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๋ฐ๋ผ๋ณด๊ฒ ๋์ด ์์ต๋๋ค. ๊ทธ๋์ ๊ฐ๊ธ์ ์์ ๊ฐ์ ์ฃผ์๋ณด๋ค๋ ์๋์ ๊ฐ์ด ๋ฒ์ ์ด ๋ช
์๋ CDN ์ฃผ์๋ฅผ ์ฌ์ฉํ์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆด๊ฒ์ ๐
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.min.js"></script>
<script src="https://unpkg.com/vue@2.6.14/dist/vue.js"></script>
<script src="https://unpkg.com/vue@2"></script>
Vue 2 ๋ผ์ด๋ธ๋ฌ๋ฆฌ CDN ์ฃผ์์ ๊ด๋ จ๋ ๊ธ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์ธ์ ๐
์ฃผ๋ชฉํด์ผ ํ ๋ ๋ฒ์งธ ๋ณํ - NPM ํจํค์ง ๋ฒ์
๋ทฐ์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ํ์ตํ์๊ณ ๋๋ฉด ๋๋ถ๋ถ NPM๊ณผ Vue CLI๋ฅผ ์ด์ฉํด์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ npm ๋ช ๋ น์ด๋ก ์ค์นํ์ค ํ ๋ฐ์. ๊ธฐ์กด์ Vue 2๋ก ํ์ตํ๊ณ ์ด๋ฏธ ๊ฐ๋ฐ์ ํ๊ณ ๊ณ์ จ๋ ๋ถ๋ค์ ์๋ ๋ช ๋ น์ด๊ฐ ์ต์ํ์ค ๊ฒ๋๋ค.
npm i vue
npm i vue-router
npm i vuex
์ค๋๋ถํฐ๋ Vue, VueRouter, Vuex ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ Vue 3๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค์น๊ฐ ๋ฉ๋๋ค. ์๋ ์ฐ๋ฆฌ๊ฐ ์ค๋ฌด์์ ์ฌ์ฉํ๊ณ ์๋ ๋ฒ์ ์ ์๋ง ๋๋ถ๋ถ ์๋์ ๊ฐ์ ํ ๋ฐ์.
{
"dependencies": {
"vue": "^2.6.14",
"vue-router": "^3.5.3",
"vuex": "^3.6.2"
}
}
์ด์ ์ ๋ฒ์ ์ ๋จ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ๋ง ์ ๋๋ค๊ณ ํด์ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ค์น๋์ง ์์ต๋๋ค. ์ด์ ๋ Vue 3๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ๋ทฐ ๋ผ์ฐํฐ์ ๋ทฐ์์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ด ์ค์น๋ฉ๋๋ค. ์๋์ ๊ฐ์ด ๋ง์ด์ฃ .
{
"dependencies": {
"vue": "^3.2.30",
"vue-router": "^4.0.12",
"vuex": "^4.0.2"
}
}
๋ฐ๋ผ์, ์ด๋ฏธ Vue 2 ๋ฒ์ ์ผ๋ก ๋ทฐ๋ฅผ ๋ฐฐ์ฐ๊ณ ์๊ฑฐ๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ๊ณ์ ๋ถ๋ค์ ๋ทฐ ์ฝ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ค์นํ์ค ๋ ์๋์ ๊ฐ์ด ๊ผญ ๋ฒ์ ์ ๋ช ์ํด ์ฃผ์ ์ผ ํฉ๋๋ค.
npm i vue@2.6.14
npm i vue-router@3.5.3
npm i vuex@3.6.2
์ฃผ๋ชฉํด์ผ ํ ์ธ ๋ฒ์งธ ๋ณํ - ๊ณต์๋ฌธ์ ์ฃผ์
Vue.js๋ฅผ ์ค๋ซ๋์ ๊ฐ๋ฐํด ์ค์ ๋ถ์ด๋ผ๋ฉด vuejs.org๊ฐ ๊ณต์ ๋ฌธ์ ์ฃผ์๋ผ๋ ๊ฑธ ์๊ณ ๊ณ์ค ๊ฒ๋๋ค. 2020๋ 9์์ Vue 3๊ฐ ์ ์ ๋ฆด๋ฆฌ์ฆ ๋๊ณ ๋์๋ Vue 2์์ Vue 3๋ก ์ฌ์ฉ์๋ค์ด ์์ฐ์ค๋ฝ๊ฒ ๋์ด๊ฐ ์ ์๋๋ก ๊ฝค ์ค๋ ๊ธฐ๊ฐ Vue 2๋ฅผ ๊ธฐ์กด ๊ณต์ ๋ฌธ์๋ก ์ ์งํด ์๋๋ฐ์.
์ค๋๋ถํฐ๋ ๊ณต์ ๋ฌธ์์ ๊ธฐ์ค ๋ฒ์ ์ด Vue 3๊ฐ ๋์์ต๋๋ค.

๊ทธ๋ ๋ค๊ณ ํด์ Vue 2์ ๋ฌธ์๋ฅผ ๋ณด์ง ๋ชปํ๋ ๊ฒ์ ์๋๊ตฌ์. ์๋์ ์ฃผ์๋ฅผ ํตํด์ ๊ธฐ์กด ์๋ฃ๋ค์ ๋ณด์ค ์ ์์ต๋๋ค.
- Vue 2 ๊ณต์ ๋ฌธ์
- Vue 2์ ํธํ๋๋ Vue Router ๊ณต์ ๋ฌธ์
- Vue 2์ ํธํ๋๋ Vuex ๊ณต์ ๋ฌธ์
Vue 3๊ฐ ๊ธฐ์ค ๋ฒ์ ์ด ๋์๋๋ฐ ์ Vue 2๋ฅผ ์๋ดํ๋์?
์ค๋ฌด์์๋ ์ฌ์ ํ Vue 2๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ณ ์๊ณ ์ปค๋ฎค๋ํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํ๊ณ๋ ์์ง์ Vue 2๊ฐ ๋ ํฌ๊ณ ์ฑ์ํฉ๋๋ค. ๋ทฐ ์ฐฝ์์ ์๋ฐ ์ ์ฅ์์๋ ์ปค๋ฎค๋ํฐ๊ฐ Vue 2์์ Vue 3๋ก ๋ถ๋๋ฝ๊ฒ ๋์ด๊ฐ ์ ์๋๋ก ๋ฐฐ๋ คํด์ Vue 3๊ฐ ๋์จ ์ดํ์๋ Vue 2๋ฅผ ๊ฝค ์ค๋ ๊ธฐ๊ฐ ๋์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ์งํด ์จ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ค ๋ณด๋ ๋ง์ Vue 3๋ก ์ด๋ํ๋ ์์ง์๋ณด๋ค ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ธ Vue 2๋ฅผ ๊ณ ์ํ๋ ์ฌ์ฉ์๋ค์ด ๋ง์๋ ๊ฒ ๊ฐ์์. ํนํ, Vue 3์ ๊ฐ์ฅ ํฐ ํน์ง์ธ composition api๋ Vue 2์์๋ ์ฌ์ฉํ ์ ์์ด์ Vue 3๋ก ์ด๋ํ๋ ์์๊ฐ ์ ์๋ ๊ฒ ๊ฐ์์.

๋ง์ง๋ง์ผ๋ก, ์ค๋ฌด์ ์ ์ฅ์์๋ Vue, VueRouter, Vuex์ ๊ฐ์ ์ฝ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด์ธ์๋ Vuetify, BootstrapVue, VueChart, VueDatepicker, VueTable ๋ฑ์ ์ปค๋ฎค๋ํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด์ ๊ฐ๋ฐ์ ์งํํ๋๋ฐ ์์ง ์ด ์ปค๋ฎค๋ํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ฌ์ ํ Vue 3๋ฅผ ์ ๋๋ก ์ง์ํ์ง ๋ชปํ๊ณ ์๋ ์ค์ ์ ๋๋ค.
๋ทฐ ์ฝ์ดํ ์ ์ฅ์์๋ Vue 3๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ปค๋ฎค๋ํฐ๊ฐ ์ถฉ๋ถํ ์ฑ์๋๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ ์๊ฐ์ ์ฃผ์๋๋ฐ๋ ์ฌ์ ํ ๊ฒฉ์ฐจ๊ฐ ํฌ๋ค๊ณ ๋๋ผ์ Vue 3๋ฅผ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ํํ๋ ๊ฐ์๋ฅผ ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ์ด๋ฒ ๋ณํ๊ฐ Vue.js ์ปค๋ฎค๋ํฐ์ ๊ธ์ ์ ์ธ ์ํฅ์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ค์.
FAQ
์๋ง ์ด ๊ธ์ ์ฝ๊ณ ๊ถ๊ธํด ํ์ค ๋งํ ๋ถ๋ถ๋ค์ ์ ๋ฆฌํด ๋ณด์์ต๋๋ค :)
Q. Vue 2๋ ๊ทธ๋ผ ๋ ์ด์ ์ฐ๋ฉด ์๋๋๊ฑฐ ์๋๊ฐ์?
์ง๋๋ฒ RFC์์ ์๋ฐ์ด Vue 3์ ์ฃผ์ ํน์ง์ Vue 2์์๋ ์ฌ์ฉํ ์ ์๊ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์์ ๊ฐํํ๋ค๊ณ ํ์ต๋๋ค. ๊ธฐ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ Vue 3๊ฐ ๋์๋ค๊ณ ํด์ ์ปค๋ฎค๋ํฐ์ ๋๋ค์๋ฅผ ์ฐจ์งํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ํฌ๊ธฐํ์ง ๋ชปํ ๊ฒ๋๋ค. ์ ์ง์ ์ผ๋ก ์ปค๋ฎค๋ํฐ ์ค์ฌ ๋ฒ์ ์ด 3์ด ๋๋๋ก ๊ธฐ์กด Vue 2 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ง์ํด ์ค ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
Q. ๋ทฐ CLI๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ Vue 3๋ง ์ ํํ ์ ์๋ ๊ฑด๊ฐ์?
๋ทฐ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์คํ ๋ฐ์.
vue create ํ๋ก์ ํธ์ด๋ฆ
๋ณดํต ์ฌ๊ธฐ์ ์๋น์ค ์ฑ๊ฒฉ์ ๋ง์ถฐ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด Manually select features
๋ฅผ ์ ํํ์ค ๊ฒ๋๋ค. ์ด ๋ Vue.js ๋ฒ์ ์ 2 ๋ฒ์ ์ผ๋ก ์ ํํ์๋ฉด ๋ฉ๋๋ค.
Q. Vue 2๋ก ๋ทฐ๋ฅผ ๋ฐฐ์ ๋๋ฐ Vue 3๋ฅผ ๋ค์ ๋ฐฐ์์ผ ํ ๊น์?
Vue 2๋ก ํ์ตํ์ ๋ด์ฉ ๋ชจ๋ Vue 3์์ ์ฌ์ฉํ์ค ์ ์์ต๋๋ค. ๋ฐ์์ฑ, ์ปดํฌ๋ํธ, ๋ผ์ฐํฐ, ๋ทฐ์์ค ๋ฑ์ ์ฃผ์ ๊ฐ๋
๋ชจ๋ Vue 2์ Vue 3์์ ๋์ผํ๊ฒ ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ ์คํ๋ ค ๊ต์ก ๋ ํผ๋ฐ์ค๊ฐ ๋ง์ Vue 2๋ก ๋ฐฐ์ฐ์๋๊ฒ ๋ ์์ํ์ค ๊ฑฐ์์. Vue 3๋ Vue 2์์ ๋ฐฐ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก setup()
์ด๋ผ๋ API ํ๋ ์ ๋๋ง ๋ ์๊ณ ๊ณ์๋ฉด ๋ฉ๋๋ค ๐
Vue 2์ Vue 3์ ์ฐจ์ด์ ์ด ๊ถ๊ธํ์๋ค๋ฉด ์ ๊ฐ ์๋ 11์์ ๋ฐํํ ์๋ ์์์ ์ฐธ๊ณ ํด ๋ณด์ธ์ :)
Q. Vue 3์ ๋ํ ๋ด์ฉ์ ์ด๋์ ์ ์ ์์๊น์?
Vue 3 ๊ฐ๋ณ๊ฒ ํ์ด๋ณด๊ธฐ ๊ธ์ ์ฐธ๊ณ ํด ๋ณด์ธ์ ๐
๋ง๋ฌด๋ฆฌ
์ํด๊ฐ ๋์ง ์ผ๋ง ์๋ผ์ ์๋ก์ด ํ๋ ์์ํฌ๋ ๊ธฐ์ ์ ์ด์ฌํ ํ์ตํ๊ณ ๊ณ์ ๊ฒ ๊ฐ์๋ฐ์. ๊ฐ๋ ์ ๋ฐฐ์ฐ๊ณ ์ง์์ ์์๊ฐ๋ ๊ฒ๋ ์ค์ํ์ง๋ง ๊ด์ฌ ์๊ฒ ํ์ตํ๋ ๊ธฐ์ ์ ์ฃผ์ ๋ํฅ์ด๋ ์ปค๋ฎค๋ํฐ ๋ณํ๋ฅผ ๊ด์ฐฐํ๋ ๊ฒ๋ ์ค์ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ค๋ ์ ๋ฆฌํ ๋ด์ฉ์ด ์ฌ๋ฌ๋ถ์ Vue.js ํ์ต๊ณผ ๊ฐ๋ฐ์ ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ค์. ๊ทธ๋ผ ๋ค์์ ๋ ์๋ก์ด ์ปจํ ์ธ ๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค :)
์ฐธ๊ณ ์๋ฃ
Vue 3 ํ์ต ๋ก๋๋งต



์บกํดํ๊ต์ ์จ๋ผ์ธ ๊ฐ์
ํ๋ฐํธ์๋ ๊ฐ๋ฐ๊ณผ Vue.js๋ฅผ ๋ฐฐ์ฐ๊ณ ์ถ์ ๋ถ๋ค๊ป ์ถ์ฒ๋๋ฆฝ๋๋ค ๐









ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๋ ์ํ ์ ์๋ ๋ฐฉ๋ฒ
์บกํดํ๊ต์ ๋์ถ๋ ํ์ ์คํฌ๋ฆฝํธ ์ง์๊ณผ ๋ ธํ์ฐ๋ฅผ ์๊ณ ์ถ๋ค๋ฉด ์๋ ๋์๋ฅผ ์ฝ์ด๋ณด์ธ์ :)
