Nuxt에 대한 학습 내용을 단계적으로 정리해 설명하겠습니다. Nuxt는 Vue.js를 기반으로 한 프레임워크로, SSR(Server-Side Rendering), SSG(Static Site Generation), 파일 기반 라우팅, SEO 최적화, 모듈화된 구조 등 Vue.js 프로젝트를 더욱 강력하게 만들어주는 도구입니다.
1단계: Nuxt란 무엇인가?
Nuxt의 주요 특징
- SSR(서버 사이드 렌더링):
- 서버에서 HTML을 렌더링하고 클라이언트로 보냄.
- SEO와 초기 로딩 속도에 유리.
- 단순한 SPA와는 다르게 검색 엔진이 HTML을 쉽게 읽을 수 있음.
- SSG(정적 사이트 생성):
- 빌드 시 모든 페이지를 HTML로 생성.
- Netlify, Vercel과 같은 정적 호스팅 서비스에 적합.
- 파일 기반 라우팅:
- pages/ 디렉토리에 파일을 생성하면 자동으로 라우팅.
- Vue Router를 따로 설정하지 않아도 됨.
- SEO 최적화:
- Nuxt는 meta 태그, Open Graph 설정, 로봇 친화적인 SSR을 기본적으로 지원.
- 모듈 시스템:
- 다양한 Nuxt 모듈(@nuxtjs/axios, @nuxt/content 등)로 기능 확장 가능.
Nuxt를 사용하면 좋은 프로젝트
- SEO가 중요한 프로젝트 (예: 블로그, 포트폴리오, 전자상거래).
- 정적 사이트가 필요한 프로젝트 (예: 마크다운 기반 문서 사이트).
- 복잡한 라우팅이 필요한 프로젝트.
2단계: Nuxt 프로젝트 구조
Nuxt는 Vue.js 프로젝트보다 더 구조화된 디렉토리 시스템을 제공합니다.
기본 디렉토리 구조
├── assets/ # 정적 자산 (이미지, CSS 등)
├── components/ # Vue 컴포넌트
├── content/ # 마크다운 파일 저장 (Nuxt Content 모듈 사용 시)
├── layouts/ # 레이아웃 컴포넌트 (예: Header, Sidebar 포함)
├── middleware/ # 라우터 미들웨어 (인증 등)
├── pages/ # 파일 기반 라우팅을 위한 페이지
├── plugins/ # Vue 플러그인 (예: PrimeVue 초기화)
├── static/ # 정적 파일 (favicon 등)
├── store/ # Pinia 또는 Vuex 상태 관리 (선택적)
└── nuxt.config.ts # Nuxt 설정 파일
Nuxt의 디렉토리 특징
- pages/ 디렉토리:
- index.vue → / 경로.
- about.vue → /about 경로.
- blog/index.vue → /blog 경로.
- layouts/ 디렉토리:
- 페이지에 공통으로 적용될 레이아웃을 정의.
- 예: 기본 레이아웃(Default), 인증 레이아웃(Auth).
- nuxt.config.ts:
- Nuxt 프로젝트의 설정 파일로, SEO, 플러그인, 모듈 설정을 관리.
3단계: Nuxt 설치 및 초기화
프로젝트 생성
- Nuxt 프로젝트 초기화
- npx nuxi init my-nuxt-project cd my-nuxt-project npm install npm run dev
- 디렉토리 확인 프로젝트를 생성한 후 위에서 설명한 디렉토리 구조가 생성됨.
- 개발 서버 실행
- 개발 서버는 기본적으로 http://localhost:3000에서 실행.
4단계: Nuxt 기본 설정
nuxt.config.ts 설정
Nuxt 프로젝트의 중심 설정 파일입니다. 여기에서 SEO, 모듈, 플러그인을 관리합니다.
기본 설정 예시
export default defineNuxtConfig({
ssr: true, // 서버 사이드 렌더링 활성화
modules: [
'@nuxt/content', // 마크다운 관리 모듈
'@nuxtjs/tailwindcss', // TailwindCSS 통합
],
app: {
head: {
title: 'My Nuxt Project',
meta: [
{ name: 'description', content: 'This is a Nuxt project' },
],
},
},
});
5단계: Nuxt에서 파일 기반 라우팅
Nuxt는 pages/ 디렉토리의 파일을 라우팅으로 변환합니다.
예제
pages/
├── index.vue # '/'
├── about.vue # '/about'
├── blog/
│ ├── index.vue # '/blog'
│ ├── [id].vue # '/blog/:id' (동적 라우팅)
동적 라우팅 예제
<template>
<h1>Blog ID: {{ params.id }}</h1>
</template>
<script setup>
const params = useRoute().params;
</script>
6단계: Nuxt의 주요 기능 소개
- SEO 설정
- 각 페이지에서 SEO 메타 태그를 설정할 수 있음.
<script setup>
definePageMeta({
title: 'About Us',
meta: [{ name: 'description', content: 'Learn more about us.' }],
});
</script>
- 마크다운 렌더링
- Nuxt Content 모듈을 활용해 마크다운 파일을 페이지로 렌더링 가능.
npm install @nuxt/content
<template>
<div>
<h1>{{ document.title }}</h1>
<div v-html="document.body" />
</div>
</template>
<script setup>
const { data: document } = await useContent('my-file').fetch();
</script>
- 다크 모드
- TailwindCSS를 활용해 다크 모드 구현이 간단.
'개발 > vue' 카테고리의 다른 글
4. Nuxt 에 대한 학습 내용 (0) | 2024.12.20 |
---|---|
3. Nuxt 에 대한 학습 내용 (2) | 2024.12.20 |
2. Nuxt 에 대한 학습 내용 (0) | 2024.12.20 |
React vs Vue, Quasar, VitePress, naive ui (2) | 2024.10.25 |