์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
๋ทฐ.JS
Vue.js
์ข…๋ฅ˜
๋ผ์ด์„ ์Šค
๊ฐœ๋ฐœ
Evan You
๋ฒ„์ „
3.0
1. ๊ฐœ์š”2. ์˜ˆ์‹œ3. ๊ฐ€์ƒ DOM4. Composition API5. Vue.js ์ƒํƒœ๊ณ„
5.1. Vue Router5.2. Vuex5.3. Vue CLI5.4. Vite5.5. ๊ธฐํƒ€
6. Vue.js ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์›น ์‚ฌ์ดํŠธ ๋ชฉ๋ก7. ๋…ผ๋ž€

1. ๊ฐœ์š”[ํŽธ์ง‘]

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๊ฐœ๋ฐœ๋œ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ. ๋ณดํ†ต ๋ทฐ ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. (view) ์ตœ์‹  ๋ฒ„์ „์€ 3.0์ด๋‹ค.[1]

2. ์˜ˆ์‹œ[ํŽธ์ง‘]

์ด๋Ÿฌํ•œ HTML ํŒŒ์ผ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ,
<div id="app">
  ์•ˆ๋…•, {{ name }}!
</div>

ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด,
Vue.createApp({
  data() {
    return {
      name: '๋‚˜๋ฌด์œ„ํ‚ค'
    }
  }
}).mount('#app')

"์•ˆ๋…•, ๋‚˜๋ฌด์œ„ํ‚ค!" ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

3. ๊ฐ€์ƒ DOM[ํŽธ์ง‘]

Vue.js 2.0 ๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ. ์ž˜ ์•Œ๋ ค์ง„ React์ฒ˜๋Ÿผ, Vue.js๋„ ๊ฐ€์ƒ DOM (Virtual DOM)์„ ํ™œ์šฉํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ DOM์„ ์ง์ ‘ ์ปจํŠธ๋กคํ•˜๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ๋ฌด๊ฑฐ์šด ์ž‘์—…์ธ๋ฐ, ์ด๊ฒƒ์„ ๊ฐ€์ƒ DOM์„ ๋จผ์ € ์—…๋ฐ์ดํŠธํ•œ ํ›„์— ๋ธŒ๋ผ์šฐ์ €์˜ DOM์„ ํ•œ๋ฒˆ์— ์—…๋ฐ์ดํŠธ์‹œํ‚ค๋Š” ์‹์œผ๋กœ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ€์ƒ DOM์ด ์‚ฌ์šฉ๋œ๋‹ค. ํŠนํžˆ Vue๋‚˜ React๊ฐ™์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ์›นํŽ˜์ด์ง€๋ฅผ ์ž์ฃผ ๋ณ€ํ˜•ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ€์ƒ DOM์ด ๊ฐ€์ ธ๋‹ค์ฃผ๋Š” ์„ฑ๋Šฅ ์ด๋“์ด ๊ทน๋Œ€ํ™”๋œ๋‹ค.

4. Composition API[ํŽธ์ง‘]

