Vue 프로젝트 폴더 구조 정리
2025. 5. 18. 15:56ㆍFront-End/Vue.js
반응형
백엔드만 다루던 개발자가 프론트엔드를 맡게 되는 순간, 가장 먼저 마주하게 되는 건 낯선 디렉토리 구조입니다.
Vue를 기반으로 한 프로젝트를 진행하게 된다면, 기본적인 구조를 이해하고 역할을 파악하는 것이 중요합니다.
이 글에서는 Vue 프로젝트에서 자주 쓰이는 폴더 구조와 그 안의 역할들을 정리합니다.
1. 기본 구조 예시
src/
├── assets/
├── components/
├── views/
├── router/
├── store/ ← Pinia/Vuex 상태 관리
├── services/ ← API 호출 모듈
├── utils/ ← 유틸 함수 모음
├── composables/ ← Composition API용 공통 로직
├── layouts/ ← 공통 레이아웃 (예: 헤더 + 사이드바)
├── App.vue
└── main.js
2. 폴더별 역할 설명
📁 assets/
- 이미지, CSS, 폰트 등 정적 리소스를 저장하는 곳입니다.
- 예: logo.png, global.css
📁 components/
- 재사용 가능한 UI 조각들을 정의합니다.
- 예: 버튼, 카드, 모달 등
- Atomic Design을 따르는 경우 atoms/, molecules/, organisms/로 나눌 수 있습니다.
📁 views/
- 실제 페이지 단위 컴포넌트입니다.
- 라우터와 연결되는 화면들을 이곳에 구성합니다.
- 예: HomeView.vue, LoginView.vue, DashboardView.vue
📁 router/
- Vue Router 설정을 정의합니다.
- 예: index.js 안에 각 URL과 컴포넌트 매핑
// router/index.js
{
path: '/login',
component: LoginView
}
📁 store/
- 상태 관리 라이브러리 (Pinia/Vuex) 관련 설정을 담습니다.
- 예: authStore.js, userStore.js
📁 services/
- 백엔드 API와 통신하는 로직을 모읍니다.
- Axios 인스턴스와 각 도메인별 API 함수 정의
// services/userService.js
export function fetchUsers() {
return axios.get('/api/users');
}
📁 utils/
- 날짜 포맷터, 숫자 변환 등 공통 유틸 함수들을 모아놓습니다.
- 예: formatDate.js, parseCurrency.js
📁 composables/
- Composition API에서 useXyz 형태로 공통 로직을 재사용하는 훅(hook)을 정의합니다.
- 예: useModal.js, usePagination.js
📁 layouts/
- 페이지 레이아웃을 담당하는 컴포넌트들입니다.
- 예: DefaultLayout.vue, AdminLayout.vue
- 일반적으로 헤더, 푸터, 사이드바 등을 포함합니다.
3. 파일 단위 주요 구성
- App.vue: 앱의 최상위 컴포넌트 (라우터, 레이아웃 진입점)
- main.js: Vue 앱 초기화, 플러그인 등록, 마운트 처리
// main.js
const app = createApp(App);
app.use(router);
app.use(createPinia());
app.mount('#app');
4. 추천 폴더 관리 팁
| UI 컴포넌트가 많아짐 | components/common/, components/chart/ 등 분류 |
| API 많아짐 | services/api/user.js, services/api/chat.js 등 분리 |
| 역할이 명확하지 않을 때 | 이름을 helper, lib, features 등으로 명확하게 지정 |
| Vue Composition API 적극 사용 | composables/ 적극 활용 (React의 hooks와 비슷) |
UI 컴포넌트, 페이지 뷰, API 로직, 공통 유틸리티, 상태 관리 이 다섯 가지를 중심으로 구조를 잡아가면 됩니다.
반응형
'Front-End > Vue.js' 카테고리의 다른 글
| async/await 완벽 이해하기 – JavaScript 비동기 처리의 핵심 (0) | 2025.05.28 |
|---|---|
| Vue Composition API를 쓰면서 헷갈리는 this, 화살표 함수, Promise, async/await 정리 (0) | 2025.05.28 |
| Vue3 - Computed() (0) | 2025.04.06 |
| Vue에서 <template> 태그는 언제 써야 할까? (0) | 2025.04.06 |
| Vue 3 – <script setup> 사용법 정리 (0) | 2025.03.30 |