Skip to content

μ‹œμž‘ν•˜κΈ° ​

Vue RouterλŠ” Vue의 곡식 ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ… μ†”λ£¨μ…˜μž…λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ…μ€ μ‹±κΈ€ νŽ˜μ΄μ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(SPA)μ—μ„œ λΈŒλΌμš°μ € URL을 μ‚¬μš©μžκ°€ λ³΄λŠ” μ½˜ν…μΈ μ™€ μ—°κ²°ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 탐색할 λ•Œ URL이 그에 맞게 μ—…λ°μ΄νŠΈλ˜μ§€λ§Œ, νŽ˜μ΄μ§€λ₯Ό μ„œλ²„μ—μ„œ λ‹€μ‹œ λ‘œλ“œν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

Vue RouterλŠ” Vue의 μ»΄ν¬λ„ŒνŠΈ μ‹œμŠ€ν…œ μœ„μ— κ΅¬μΆ•λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 라우트λ₯Ό κ΅¬μ„±ν•˜μ—¬ 각 URL κ²½λ‘œμ— μ–΄λ–€ μ»΄ν¬λ„ŒνŠΈλ₯Ό 보여쀄지 Vue Router에 μ•Œλ €μ€λ‹ˆλ‹€.

사전 μ€€λΉ„ 사항

이 κ°€μ΄λ“œλŠ” μ—¬λŸ¬λΆ„μ΄ 이미 Vue μžμ²΄μ— μ΅μˆ™ν•˜λ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. Vue 전문가일 ν•„μš”λŠ” μ—†μ§€λ§Œ, νŠΉμ • κΈ°λŠ₯에 λŒ€ν•΄ 더 λ§Žμ€ 정보가 ν•„μš”ν•  λ•Œ Vue 곡식 λ¬Έμ„œλ₯Ό μ°Έκ³ ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ ​

μ£Όμš” κ°œλ…μ„ μ†Œκ°œν•˜κΈ° μœ„ν•΄, λ‹€μŒκ³Ό 같은 μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€:

μš°λ¦¬λŠ” λ¨Όμ € 루트 μ»΄ν¬λ„ŒνŠΈμΈ App.vueλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

App.vue ​

vue
<template>
  <h1>Hello App!</h1>
  <p>
    <strong>ν˜„μž¬ 라우트 경둜:</strong> {{ $route.fullPath }}
  </p>
  <nav>
    <RouterLink to="/">ν™ˆμœΌλ‘œ 이동</RouterLink>
    <RouterLink to="/about">μ†Œκ°œλ‘œ 이동</RouterLink>
  </nav>
  <main>
    <RouterView />
  </main>
</template>

이 ν…œν”Œλ¦Ώμ€ Vue Routerμ—μ„œ μ œκ³΅ν•˜λŠ” 두 κ°€μ§€ μ»΄ν¬λ„ŒνŠΈμΈ RouterLink와 RouterViewλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

일반적인 <a> νƒœκ·Έ λŒ€μ‹ , 링크λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ μ»€μŠ€ν…€ μ»΄ν¬λ„ŒνŠΈμΈ RouterLinkλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 Vue RouterλŠ” νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œ κ³ μΉ˜μ§€ μ•Šκ³ λ„ URL을 λ³€κ²½ν•˜κ³ , URL 생성, 인코딩, λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. RouterLink에 λŒ€ν•΄μ„œλŠ” κ°€μ΄λ“œμ˜ λ’·λΆ€λΆ„μ—μ„œ 더 μžμ„Ένžˆ λ‹€λ£° μ˜ˆμ •μž…λ‹ˆλ‹€.

