
Nuxt.js는 Vue.js 기반의 프레임워크로, 빠르고 효율적으로 웹 애플리케이션을 제작할 수 있도록 도와줍니다.
주요 역할은 개발자가 SPA(Single Page Application), SSR(Server Side Rendering), 또는 정적 사이트를 쉽게 구현할 수 있도록 Vuex, Vue Router, Axios 등 자주 쓰이는 라이브러리들을 미리 구성해두었다는 점.
예제 코드:
<script setup lang="ts">
// 반응형 데이터 정의 (ref)
const count = ref<number>(1)
// 계산된 속성 (computed)
const double = computed<string>(() => count.value * 2 + '개')
// 읽기 전용 데이터 (readonly)
const readonlyCount = readonly(count)
// 값 변경 시 콜백 실행 (watch)
watch(count, (newVal, oldVal) => {
console.log(newVal, oldVal)
})
// 데이터 업데이트 함수들
const increaseCount = () => { count.value++ }
const decreaseCount = () => { count.value-- }
</script>
ref, computed, watch 등과 Nuxt 전용 훅(예: useAsyncData, useFetch)을 자동으로 import 해줍니다.import { ref, computed } from '#imports'
nuxt.config.ts에서 auto-import 기능을 비활성화할 수 있습니다.nuxt/axios나 nuxt/http 대신, ofetch 기반의 $fetch 함수를 사용하여 데이터를 비동기적으로 가져올 수 있습니다.예제 코드:
const { data, pending, error, refresh } = await useAsyncData(
'mountains',
() => $fetch('https://api.nuxtjs.dev/mountains')
)
pages/ 폴더 구조를 통해 라우팅을 자동으로 설정하고, layouts/를 이용해 공통 레이아웃을 쉽게 적용할 수 있습니다.components/나 composables/ 폴더에 있는 파일을 자동으로 전역에서 사용할 수 있으므로 코드의 중복과 설정 부담을 줄여줍니다.[id].vue나 blog-[id].vue)을 사용할 때 가독성과 유지보수가 용이합니다.프로젝트 요구사항 분석:
단순한 SPA로 충분하고 SEO나 초기 로딩 속도에 큰 제약이 없다면 굳이 Nuxt.js 3를 도입할 필요는 없습니다.
플러그인 및 모듈 호환성:
기존 Vue 3에서 사용하던 일부 라이브러리나 플러그인이 Nuxt.js 3 환경에서 별도 설정이나 교체가 필요할 수 있으므로 사전에 검토해야 합니다.
자동 임포트와 코드 명시성:
Nuxt는 많은 기능을 자동으로 임포트해주지만, 이로 인해 코드의 동작 원리를 처음 접하는 개발자에게는 혼란을 줄 수도 있습니다. 프로젝트 문서화나 팀 내부 가이드가 필요할 수 있습니다.
Vue 3 단독으로 SPA를 만드는 경우에도 충분하지만, SEO 최적화, 빠른 초기 로딩 그리고 복잡한 라우팅 및 레이아웃 관리가 중요한 프로젝트에서는 Nuxt.js 3의 도입이 매우 효과적입니다. 또한 최신 개발 도구(Vite, TypeScript)와 통합되어 있어 생산성 및 유지보수 측면에서도 큰 이점을 제공합니다.