Vue.js 를 배워보자/5. 라우팅

네비게이션 가드

_Blue_Sky_ 2024. 10. 5. 10:17
728x90
728x90

Vue.js 네비게이션 가드: 깊이 있는 이해와 활용 가이드

소개

Vue.js의 강력한 라우팅 기능 중 하나인 네비게이션 가드는 사용자가 특정 URL로 이동할 때 다양한 조건을 검사하고, 필요에 따라 이동을 허용하거나 차단하며, 다른 경로로 리디렉션하는 역할을 합니다. 이를 통해 사용자 경험을 향상시키고, 불필요한 오류를 방지하며, 애플리케이션의 보안을 강화할 수 있습니다.

네비게이션 가드의 종류

Vue.js 네비게이션 가드는 크게 세 가지 종류로 나눌 수 있습니다.

  1. 전역 가드: 애플리케이션 전체에 적용되는 가드입니다. 모든 라우트 이동 시 실행되므로, 로그인 여부 확인, 권한 검사 등 전반적인 액세스 제어에 활용됩니다.
  2. 라우트별 가드: 특정 라우트에만 적용되는 가드입니다. 라우트 설정 시 beforeEnter 옵션을 통해 정의하며, 해당 라우트로 이동할 때만 실행됩니다.
  3. 컴포넌트 가드: 컴포넌트 내에서 정의되는 가드입니다. 컴포넌트의 beforeRouteEnter, beforeRouteUpdate, beforeRouteLeave 훅을 통해 정의하며, 컴포넌트의 생명주기와 관련된 작업을 수행할 수 있습니다.
728x90

네비게이션 가드의 작동 원리

네비게이션 가드는 라우트 이동이 발생할 때마다 순차적으로 호출됩니다. 각 가드는 다음과 같은 인자를 받습니다.

  • to: 이동하려는 라우트 객체
  • from: 현재 라우트 객체
  • next: 다음 가드로 넘어가기 위한 함수

next 함수는 다양한 인자를 받아 다음과 같은 동작을 수행할 수 있습니다.

  • next(): 다음 가드로 이동
  • next(false): 이동을 취소
  • next(error): 에러 발생
  • next('/login'): 다른 경로로 리디렉션

네비게이션 가드 활용 예시

  • 로그인 여부 확인: 로그인이 필요한 페이지에 접근하려 할 때 로그인 상태를 확인하고, 로그인 페이지로 리디렉션합니다.
  • 권한 검사: 사용자의 권한을 확인하고, 해당 권한으로 접근할 수 있는 페이지만 허용합니다.
  • 데이터 로딩: 페이지 이동 전에 필요한 데이터를 미리 로딩하여 사용자 경험을 향상시킵니다.
  • 페이지 보호: 특정 페이지에 대한 접근을 제한하여 민감한 정보를 보호합니다.
  • 비동기 작업: 비동기 작업을 완료한 후에만 다음 페이지로 이동하도록 제어합니다.

코드 예시

// 전역 가드
router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!store.state.user) {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
    } else {
      next()
    }
  } else {
    next()
  }
})

// 라우트별 가드
const router = new VueRouter({
  routes: [
    {
      path: '/admin',
      component: Admin,
      beforeEnter: (to, from, next) => {
        if (store.state.user.role !== 'admin') {
          next('/forbidden')
        } else {
          next()
        }
      }
    }
  ]
})

결론

네비게이션 가드는 Vue.js 애플리케이션의 핵심적인 기능 중 하나입니다. 다양한 상황에 맞춰 유연하게 활용하여 사용자 경험을 향상시키고, 애플리케이션의 안정성을 높일 수 있습니다.

추가적으로 알아두면 좋은 점

  • 비동기 작업: next 함수를 이용하여 비동기 작업을 처리하고, 작업 완료 후에 다음 가드로 넘어갈 수 있습니다.
  • 에러 처리: next(error)를 사용하여 에러를 처리하고, 사용자에게 적절한 메시지를 표시할 수 있습니다.
  • 메타 필드: 라우트 설정 시 meta 필드를 사용하여 추가적인 정보를 전달하고, 가드에서 이 정보를 활용할 수 있습니다.

 

728x90
728x90

'Vue.js 를 배워보자 > 5. 라우팅' 카테고리의 다른 글

네비게이션 링크  (0) 2024.10.05
라우트 설정  (0) 2024.10.05
Vue Router  (0) 2024.10.05