RouterView μ»΄ν¬λ„ŒνŠΈλŠ” Vue Routerμ—κ²Œ ν˜„μž¬ 라우트 μ»΄ν¬λ„ŒνŠΈλ₯Ό 어디에 λ Œλ”λ§ν• μ§€ μ•Œλ €μ€λ‹ˆλ‹€. μ΄λŠ” ν˜„μž¬ URL κ²½λ‘œμ— ν•΄λ‹Ήν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€. λ°˜λ“œμ‹œ App.vue에 μžˆμ„ ν•„μš”λŠ” μ—†μœΌλ©°, λ ˆμ΄μ•„μ›ƒμ— 맞게 μ–΄λ””μ—λ‚˜ λ‘˜ 수 μžˆμ§€λ§Œ, λ°˜λ“œμ‹œ μ–΄λ”˜κ°€μ— ν¬ν•¨λ˜μ–΄μ•Ό Vue Routerκ°€ 아무것도 λ Œλ”λ§ν•˜μ§€ μ•ŠλŠ” 상황을 λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„ μ˜ˆμ‹œμ—μ„œλŠ” {{ $route.fullPath }}도 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ»΄ν¬λ„ŒνŠΈ ν…œν”Œλ¦Ώμ—μ„œ $routeλ₯Ό μ‚¬μš©ν•˜μ—¬ ν˜„μž¬ 라우트λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 객체에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Vue Mastery Logo Get the Vue Router Cheat Sheet from Vue Mastery

λΌμš°ν„° μΈμŠ€ν„΄μŠ€ μƒμ„±ν•˜κΈ° ​

λΌμš°ν„° μΈμŠ€ν„΄μŠ€λŠ” createRouter() ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μƒμ„±ν•©λ‹ˆλ‹€:

js
import { createMemoryHistory, createRouter } from 'vue-router'

import HomeView from './HomeView.vue'
import AboutView from './AboutView.vue'

const routes = [
  { path: '/', component: HomeView },
  { path: '/about', component: AboutView },
]

const router = createRouter({
  history: createMemoryHistory(),
  routes,
})

routes μ˜΅μ…˜μ€ URL 경둜λ₯Ό μ»΄ν¬λ„ŒνŠΈμ— λ§€ν•‘ν•˜μ—¬ 라우트 자체λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. component μ˜΅μ…˜μ— μ§€μ •λœ μ»΄ν¬λ„ŒνŠΈκ°€ μ•žμ„œ λ³Έ App.vue의 <RouterView>에 μ˜ν•΄ λ Œλ”λ§λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 라우트 μ»΄ν¬λ„ŒνŠΈλŠ” _λ·°(view)_라고도 λΆˆλ¦¬μ§€λ§Œ, 사싀 일반적인 Vue μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€.

λ§Œμ•½ _ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ_λ₯Ό 라우트 μ»΄ν¬λ„ŒνŠΈλ‘œ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄, μ§€μ—° λ‘œλ”© λΌμš°νŠΈμ™€ ꡬ뢄할 수 μžˆλ„λ‘ λ°˜λ“œμ‹œ displayName을 μ§€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€:

ts
const AboutPage: FunctionalComponent = () => {
  return h('h1', {}, 'About')
}
AboutPage.displayName = 'AboutPage'

λΌμš°νŠΈλŠ” 이 외에도 λ‹€μ–‘ν•œ μ˜΅μ…˜μ„ μ§€μ›ν•˜μ§€λ§Œ, μ§€κΈˆμ€ path와 component만 ν•„μš”ν•©λ‹ˆλ‹€.

history μ˜΅μ…˜μ€ λΌμš°νŠΈκ°€ URL에 μ–΄λ–»κ²Œ λ§€ν•‘λ˜λŠ”μ§€, 그리고 κ·Έ λ°˜λŒ€μ˜ 경우λ₯Ό μ œμ–΄ν•©λ‹ˆλ‹€. Playground μ˜ˆμ‹œμ—μ„œλŠ” λΈŒλΌμš°μ € URL을 μ™„μ „νžˆ λ¬΄μ‹œν•˜κ³  자체 λ‚΄λΆ€ URL을 μ‚¬μš©ν•˜λŠ” createMemoryHistory()λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” Playgroundμ—λŠ” μ ν•©ν•˜μ§€λ§Œ, μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” 일반적으둜 μ›ν•˜λŠ” 방식이 μ•„λ‹™λ‹ˆλ‹€. 보톡은 createWebHistory()λ‚˜, ν˜Ήμ€ createWebHashHistory()λ₯Ό μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€. 이에 λŒ€ν•΄μ„œλŠ” νžˆμŠ€ν† λ¦¬ λͺ¨λ“œ κ°€μ΄λ“œμ—μ„œ 더 μžμ„Ένžˆ λ‹€λ£Ήλ‹ˆλ‹€.

