💡 모듈 번들러(Module Bundler)는 여러 개의 자바스크립트 파일과 그 외의 리소스(스타일시트, 이미지 등)를 하나 또는 여러 개의 번들 파일로 묶어주는 도구
❗ 모듈 번들러를 통해 웹 애플리케이션의 성능을 최적화
❗ 코드 관리 용이
모듈 관리:
현대 웹 애플리케이션은 수많은 모듈과 파일로 구성됨
모듈 번들러는 이러한 모듈을 효율적으로 관리하고, 의존성을 자동으로 처리해준다는 장점 O
성능 최적화:
번들링을 통해 파일 수를 줄이고, 코드 스플리팅(Code Splitting) 등을 통해 초기 로딩 속도 개선 가능
개발 편의성:
핫 모듈 리플레이스먼트(Hot Module Replacement)와 같은 기능을 통해 개발 중 실시간으로 변경사항을 반영할 수 있어 개발 효율 향상
리소스 처리:
CSS, 이미지, 폰트 등 다양한 리소스를 자바스크립트와 함께 처리하고 최적화 가능
💡 Webpack은 현재 가장 널리 사용되는 모듈 번들러 중 하나로, 복잡한 애플리케이션의 빌드 과정을 효율적으로 관리할 수 있게 해줌
❗ 다양한 플러그인과 로더(Loader)를 통해 확장성 very good!
❗ 거의 모든 프레임워크와 호환 가능
❗ but, 세팅해야 할 것이 많다는 단점 존재
기본 Webpack 설정 (webpack.config.js
)
const path = require('path');
module.exports = {
entry: './src/index.js', // 진입점
output: {
filename: 'bundle.js', // 번들 파일 이름
path: path.resolve(__dirname, 'dist'), // 출력 디렉토리
},
module: {
rules: [
{
test: /\\.css$/, // .css 파일을 처리
use: ['style-loader', 'css-loader'],
},
{
test: /\\.(png|jpg|gif)$/, // 이미지 파일을 처리
use: [
{
loader: 'file-loader',
options: {},
},
],
},
],
},
devServer: {
contentBase: path.join(__dirname, 'dist'), // 개발 서버의 콘텐츠 베이스
compress: true,
port: 9000, // 포트 번호
hot: true, // 핫 모듈 리플레이스먼트 활성화
},
};
패키지 설치 명령어
npm install --save-dev webpack webpack-cli webpack-dev-server style-loader css-loader file-loader
💡 Vite는 현대적인 프론트엔드 개발을 위해 설계된 빌드 도구로, 빠른 개발 서버 시작과 모듈 핫 리로딩이 특징
❗ 기본적으로 ES 모듈을 사용하여 빌드 속도를 획기적으로 개선
❗ 설정이 간단하여 개발자가 쉽게 사용 가능
기본 Vite 설정 (vite.config.js
)
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
plugins: [vue()], // Vue 플러그인 추가
server: {
port: 3000, // 개발 서버 포트
open: true, // 서버 시작 시 브라우저 열기
},
});
패키지 설치 명령어
npm init @vitejs/app my-vite-app --template vue
cd my-vite-app
npm install
npm run dev
1. Webpack을 사용한 간단한 React 프로젝트 설정
패키지 설치
npm install --save-dev webpack webpack-cli webpack-dev-server babel-loader @babel/core @babel/preset-env @babel/preset-react html-webpack-plugin
npm install react react-dom
Webpack 설정 (webpack.config.js
)
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.jsx',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
module: {
rules: [
{
test: /\\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', '@babel/preset-react'],
},
},
},
{
test: /\\.css$/,
use: ['style-loader', 'css-loader'],
},
],
},
resolve: {
extensions: ['.js', '.jsx'],
},
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html',
}),
],
devServer: {
contentBase: path.join(__dirname, 'dist'),
compress: true,
port: 3000,
hot: true,
},
};
Babel 설정 (.babelrc
)
{
"presets": ["@babel/preset-env", "@babel/preset-react"]
}
스크립트 추가 (package.json
)
"scripts": {
"start": "webpack serve --mode development",
"build": "webpack --mode production"
}
2.Vite를 사용한 간단한 React 프로젝트 설정
프로젝트 생성 및 패키지 설치
npm init @vitejs/app my-vite-app --template react
cd my-vite-app
npm install
npm run dev
기본 파일 구조
Vite는 기본적으로 React 템플릿을 제공하며, 별도의 복잡한 설정 없이 바로 개발을 시작할 수 있음
추가 설정 없이 사용 가능
필요한 경우 vite.config.js
파일을 생성하여 추가 설정을 할 수 있음
항목 | Webpack | Vite |
---|---|---|
개발 서버 속도 | 느림 | 매우 빠름 |
설정 복잡성 | 복잡하고 방대함 | 간단하고 직관적 |
핫 모듈 리플레이스먼트 | 느릴 수 있음 | 매우 빠르고 효율적 |
번들링 도구 | 자체 번들링 시스템 | Rollup 기반의 프로덕션 번들링 |
플러그인 생태계 | 매우 광범위하고 다양함 | 성장 중, 점차 확장됨 |
최신 기술 지원 | 설정을 통해 가능 | 기본적으로 지원 |
사용 용이성 | 초보자에게는 설정이 어려울 수 있음 | 설정이 간단하여 빠르게 시작 가능 |
레거시 브라우저 지원 | 다양한 레거시 브라우저와 호환성 제공 | ES 모듈 기반으로 일부 제한적 |
초기 설정 시간 | 오래 걸릴 수 있음 | 매우 짧음 |
빌드 속도 | 대규모 프로젝트에서 느림 | 빠름 |
커스텀 설정의 유연성 | 매우 높음 | 상대적으로 제한적 |