Vue.js 3.0๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ. React์˜ Hooks๋กœ๋ถ€ํ„ฐ ์˜๊ฐ์„ ๋ฐ›์•„ ์ถ”๊ฐ€๋œ ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘ ๋ฐฉ๋ฒ•์œผ๋กœ, ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์„ data(), methods, computed ๋“ฑ์— ๋‚˜๋ˆ„์–ด ๋†“๋˜ ๊ธฐ์กด์˜ Options API์™€๋Š” ๋‹ฌ๋ฆฌ setup() ํ•จ์ˆ˜ ์•ˆ์— reactive()๋‚˜ computed() ๋“ฑ์˜ ํ•จ์ˆ˜๋“ค์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ธฐ๋Šฅ๋“ค์„ ๋ฐฐ์น˜ํ•œ๋‹ค. ์šฉ๋„๋ณ„ ์ฝ”๋“œ ์ •๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ๋ฐฉ์‹์— ๋น„ํ•ด ๋Œ€๊ทœ๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ this์— ์˜์กดํ•˜์ง€ ์•Š๋Š” API ๊ตฌ์กฐ ํŠน์„ฑ์ƒ ๋ชจ๋“ˆํ™”๊ฐ€ ๋งค์šฐ ์›ํ™œํ•˜๋ฉฐ, ๋›ฐ์–ด๋‚œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ง€์›์„ ๋ณด์—ฌ ์ค€๋‹ค. ์žฅ์ ๋“ค์„ ์ข…ํ•ฉํ•ด ๋ณด์ž๋ฉด ๊ฒฐ๊ตญ Vue๊ฐ€ ๊ธฐ์กด๊นŒ์ง€ ์ง€์ ๋ฐ›๋˜ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์—์„œ์˜ ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ API๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. @vue/composition-api ํŒจํ‚ค์ง€๋ฅผ ์ด์šฉํ•˜๋ฉด Vue 2์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

5. Vue.js ์ƒํƒœ๊ณ„[ํŽธ์ง‘]

Vue.js ํŒ€์—์„œ๋Š” Vue๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๋„์›€์„ ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํˆด๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.

5.1. Vue Router[ํŽธ์ง‘]

Vue ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ”ํžˆ SPA(Single Page Application, ํ•œ ํ™”๋ฉด์œผ๋กœ ๊ตฌ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งํ•œ๋‹ค)๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ, ์ด๋•Œ ํ•œ ํŽ˜์ด์ง€ ๋‚ด์—์„œ๋„ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ํ•„์š” ์—†์ด ๋งˆ์น˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋Š” ๋“ฏํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Vue Router์ด๋‹ค. ์ด๋Š” ๋ณดํ†ต ์‚ฌ์ดํŠธ์˜ ํฐ ํ‹€ ์•ˆ์— <router-view> ํƒœ๊ทธ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , ๋ผ์šฐํ„ฐ๊ฐ€ ๋ณด์—ฌ ์ค„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด ํƒœ๊ทธ ์•ˆ์— ๋ Œ๋”๋งํ•œ๋‹ค. ๋ผ์šฐํ„ฐ๊ฐ€ ๋ณด์—ฌ ์ค„ ์ปดํฌ๋„ŒํŠธ๋Š” <router-link>์˜ ํด๋ฆญ์ด๋‚˜ JS ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋“ฑ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž๋ฉด ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค ๋•Œ MainPage ์ปดํฌ๋„ŒํŠธ์™€ Profile ์ปดํฌ๋„ŒํŠธ, Posts ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“  ํ›„, ๊ฐ๊ฐ ์ปดํฌ๋„ŒํŠธ๋กœ์˜ ๋งํฌ๋ฅผ ๋‹ด์€ <router-link>๋ฅผ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”์— ๋„ฃ์–ด ๋†“๊ณ , ๊ทธ ์•„๋ž˜์— <router-view>๋ฅผ ๋†“์œผ๋ฉด ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”์—์„œ ๋งํฌ๋ฅผ ๋ˆ„๋ฅด๋Š” ๋Œ€๋กœ ๋ณด์—ฌ์ง€๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ”๋€Œ๋ฉด์„œ ๋งˆ์น˜ ์ผ๋ฐ˜์ ์ธ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋กœ ๊ตฌ์„ฑ๋œ ๋ธ”๋กœ๊ทธ์™€ ๊ฐ™์ด ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋”ฉ ์‹œ๊ฐ„๋„ ํ›จ์”ฌ ์ ๊ณ ,[2] ํ™”๋ฉด์ด ์‚ฌ๋ผ์กŒ๋‹ค ๋‹ค์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ์ง€์ €๋ถ„ํ•œ ํšจ๊ณผ ์—†์ด ์ฆ‰์‹œ ํ™”๋ฉด์ด ์ „ํ™˜๋œ๋‹ค. ์›ํ•œ๋‹ค๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„ฃ๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค!