λΌμš°ν„° ν”ŒλŸ¬κ·ΈμΈ λ“±λ‘ν•˜κΈ° ​

λΌμš°ν„° μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•œ ν›„μ—λŠ”, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ use()λ₯Ό ν˜ΈμΆœν•˜μ—¬ ν”ŒλŸ¬κ·ΈμΈμœΌλ‘œ 등둝해야 ν•©λ‹ˆλ‹€:

js
createApp(App)
  .use(router)
  .mount('#app')

λ˜λŠ”, λ‹€μŒκ³Ό 같이 μ“Έ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€:

js
const app = createApp(App)
app.use(router)
app.mount('#app')

λŒ€λΆ€λΆ„μ˜ Vue ν”ŒλŸ¬κ·ΈμΈκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ, use() ν˜ΈμΆœμ€ mount() 호좜 전에 이루어져야 ν•©λ‹ˆλ‹€.

이 ν”ŒλŸ¬κ·ΈμΈμ΄ 무슨 일을 ν•˜λŠ”μ§€ κΆκΈˆν•˜λ‹€λ©΄, μ£Όμš” 역할은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  1. RouterView와 RouterLink μ»΄ν¬λ„ŒνŠΈλ₯Ό μ „μ—­ λ“±λ‘ν•©λ‹ˆλ‹€.
  2. μ „μ—­ $router와 $route 속성을 μΆ”κ°€ν•©λ‹ˆλ‹€.
  3. useRouter()와 useRoute() 컴포저블을 μ‚¬μš©ν•  수 있게 ν•©λ‹ˆλ‹€.
  4. λΌμš°ν„°κ°€ 초기 라우트λ₯Ό ν•΄μ„ν•˜λ„λ‘ νŠΈλ¦¬κ±°ν•©λ‹ˆλ‹€.

λΌμš°ν„°μ™€ ν˜„μž¬ λΌμš°νŠΈμ— μ ‘κ·Όν•˜κΈ° ​

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ‹€λ₯Έ κ³³μ—μ„œ λΌμš°ν„°μ— μ ‘κ·Όν•˜κ³  싢을 λ•Œκ°€ λ§Žμ„ κ²ƒμž…λ‹ˆλ‹€.

λΌμš°ν„° μΈμŠ€ν„΄μŠ€λ₯Ό ES λͺ¨λ“ˆμ—μ„œ exportν•˜κ³  μžˆλ‹€λ©΄, ν•„μš”ν•œ κ³³μ—μ„œ 직접 importν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. κ²½μš°μ— 따라 이 방법이 κ°€μž₯ 쒋을 수 μžˆμ§€λ§Œ, μ»΄ν¬λ„ŒνŠΈ 내뢀라면 λ‹€λ₯Έ 방법도 μžˆμŠ΅λ‹ˆλ‹€.

μ»΄ν¬λ„ŒνŠΈ ν…œν”Œλ¦Ώμ—μ„œλŠ” λΌμš°ν„° μΈμŠ€ν„΄μŠ€κ°€ $router둜 λ…ΈμΆœλ©λ‹ˆλ‹€. μ΄λŠ” μ•žμ„œ λ³Έ $route 속성과 λΉ„μŠ·ν•˜μ§€λ§Œ, 끝에 r이 ν•˜λ‚˜ 더 λΆ™μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

Options APIλ₯Ό μ‚¬μš©ν•  λ•ŒλŠ”, JavaScript μ½”λ“œμ—μ„œ this.$router와 this.$route둜 이 두 속성에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. Playground μ˜ˆμ‹œμ˜ HomeView.vue μ»΄ν¬λ„ŒνŠΈλŠ” λ‹€μŒκ³Ό 같이 λΌμš°ν„°μ— μ ‘κ·Όν•©λ‹ˆλ‹€:

js
export default {
  methods: {
    goToAbout() {
      this.$router.push('/about')
    },
  },
}

