minstudio

Nuxt 4 새로운 디렉토리 구조

Nuxt 3까지는 프로젝트 루트 공간에 모든 소스 폴더가 혼재되어 있었습니다. Nuxt 4에서는 소스 코드의 경계를 명확히 하기 위해 모든 프론트엔드 관련 파일을 app/ 디렉토리 내부로 옮기는 혁신적인 구조 변경을 단행했습니다.

📁 Nuxt 4 디렉토리 아키텍처 (app/ 도입) my-nuxt-app/ (Root) package.json, nuxt.config.ts 📂 app/ (Nuxt 4의 핵심 소스 폴더!) 📄 app.vue (메인 진입점) 📂 components/ (자동 임포트됨) 📂 pages/ (URL 주소가 되는 폴더) 📂 layouts/ (공통 UI 껍데기) 📂 assets/ (CSS/SCSS 등 에셋) 📂 public/ favicon.ico, 로고 이미지 등 / URL에 그대로 노출됨 📂 server/ Nitro 백엔드 서버 로직 API 및 미들웨어 관리
<!-- ==========================================
// 📂 app/app.vue (앱의 메인 진입점)
// ========================================== -->
<template>
  <!-- 
    Nuxt 4에서는 src/app.vue 나 루트의 app.vue 가 아닌,
    'app/app.vue' 가 최상단 메인 파일이 됩니다. 
  -->
  <div>
    <!-- 전역적으로 적용될 공통 요소를 여기에 넣을 수 있습니다. -->
    <NuxtRouteAnnouncer />
    
    <!-- 
      <NuxtLayout>은 app/layouts 폴더의 공통 껍데기를 적용합니다. 
      <NuxtPage>는 app/pages 폴더의 개별 화면을 끼워 넣습니다.
    -->
    <NuxtLayout>
      <NuxtPage />
    </NuxtLayout>
  </div>
</template>

<!-- ==========================================
// 📂 app/components/MyButton.vue (자동 임포트 테스트)
// ========================================== -->
<template>
  <button class="bg-blue-500 text-white px-4 py-2 rounded">
    <!-- 자식 컴포넌트에서 slot을 뚫어 텍스트를 받습니다. -->
    <slot>기본 버튼</slot>
  </button>
</template>

<script setup>
// 이 컴포넌트는 'app/components' 안에 있기 때문에,
// 다른 파일에서 import MyButton from ... 할 필요 없이 바로 
// <MyButton> 태그로 사용 가능합니다! (마법 같은 자동 임포트)
</script>
Nuxt 4 새로운 디렉토리 구조 | Minstudio