5.2. Vuex[ํŽธ์ง‘]

Vue ์ปดํฌ๋„ŒํŠธ๋“ค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ณต์œ ๋ฅผ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. Vuex๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ Vue ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋ ค๋ฉด ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ Property[3]๋ฅผ ๋„˜๊ธฐ๊ฑฐ๋‚˜, ํ•˜์œ„์—์„œ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์†ก์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ์ปดํฌ๋„ŒํŠธ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ƒ๋‹นํžˆ ๊ณจ์น˜๊ฐ€ ์•„ํŒŒ์ง„๋‹ค. Vuex๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์ค‘์•™ํ™”๋œ Store ์•ˆ์— state๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ, ์ค‘์•™ํ™”๋œ store ์† ๋ฐ์ดํ„ฐ๋Š” ์ปดํฌ๋„ŒํŠธ ์–ด๋””์„œ๋‚˜ ์ž์œ ๋กญ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, Store ์•ˆ์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋Š” ๋™๊ธฐ์  ํ•จ์ˆ˜[4]์ธ Mutation์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. Vuex๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ํŽธ์˜์„ฑ์ด ๋งค์šฐ ํฌ๊ธฐ์—, ์ข€ ๊ทœ๋ชจ๊ฐ€ ๋˜๋Š” Vue ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•  ๋•Œ ์—†์–ด์„œ๋Š” ์•ˆ ๋˜๋Š” ๋ฌผ๊ฑด์ด๋‹ค.

5.3. Vue CLI[ํŽธ์ง‘]

Vue ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์˜ ์ƒ์„ฑ๋ถ€ํ„ฐ ๊ฐ์ข… ํ”Œ๋Ÿฌ๊ทธ์ธ ์ถ”๊ฐ€ ๋ฐ ์„ธํŒ…๊นŒ์ง€ ๋„์™€์ฃผ๋Š” ํˆด์ด๋‹ค. ์ด๋ฆ„์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ๋‹ค์‹œํ”ผ CLI ๊ธฐ๋ฐ˜์˜ ํˆด์ด๋ฉฐ, vue ui ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›น ๊ธฐ๋ฐ˜ UI๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ๋ชจ๋กœ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ์—, ๋ณธ๊ฒฉ์ ์ธ Vue.js ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค๋ฉด ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ํˆด์ด๋‹ค.

5.4. Vite[5][ํŽธ์ง‘]

Vue 3์™€ ํ•จ๊ป˜ ๊ฐœ๋ฐœ๋œ ํˆด๋กœ์จ, ๊ธฐ์กด Vue CLI์˜ ์œ„์น˜๋ฅผ ๋Œ€์ฒดํ•œ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ ESBuild[6]๊ฐ€ ํ™œ์šฉ๋˜์–ด ๋ฏธ์นœ ๋“ฏ์ด ๋น ๋ฅธ HMR(Hot Module Replacement, ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด๋„ ์ฝ”๋“œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜์‹œ์ผœ์ฃผ๋Š” ๊ธฐ์ˆ ) ์†๋„๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ๋ธŒ๋ผ์šฐ์ €์™€ ์ฝ”๋“œ ์—๋””ํ„ฐ ํ™”๋ฉด์„ ๋™์‹œ์— ๋„์›Œ ๋†“์€ ๋‹ค์Œ ์ฝ”๋“œ ์ €์žฅ ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋Š” ์ˆœ๊ฐ„ ์ฆ‰์‹œ ํ™”๋ฉด์ด ๋ฐ”๋€Œ๋Š” ๋ชจ์Šต์€ ์•„๋ฆ„๋‹ค์šด ์ˆ˜์ค€์ด๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ SSR ์‹œ์Šคํ…œ๋„ ๊ฐ–์ถ”๊ณ  ์žˆ๋‹ค. Vue ์ง€์›์„ ๋ฒ ์ด์Šค๋กœ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ, ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ณ  ๋ฐœ์ „ํ•˜๋‹ค๋ณด๋‹ˆ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์—์„œ๋„ ๋ˆˆ๋…๋“ค์ผ ๋งŒํ•œ ๊ฐ•๋ ฅํ•œ ํˆด์ด ๋˜์–ด์„œ ํ˜„์žฌ๋Š” ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค๊ณผ์˜ ์—ฐ๋™ ์‹œ์Šคํ…œ์ด ์กด์žฌํ•œ๋‹ค.

