🎯 Vue 2와 Vue 3 차이점 총정리 – 무엇이 λ‹¬λΌμ‘Œμ„κΉŒ?

1rockΒ·2025λ…„ 4μ›” 7일

🎯 Vue 2와 Vue 3 차이점 총정리 – 무엇이 λ‹¬λΌμ‘Œμ„κΉŒ?

Vue.jsλŠ” λ§Žμ€ ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžλ“€μ΄ μ‚¬λž‘ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€.
2020년에 Vue 3κ°€ 정식 μΆœμ‹œλ˜λ©΄μ„œ Vue 2μ™€λŠ” λ§Žμ€ λ³€ν™”κ°€ μƒκ²ΌλŠ”λ°μš”,
이번 κΈ€μ—μ„œλŠ” Vue 2와 Vue 3의 핡심적인 차이점듀을 정리해보렀고 ν•©λ‹ˆλ‹€.


1️⃣ Composition API vs Options API

Vue 2λŠ” Options APIλ₯Ό 기반으둜 κ΅¬μ„±λ©λ‹ˆλ‹€.
data, methods, computed, watch 같은 μ˜΅μ…˜λ“€μ„ λΆ„λ¦¬ν•΄μ„œ μ •μ˜ν•˜μ£ .

Vue 3μ—μ„œλŠ” κΈ°μ‘΄ 방식도 κ·ΈλŒ€λ‘œ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ,
μƒˆλ‘œμš΄ Composition APIκ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
setup() ν•¨μˆ˜ μ•ˆμ—μ„œ κ΄€λ ¨ λ‘œμ§μ„ ν•˜λ‚˜λ‘œ λ¬Άμ–΄ 관리할 수 μžˆμ–΄ μ½”λ“œ μž¬μ‚¬μš©μ„±κ³Ό 응집λ ₯이 μ’‹μ•„μ‘ŒμŠ΅λ‹ˆλ‹€.

// Vue 2 방식
export default {
  data() {
    return { count: 0 };
  },
  methods: {
    increment() {
      this.count++;
    }
  }
}

// Vue 3 Composition API 방식
import { ref } from 'vue';
export default {
  setup() {
    const count = ref(0);
    const increment = () => count.value++;
    return { count, increment };
  }
}

2️⃣ λ°˜μ‘μ„± μ‹œμŠ€ν…œ κ°œμ„ 

Vue 2λŠ” Object.defineProperty()λ₯Ό μ‚¬μš©ν•΄ λ°μ΄ν„°μ˜ λ°˜μ‘μ„±μ„ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ κΉŠμ€ κ°μ²΄λ‚˜ 배열에 λŒ€ν•œ 감지가 ν•œκ³„κ°€ μžˆμ—ˆμ£ .

Vue 3μ—μ„œλŠ” Proxy 기반의 λ°˜μ‘μ„± μ‹œμŠ€ν…œμ„ λ„μž…ν•΄
μ„±λŠ₯κ³Ό μœ μ—°μ„±μ΄ 크게 ν–₯μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
이 덕뢄에 λ³΅μž‘ν•œ ꡬ쑰의 μƒνƒœ 관리도 훨씬 μ•ˆμ •μ μœΌλ‘œ ν•  수 있게 λ˜μ—ˆμ£ .


3️⃣ μ„±λŠ₯ ν–₯상

Vue 3λŠ” Virtual DOM을 μ™„μ „νžˆ μž¬μž‘μ„±ν•˜λ©΄μ„œ λ‹€μŒκ³Ό 같은 μ„±λŠ₯ ν–₯상을 μ΄λ€˜μŠ΅λ‹ˆλ‹€:

  • 초기 λ Œλ”λ§ 속도 ν–₯상
  • λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ κ°μ†Œ
  • 더 λ‚˜μ€ TypeScript 지원
  • Tree-shaking을 ν†΅ν•œ λ²ˆλ“€ μ‚¬μ΄μ¦ˆ μ΅œμ ν™”

4️⃣ μƒˆλ‘œμš΄ κΈ°λŠ₯λ“€: Fragment, Teleport, Suspense