이 λ©”μ„œλ“œλŠ” ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μ˜ λ„€λΉ„κ²Œμ΄μ…˜μ— μ‚¬μš©λ˜λŠ” push()λ₯Ό ν˜ΈμΆœν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이에 λŒ€ν•΄μ„œλŠ” λ‚˜μ€‘μ— 더 μžμ„Ένžˆ λ°°μ›λ‹ˆλ‹€.

Composition APIμ—μ„œλŠ” thisλ₯Ό 톡해 μ»΄ν¬λ„ŒνŠΈ μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•  수 μ—†μœΌλ―€λ‘œ, Vue RouterλŠ” λŒ€μ‹  μ‚¬μš©ν•  수 μžˆλŠ” λͺ‡ κ°€μ§€ 컴포저블을 μ œκ³΅ν•©λ‹ˆλ‹€. Playground μ˜ˆμ‹œμ˜ AboutView.vueλŠ” 이 방식을 μ‚¬μš©ν•©λ‹ˆλ‹€:

vue
<script setup>
import { computed } from 'vue'
import { useRoute, useRouter } from 'vue-router'

const router = useRouter()
const route = useRoute()

const search = computed({
  get() {
    return route.query.search ?? ''
  },
  set(search) {
    router.replace({ query: { search } })
  },
})
</script>

μ§€κΈˆ λ‹Ήμž₯ 이 μ½”λ“œ 전체λ₯Ό 이해할 ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. μ€‘μš”ν•œ 점은, useRouter()와 useRoute() 컴포저블을 μ‚¬μš©ν•˜μ—¬ 각각 λΌμš°ν„° μΈμŠ€ν„΄μŠ€μ™€ ν˜„μž¬ λΌμš°νŠΈμ— μ ‘κ·Όν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‹€μŒ 단계 ​

Viteλ₯Ό μ‚¬μš©ν•œ 전체 μ˜ˆμ‹œλ₯Ό 보고 μ‹Άλ‹€λ©΄, create-vue μŠ€μΊν΄λ”© 도ꡬλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ„κ΅¬λŠ” 예제 ν”„λ‘œμ νŠΈμ— Vue Routerλ₯Ό 포함할 수 μžˆλŠ” μ˜΅μ…˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€:

bash
npm create vue@latest
bash
yarn create vue
bash
pnpm create vue

create-vue둜 μƒμ„±λœ 예제 ν”„λ‘œμ νŠΈλŠ” μ—¬κΈ°μ„œ λ³Έ 것과 μœ μ‚¬ν•œ κΈ°λŠ₯을 μ‚¬μš©ν•©λ‹ˆλ‹€. 이 ν”„λ‘œμ νŠΈλŠ” 이 κ°€μ΄λ“œμ˜ λ‹€μŒ νŽ˜μ΄μ§€μ—μ„œ μ†Œκ°œν•  κΈ°λŠ₯듀을 νƒμƒ‰ν•˜λŠ” 데 μœ μš©ν•œ 좜발점이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

이 κ°€μ΄λ“œμ˜ κ΄€λ‘€ ​

μ‹±κΈ€ 파일 μ»΄ν¬λ„ŒνŠΈ ​

Vue RouterλŠ” λ²ˆλ“€λŸ¬(예: Vite)와 SFC(즉, .vue 파일)λ₯Ό μ‚¬μš©ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ κ°€μž₯ 일반적으둜 μ‚¬μš©λ©λ‹ˆλ‹€. 이 κ°€μ΄λ“œμ˜ λŒ€λΆ€λΆ„μ˜ μ˜ˆμ‹œλŠ” μ΄λŸ¬ν•œ μŠ€νƒ€μΌλ‘œ μž‘μ„±λ˜μ§€λ§Œ, Vue Router μžμ²΄λŠ” λΉŒλ“œ λ„κ΅¬λ‚˜ SFC μ‚¬μš©μ„ μš”κ΅¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, Vue와 Vue Router의 _κΈ€λ‘œλ²Œ λΉŒλ“œ_λ₯Ό μ‚¬μš©ν•˜λŠ” 경우, λΌμ΄λΈŒλŸ¬λ¦¬λŠ” importκ°€ μ•„λ‹Œ μ „μ—­ 객체λ₯Ό 톡해 λ…ΈμΆœλ©λ‹ˆλ‹€:

js
const { createApp } = Vue
const { createRouter, createWebHistory } = VueRouter

μ»΄ν¬λ„ŒνŠΈ API μŠ€νƒ€μΌ ​

Vue RouterλŠ” Composition API와 Options API λͺ¨λ‘μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 관련이 μžˆμ„ λ•Œ, 이 κ°€μ΄λ“œμ˜ μ˜ˆμ‹œλŠ” 두 κ°€μ§€ μŠ€νƒ€μΌλ‘œ μž‘μ„±λœ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€. Composition API μ˜ˆμ‹œλŠ” 일반적으둜 λͺ…μ‹œμ μΈ setup ν•¨μˆ˜ λŒ€μ‹  <script setup>을 μ‚¬μš©ν•©λ‹ˆλ‹€.

두 κ°€μ§€ μŠ€νƒ€μΌμ— λŒ€ν•œ 볡슡이 ν•„μš”ν•˜λ‹€λ©΄ Vue - API μŠ€νƒ€μΌμ„ μ°Έκ³ ν•˜μ„Έμš”.

router와 route ​

κ°€μ΄λ“œ μ „λ°˜μ— 걸쳐, λΌμš°ν„° μΈμŠ€ν„΄μŠ€λ₯Ό router라고 λΆ€λ¦…λ‹ˆλ‹€. μ΄λŠ” createRouter()κ°€ λ°˜ν™˜ν•˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 이 객체에 μ ‘κ·Όν•˜λŠ” 방법은 상황에 따라 λ‹€λ¦…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Composition APIλ₯Ό μ‚¬μš©ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” useRouter()λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. Options APIμ—μ„œλŠ” this.$routerλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

λ§ˆμ°¬κ°€μ§€λ‘œ, ν˜„μž¬ λΌμš°νŠΈλŠ” route라고 λΆ€λ¦…λ‹ˆλ‹€. μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” μ‚¬μš©ν•˜λŠ” API에 따라 useRoute() λ˜λŠ” this.$route둜 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

RouterView와 RouterLink μ»΄ν¬λ„ŒνŠΈλŠ” λͺ¨λ‘ μ „μ—­ λ“±λ‘λ˜μ–΄ μžˆμœΌλ―€λ‘œ, μ»΄ν¬λ„ŒνŠΈ ν…œν”Œλ¦Ώμ—μ„œ μ‚¬μš©ν•  λ•Œ importν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ›ν•œλ‹€λ©΄, 예λ₯Ό λ“€μ–΄ import { RouterLink } from 'vue-router'와 같이 둜컬둜 importν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

ν…œν”Œλ¦Ώμ—μ„œλŠ” μ»΄ν¬λ„ŒνŠΈ 이름을 PascalCase λ˜λŠ” μΌ€λ°₯ μΌ€μ΄μŠ€λ‘œ μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€. Vue의 ν…œν”Œλ¦Ώ μ»΄νŒŒμΌλŸ¬λŠ” 두 κ°€μ§€ ν˜•μ‹μ„ λͺ¨λ‘ μ§€μ›ν•˜λ―€λ‘œ, <RouterView>와 <router-view>λŠ” 보톡 λ™μΌν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ λ‚΄μ—μ„œ μ‚¬μš©λ˜λŠ” κ΄€λ‘€λ₯Ό λ”°λ₯΄λ©΄ λ©λ‹ˆλ‹€.

in-DOM ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•˜λŠ” 경우 일반적인 μ£Όμ˜μ‚¬ν•­μ΄ μ μš©λ©λ‹ˆλ‹€: μ»΄ν¬λ„ŒνŠΈ 이름은 λ°˜λ“œμ‹œ μΌ€λ°₯ μΌ€μ΄μŠ€λ‘œ μž‘μ„±ν•΄μ•Ό ν•˜λ©°, μ…€ν”„ ν΄λ‘œμ§• νƒœκ·ΈλŠ” μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ <RouterView /> λŒ€μ‹  <router-view></router-view>λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λͺ¨λ‘λ₯Ό μœ„ν•œ λ¬Έμ„œ ν•œκΈ€ν™”