| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- Vue
- toggle
- go
- emit
- todo-list
- TODO
- map
- Vue.js
- golang
- container
- localStorage
- PROPS
- Refactoring
- channel
- Server
- URL
- App.vue
- Dictionary
- graceful shutdown
- websocket
- goroutine
- reactivity
- goroutines
- 행렬
- CDN
- Matrix
- method
- SFC
- cli
- component
- Today
- Total
ksundev 님의 블로그
Vue 프로젝트 설정 방법 비교: 수동 Webpack vs Vue CLI 본문
Vue.js 프로젝트 설정 방법 비교: 수동 Webpack vs Vue CLI
Vue.js 프로젝트를 시작할 때 개발자들이 마주하는 첫 번째 선택지는 바로 어떤 방식으로 프로젝트를 설정할 것인가입니다. 크게 두 가지 접근 방법이 있습니다: 수동으로 Webpack을 설정하는 방법과 Vue CLI를 사용하는 방법. 이 글에서는 두 방식의 차이점과 각각의 장단점을 자세히 살펴보겠습니다.
수동 Webpack 설정이란?
수동 Webpack 설정은 개발자가 직접 빌드 도구와 설정 파일을 구성하는 방식입니다. 물론 처음부터 모든 걸 타이핑하지는 않고, 보통은 다음과 같은 방법들을 사용합니다:
일반적인 수동 설정 방법들:
- 공식 문서나 튜토리얼의 예제 코드 복사
- GitHub의 보일러플레이트 템플릿 사용
- 기존 프로젝트의 설정 파일 복사 후 수정
- 온라인 webpack 설정 생성기 활용
예를 들어, 다음과 같은 webpack.config.js 파일을 기반으로 시작하게 됩니다:
var path = require('path')
var webpack = require('webpack')
module.exports = {
entry: './src/main.js',
output: {
path: path.resolve(__dirname, './dist'),
publicPath: '/dist/',
filename: 'build.js'
},
module: {
rules: [
{
test: /\.css$/,
use: ['vue-style-loader', 'css-loader'],
},
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {}
}
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.(png|jpg|gif|svg)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]?[hash]'
}
}
]
},
resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js'
},
extensions: ['*', '.js', '.vue', '.json']
},
devServer: {
historyApiFallback: true,
noInfo: true,
overlay: true
},
performance: {
hints: false
},
devtool: '#eval-source-map'
}
Vue CLI란?
Vue CLI는 Vue.js 팀에서 공식적으로 제공하는 명령줄 도구로, 미리 구성된 템플릿을 사용해 Vue 프로젝트를 빠르게 생성할 수 있게 해줍니다.
# Vue CLI 설치
npm install -g @vue/cli
# 새 프로젝트 생성
vue create my-project
실제 작업 과정 비교
수동 Webpack 설정의 실제 과정
1단계: 기본 템플릿 선택
# GitHub에서 Vue Webpack 보일러플레이트 클론
git clone https://github.com/vuejs-templates/webpack-simple.git
# 또는
npm init webpack-simple my-project
2단계: 필요에 맞게 커스터마이징
- package.json의 의존성 수정
- webpack.config.js 설정 조정
- 추가 로더나 플러그인 설치 및 설정
- 개발/프로덕션 환경 분리
3단계: 추가 기능 구현
# 필요한 패키지들을 하나씩 설치하고 설정
npm install --save-dev sass-loader
npm install --save-dev eslint-loader
npm install --save-dev @babel/preset-env
# 각각을 webpack.config.js에 수동으로 추가
Vue CLI의 실제 과정
1단계: 프로젝트 생성
vue create my-project
# 대화형 인터페이스에서 필요한 기능 선택
2단계: 즉시 개발 시작
cd my-project
npm run serve
# 모든 설정이 이미 완료된 상태
상세 비교 분석
1. 초기 설정 시간과 노력
수동 Webpack 설정
- 기본 템플릿을 찾고 이해하는 시간: 30분~1시간
- 프로젝트 요구사항에 맞게 수정하는 시간: 1~3시간
- 버그 발생 시 디버깅 시간: 추가 1~2시간
- 총 소요 시간: 2~6시간
Vue CLI
- 프로젝트 생성 시간: 5~10분
- 기본 설정 이해 시간: 10~20분
- 커스터마이징 시간 (필요시): 30분~1시간
- 총 소요 시간: 15분~1.5시간
2. 실제 개발자 경험
수동 Webpack 설정의 현실
# 새로운 기능을 추가할 때마다...
npm install vue-router --save
# webpack.config.js 수정 필요
# 설정 에러 발생 시 Stack Overflow 검색
# "Module not found" 에러와 씨름
# 개발 시간의 30%를 설정 문제 해결에 소모
Vue CLI의 현실
# 플러그인으로 간편하게 추가
vue add router
vue add vuex
vue add @vue/typescript
# 자동으로 모든 설정이 구성됨
# 개발에만 집중 가능
3. 문제 해결과 디버깅
수동 설정에서 자주 발생하는 문제들
// 의존성 버전 충돌
"vue-loader": "^15.9.0",
"webpack": "^4.44.0" // 호환되지 않는 버전들
// 해결: 각 패키지 문서를 확인하고 호환 버전 찾기
// 로더 설정 누락
Module parse failed: Unexpected token
// 해결: .vue 파일 처리를 위한 vue-loader 설정 추가
// 환경 변수 설정 문제
process.env.NODE_ENV is undefined
// 해결: DefinePlugin 수동 설정 필요
Vue CLI에서의 문제 해결
# 대부분의 설정 문제는 이미 해결된 상태
# 문제 발생 시 공식 문서나 커뮤니티에서 쉽게 해답 찾기 가능
# vue.config.js로 간단한 오버라이드만 필요
4. 장기적 유지보수
수동 설정의 현실적 문제
- 6개월 후 프로젝트에 새 팀원 합류 시 설정 이해에 시간 소요
- Webpack 5로 업그레이드 시 설정 파일 전면 수정 필요
- 보안 취약점 발생 시 어떤 패키지를 업데이트해야 하는지 추적 어려움
- "이 설정을 왜 했는지 기억이 안 난다" 상황 발생
Vue CLI의 장기적 이점
- 표준화된 구조로 팀원 온보딩 시간 단축
- 정기적인 업데이트로 보안 및 최신 기능 자동 반영
- 문제 발생 시 커뮤니티에서 빠른 해결책 공유
- 설정보다 비즈니스 로직에 집중 가능
5. 확장성과 커스터마이징
수동 설정의 자유도
- 모든 설정을 완전히 제어 가능
- 특별한 요구사항에 맞춤 설정 가능
- 실험적인 기능을 자유롭게 도입 가능
Vue CLI의 유연성
// vue.config.js를 통한 커스터마이징
module.exports = {
configureWebpack: {
// webpack 설정 직접 수정
plugins: [
new MyAwesomeWebpackPlugin()
]
},
chainWebpack: config => {
// webpack-chain을 통한 세밀한 조정
config
.plugin('html')
.tap(args => {
args[0].title = 'My Custom Title'
return args
})
}
}
프로젝트 구조 비교
수동 설정 프로젝트 구조
my-vue-app/
├── src/
│ ├── main.js
│ ├── App.vue
│ └── components/
├── dist/
├── package.json
├── webpack.config.js
├── babel.config.js
└── index.htmlVue CLI 프로젝트 구조
my-vue-app/
├── public/
│ ├── index.html
│ └── favicon.ico
├── src/
│ ├── main.js
│ ├── App.vue
│ ├── components/
│ ├── views/
│ ├── router/
│ ├── store/
│ └── assets/
├── tests/
├── package.json
├── vue.config.js
├── babel.config.js
└── README.md어떤 방식을 선택해야 할까?
수동 Webpack 설정을 선택하는 경우
학습 목적
- Webpack과 빌드 도구의 동작 원리를 깊이 이해하고 싶을 때
- 프론트엔드 빌드 시스템에 대한 전문성을 키우고 싶을 때
특별한 요구사항
- 기존 레거시 시스템과의 통합이 필요한 경우
- 매우 특수한 빌드 파이프라인이 필요한 경우
- 실험적인 기능을 도입해야 하는 경우
완전한 제어권
- 모든 설정을 완벽히 이해하고 제어하고 싶을 때
- 번들 크기를 극한까지 최적화해야 하는 경우
Vue CLI를 선택하는 경우
빠른 개발 시작
- 프로토타이핑이나 MVP 개발
- 학습보다 개발에 집중하고 싶을 때
- 팀 프로젝트에서 일관된 설정이 필요한 경우
표준 프로젝트
- 일반적인 웹 애플리케이션 개발
- PWA, SPA, SSR 등 표준적인 아키텍처 사용
- Vue 생태계의 베스트 프랙티스를 따르고 싶을 때
유지보수성 중시
- 장기간 운영될 프로젝트
- 팀원들이 쉽게 프로젝트에 참여할 수 있어야 하는 경우
- 정기적인 업데이트와 보안 패치가 중요한 경우
현실적인 권장사항
현실적인 권장사항
개인 프로젝트나 학습용
- 처음 Vue를 배우는 경우: Vue CLI로 시작해서 Vue 자체에 집중
- 웹팩을 배우고 싶은 경우: 수동 설정으로 한 번 경험해보기
- 빠른 프로토타이핑: 무조건 Vue CLI
회사 프로젝트
- 스타트업/빠른 개발: Vue CLI (개발 속도 최우선)
- 대기업/레거시 시스템: 기존 빌드 시스템과의 통합 필요성에 따라 결정
- 장기 운영 프로젝트: Vue CLI (유지보수성 고려)
팀 프로젝트
- 팀원 수준이 다양한 경우: Vue CLI (진입 장벽 낮춤)
- 모든 팀원이 고수인 경우: 프로젝트 요구사항에 따라 선택
- 신입 개발자가 많은 경우: Vue CLI (온보딩 시간 단축)
결론
수동 Webpack 설정과 Vue CLI의 가장 큰 차이는 시간 투자 대비 가치입니다.
수동 설정을 선택해야 하는 경우:
- 웹팩과 빌드 시스템을 깊이 이해하고 싶을 때 (학습 목적)
- 기존 레거시 시스템과 복잡한 통합이 필요할 때
- 극도로 특수한 빌드 요구사항이 있을 때
Vue CLI를 선택해야 하는 경우 (대부분의 상황):
- 빠른 개발과 출시가 중요할 때
- 팀 프로젝트에서 일관성이 필요할 때
- 장기 운영되는 서비스일 때
- Vue 학습에 집중하고 싶을 때
실무에서의 현실적 조언:
수동 설정도 결국 기존 템플릿을 복사해서 수정하는 것이므로, "처음부터 다 만든다"는 생각보다는 "어떤 도구가 더 효율적인가"의 관점에서 접근하는 것이 좋습니다. 대부분의 경우 Vue CLI가 더 실용적인 선택이며, 특별한 이유가 있을 때만 수동 설정을 고려하시기 바랍니다.
'[개발] Vue.js > 중급' 카테고리의 다른 글
| [TODO App] 동적 앱 만들기 (TodoFooter.vue) (0) | 2025.07.06 |
|---|---|
| [TODO App] 동적 앱 만들기 (TodoList.vue) (0) | 2025.07.06 |
| [TODO App] 동적 앱 만들기 (TodoInput.vue) (2) | 2025.07.06 |
| [TODO App] 각 컴포넌트 CSS 꾸미기 (0) | 2025.07.03 |
| [TODO App] 프로젝트 생성 및 앱 구조 설계 (2) | 2025.07.02 |