Vue 3μ—μ„œλŠ” 기쑴에 μ—†λ˜ μœ μš©ν•œ κΈ°λŠ₯듀이 λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€:

  • Fragment: μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ—¬λŸ¬ 개의 루트 λ…Έλ“œλ₯Ό λ°˜ν™˜ν•  수 있음
  • Teleport: νŠΉμ • DOM λ…Έλ“œλ‘œ μ»΄ν¬λ„ŒνŠΈ ν…”λ ˆν¬νŠΈ κ°€λŠ₯ (예: λͺ¨λ‹¬, 툴팁)
  • Suspense: 비동기 μ»΄ν¬λ„ŒνŠΈ λ‘œλ”©μ„ 더 μ„Έλ ¨λ˜κ²Œ 처리

5️⃣ TypeScript 지원 κ°•ν™”

Vue 3λŠ” μ²˜μŒλΆ€ν„° TypeScript둜 μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
덕뢄에 μ»΄ν¬λ„ŒνŠΈ μž‘μ„± μ‹œ μžλ™ μ™„μ„±κ³Ό νƒ€μž… 좔둠이 훨씬 κ°•λ ₯ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€.
κΈ°μ‘΄ Vue 2μ—μ„œλ„ TypeScriptλ₯Ό μ“Έ μˆ˜λŠ” μžˆμ—ˆμ§€λ§Œ, Vue 3에 λΉ„ν•΄ μ œν•œμ μ΄μ—ˆμŠ΅λ‹ˆλ‹€.


6️⃣ 라이프사이클 ν›… λ³€κ²½

Composition APIμ—μ„œλŠ” κΈ°μ‘΄ 라이프사이클 훅듀이 λ‹€μŒκ³Ό 같이 λ³€κ²½λ©λ‹ˆλ‹€:

Vue 2Vue 3 (Composition API)
createdonBeforeMount()
mountedonMounted()
updatedonUpdated()
destroyedonUnmounted()

Composition API 훅은 setup() ν•¨μˆ˜ μ•ˆμ—μ„œ ν˜ΈμΆœλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.


7️⃣ Vue 2 β†’ Vue 3 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ£Όμ˜μ‚¬ν•­

Vue 3λŠ” κΈ°μ‘΄ Vue 2와 μ™„μ „νžˆ ν˜Έν™˜λ˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.
λ‹€μŒκ³Ό 같은 점듀을 κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€:

  • Vue Router 4, Vuex 4 λ“± Vue 3 μ „μš© 버전 μ‚¬μš© ν•„μš”
  • 일뢀 타사 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” 아직 Vue 3λ₯Ό μ™„μ „νžˆ μ§€μ›ν•˜μ§€ μ•Šμ„ 수 있음
  • λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μœ„ν•œ 곡식 도ꡬ: Vue Migration Guide

✨ 마무리

Vue 3λŠ” λ‹¨μˆœνžˆ "μ—…κ·Έλ ˆμ΄λ“œ" μˆ˜μ€€μ„ λ„˜μ–΄μ„  μƒˆλ‘œμš΄ νŒ¨λŸ¬λ‹€μž„μ˜ μ‹œμž‘μž…λ‹ˆλ‹€.
Composition API의 λ„μž…μ€ Vueλ₯Ό 더 μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“€μ—ˆμœΌλ©°,
μ„±λŠ₯ ν–₯상과 μƒˆλ‘œμš΄ κΈ°λŠ₯듀도 맀우 μΈμƒμ μž…λ‹ˆλ‹€.

Vue 2에 μ΅μˆ™ν•˜μ‹  뢄이라면,
Vue 3의 μƒˆλ‘œμš΄ 문법과 κΈ°λŠ₯듀을 ν•˜λ‚˜μ”© 천천히 μ΅ν˜€λ³΄λŠ” κ±Έ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€.
곡식 λ¬Έμ„œλ‚˜ 예제λ₯Ό μ°Έκ³ ν•˜λ©΄μ„œ μ μ§„μ μœΌλ‘œ μ „ν™˜ν•΄λ³΄μ„Έμš”!

profile
FRONT_END_DEVELOMENT

0개의 λŒ“κΈ€