5.5. ๊ธฐํƒ€[ํŽธ์ง‘]

vue-loader๋Š” Vue์˜ SFC(Single File Component, ํ•œ ํŒŒ์ผ ๋‚ด์— ํ…œํ”Œ๋ฆฟ๊ณผ ์Šคํฌ๋ฆฝํŠธ, ์Šคํƒ€์ผ์‹œํŠธ๊ฐ€ ๋ชจ๋‘ ๋“ค์–ด๊ฐ€๋Š” ํ˜•ํƒœ์˜ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค) ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” Webpack ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋ฉฐ, Vue CLI๋กœ ์ƒ์„ฑํ•œ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋“ค์— ์ ์šฉ๋œ๋‹ค. ํ™•์žฅ์ž๋Š” .vue๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

Vetur๋Š” Vue๋ฅผ ์œ„ํ•œ Visual Studio Code ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋ฉฐ, .vue ํŒŒ์ผ ์ง€์›์ด๋‚˜ ์ปค์Šคํ…€ ํ…œํ”Œ๋ฆฟ ๋ฌธ๋ฒ• ์ง€์› ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๋‹ค.

Vue Devtools๋Š” ๋ธŒ๋Ÿฌ์šฐ์ € ์ƒ์—์„œ ์ปดํฌ๋„ŒํŠธ์™€ ์ด๋ฒคํŠธ, Vuex Store๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ํฌ๋กฌ๊ณผ ํŒŒ์ด์–ดํญ์Šค๋ฅผ ์ง€์›ํ•˜๋ฉฐ, Electron ์•ฑ ๋ฒ„์ „๋„ ์žˆ๋‹ค.

์ด์™ธ์—๋„ ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ๋“ค์„ Vue.js ํŒ€ GitHub ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

3.x ๋ฒ„์ „๋ถ€ํ„ฐ TypeScript๋กœ ์žฌ์ž‘์„ฑ๋˜์–ด, ๊ธฐ์กด๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ•๋ ฅํ•œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ง€์›์„ ์ œ๊ณตํ•œ๋‹ค.

6. Vue.js ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์›น ์‚ฌ์ดํŠธ ๋ชฉ๋ก[ํŽธ์ง‘]

7. ๋…ผ๋ž€[ํŽธ์ง‘]

์—๋ฐ˜ ์œ ์˜ ํŠธ์œ„ํ„ฐ์— 2019๋…„ ํ™์ฝฉ ๋ฏผ์ฃผํ™” ์šด๋™์„ ๋น„๋‚œํ•˜๋Š” ๋“ฏํ•œ '์ž์œ , ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ฃ„์•…์ด ๋„ค ์ด๋ฆ„์„ ๋นŒ๋ ธ๋‚˜'๋ผ๋Š” ํŠธ์œ—์ด ์˜ฌ๋ผ์™”๋Š”๋ฐ, ์ฒ˜์Œ์—๋Š” ์ค‘๊ตญ์–ด๋กœ ์˜ฌ๋ ธ๋‹ค๊ฐ€ ์‚ญ์ œํ•˜๊ณ [7] ์ดํ›„์— ๋‹ค์‹œ ํ”„๋ž‘์Šค์–ด@๋กœ ์˜ฌ๋ ธ๋‹ค.

