참고
🌐 네비게이션 가드
Vue 3 를 이용해 개발하다보면, 사용자의 인증 여부에 따라 페이지 접근을 제한하거나, 페이지 전환 전/후에 특정 로직을 실행하고 싶을 때가 있습니다.
SSR 웹사이트의 경우 서버가 요청을 받아서 처리를 하면 되지만, CSR 인 Vue 에서는 Client 에서 페이지 이동을 확인해야 합니다. 다행히 Vue Router 에서는 Router 를 탈때 특정 로직 수행을 위해 네비게이션 가드 를 제공합니다.
네비게이션 가드 는 라우터 전환 시점에 개입할 수 있게 해주는 훅 입니다.
🛡️ 전역 가드
전역 가드는 애플리케이션 전체에 적용되며, 모든 라우트 변경 시 실행됩니다.
- beforeEach: 모든 라우팅 전에 실행
- beforeResolve: 컴포넌트 렌더링 전 비동기 작업
- afterEach: 라우팅 완료 후 작업
const router = new VueRouter({ ... }); |
이 예제에서는 meta.requiresAuth가 true인 라우트에 대해 인증 여부를 확인하고, 인증되지 않은 경우 로그인 페이지로 리다이렉트합니다.
🛡️ 라우터별 가드 - beforeEnter
beforeEnter 는 특정 라우트 진입 전
전역 가드보다 먼저 실행되며, 특정 페이지에서만 실행시키고 싶은 로직이 있을 경우 적용할 수 있습니다.
{ |
🛡️ 컴포넌트 내 가드
컴포넌트 내 가드는 컴포넌트 진입 전/후/변경시
✅ beforeRouteEnter
beforeRouteEnter 는 컴포넌트 진입 전에 실행되는 가드입니다. 실제로는 beforeRouteEnter 대신에 beforeCreate 나 onMounted 를 많이 사용 했었어서 생각보다 자주 사용되지는 않는 가드 같습니다.
beforeRouteEnter(to, from, next) { |
✅ beforeRouteUpdate
beforeRouteUpdate 에서 같은 컴포넌트 에서 라우트 파라미터 변경시에 사용되는 가드입니다. beforeRouteUpdate 를 사용하게 되면 마운트 과정을 거치지 않기 때문에 onMounted 는 호출되지 않습니다.
beforeRouteUpdate(to, from, next) { |
✅ beforeRouteLeave
beforeRouteLeave 는 컴포넌트 떠나기 전에 실행되는 가드입니다. 보통 데이터의 저장 없이 페이지를 떠나는 경우 페이지 이동을 확인하기 위해 많이 사용하는 가드입니다.
onBeforeRouteLeave((to, from, next) => { |