ํ•ด๋‹น ๊ธ€์— ๋Œ€ํ•œ ๊ณต์‹ ๋‹ต๋ณ€์„ ๋‚จ๊ฒผ๋‹ค. ๋งํฌ ์š”์ง€๋Š”, ์ผ๋‹จ ์ž์‹ ์€ ๊ฒฝ์ฐฐ์ด๋‚˜ ์‹œ์œ„์ž ์–ด๋А ํŽธ์„ ๋“ค๋ ค๋Š” ๊ฑด ์•„๋‹ˆ๋ฉฐ ๋‹ค๋งŒ ์ด๋กœ ์ธํ•ด ํญ๋ ฅ์ ์ธ ์‚ฌํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋งํ•œ ๊ฒƒ์ด๋ผ๋Š” ์˜๋„๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ์‚ฌ๊ฑด์˜ ๋ณธ์งˆ์„ ์ƒ๊ฐํ–ˆ์„ ๋•Œ ํญ๋ ฅ์˜ ๋ฐœ์ƒ์—๋งŒ ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ƒ ์‹œ์œ„์— ๋ฐ˜๋Œ€ํ•˜๋Š” ์ž…์žฅ์— ๊ฐ€๊น๋‹ค๊ณ  ๋ฐ–์— ๋ณผ ์ˆ˜ ์—†๋‹ค. ์ผ๋‹จ ๋ณธ์ธ์€ ์ •์น˜์  ์ž…์žฅ์ด ํ”„๋กœ์ ํŠธ์— ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๊ณ  ๋ฐํ˜”๋‹ค.
[1] ๋ฒ„์ „ 3์ด ๋‚˜์˜จ์ง€ ์–ผ๋งˆ ๋˜์ง€ ์•Š์•„ ์•„์ง Vue 2๋„ ๊ฐ™์ด ์ง€์›๋˜๊ณ  ์žˆ๊ณ , 2.7 LTS ๋ฒ„์ „์„ ๋งˆ์ง€๋ง‰์œผ๋กœ 3๋กœ ์™„์ „ํžˆ ์ „ํ™˜ํ•  ๊ณ„ํš์ด๋‹ค.
[2] ์ด๋Ÿฌ๋ฉด ์ดˆ๊ธฐ ๋กœ๋”ฉ์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ ์•„๋‹ˆ๋ƒ๊ณ  ํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, Vue Router๋Š” Lazy Load๋ฅผ ์ง€์›ํ•ด์„œ ์ตœ์ดˆ ๋กœ๋”ฉ ์‹œ์— ๋กœ๋”ฉํ•˜์ง€ ์•Š๊ณ  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•„์š”ํ•˜๊ฒŒ ๋œ ์‹œ์ ์— ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋กœ๋”ฉํ•ด์˜ค๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
[3] HTML ์ž‘์„ฑํ•  ๋•Œ ํƒœ๊ทธ ์ด๋ฆ„ ๋’ค์— ์ ์–ด ๋„ฃ๋Š” ๊ฒƒ๋“ค. ์ปดํฌ๋„ŒํŠธ์—์„œ ์–ด๋–ค ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฐ›์•„๋“ค์ผ์ง€๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
[4] Promise๋‚˜ ์ฝœ๋ฐฑ ๋“ฑ์˜ ๋น„๋™๊ธฐ ์ž‘์—…์ด ์—†๋Š” ํ•จ์ˆ˜.
[5] ํ”„๋ž‘์Šค์–ด์—์„œ ๋”ฐ์™”์œผ๋ฉฐ, ์ •ํ™•ํ•œ ๋ฐœ์Œ์€ ๋น/vit/์ด๋‹ค.
[6] Go(ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด)๋กœ ์ž‘์„ฑ๋˜์–ด Webpack ๋“ฑ์˜ ๊ธฐ์กด ๋„๊ตฌ๋“ค๋ณด๋‹ค ์••๋„์ ์œผ๋กœ ๋น ๋ฅธ ์†๋„๋ฅผ ์ž๋ž‘ํ•œ๋‹ค.
[7] ๋งํฌ๋Š” ์บก์ฒ˜๋ณธ.