Webpack이란?
웹팩(📦Webpack)이 뭐고, 왜 필요한지, 그리고 어떻게 동작하는지 확실히 정리해볼게요!
이걸 알면 React, Vue 같은 프레임워크에서 웹팩이 어떻게 활용되는지도 이해할 수 있어요.
📌 1. Webpack이란?
👉 **Webpack은 JavaScript 애플리케이션을 위한 "모듈 번들러(Module Bundler)"**예요.
👉 HTML, CSS, JavaScript, 이미지 같은 모든 자원을 하나로 묶어서 최적화해줘요.
🚀 간단히 말하면?
- 여러 개의 JS 파일을 하나의 번들(bundle)로 묶어줌
- CSS, 이미지, 폰트 같은 리소스도 관리 가능
- 최신 ES6+ 문법을 변환해서 브라우저에서 실행 가능하도록 해줌
- 코드 스플리팅(Code Splitting) 기능으로 성능 최적화 가능
✅ 왜 Webpack이 필요할까?
👉 웹 개발에서는 HTML, CSS, JS가 따로따로 로딩되는데, 파일이 많아지면 속도가 느려져요.
👉 웹팩을 사용하면 이 파일들을 하나로 묶어서 로딩 속도를 최적화할 수 있어요!
🔥 2. Webpack의 핵심 개념
웹팩은 4가지 핵심 개념으로 구성돼 있어요.
✅ 1) Entry (입력 파일)
웹팩이 파일을 읽기 시작하는 **진입점(entry point)**이에요.
보통 index.js, app.js 같은 파일을 설정해요.
module.exports = {
entry: './src/index.js',
};
➡️ index.js 파일을 시작점으로 삼고, 여기서 필요한 모듈들을 하나로 묶어요.
✅ 2) Output (출력 파일)
번들링된 파일을 어디에 저장할지 설정해요.
보통 dist/bundle.js로 출력돼요.
module.exports = {
entry: './src/index.js',
output: {
path: __dirname + '/dist',
filename: 'bundle.js',
},
};
➡️ bundle.js 파일이 dist 폴더에 생성돼요.
✅ 3) Loaders (로더)
웹팩은 기본적으로 JS 파일만 이해할 수 있어요.
하지만, CSS, 이미지, 폰트 같은 파일도 번들링하려면 **로더(Loader)**를 사용해야 해요.
✔️ 예제: CSS 로더 설정
module.exports = {
module: {
rules: [
{
test: /\\.css$/, // .css 파일을 찾음
use: ['style-loader', 'css-loader'], // 적용할 로더 지정
},
],
},
};
➡️ .css 파일을 만나면 style-loader와 css-loader가 적용돼요.
✔️ 자주 사용하는 로더
- babel-loader → 최신 JS(ES6+)를 구형 브라우저에서도 실행 가능하도록 변환
- css-loader → CSS 파일을 JS에서 import 할 수 있게 변환
- style-loader → 변환된 CSS를 <style> 태그로 삽입
- file-loader → 이미지, 폰트 파일을 번들링
✅ 4) Plugins (플러그인)
웹팩의 기능을 확장하는 역할을 해요.
✔️ 예제: HTML 자동 생성 플러그인
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html', // 이 HTML을 기반으로 번들링된 파일을 포함한 새 HTML 생성
}),
],
};
➡️ index.html 파일을 자동으로 생성하고, 번들링된 JS 파일을 포함해줘요.
✔️ 자주 사용하는 플러그인
- HtmlWebpackPlugin → HTML 파일을 자동으로 생성
- MiniCssExtractPlugin → CSS 파일을 별도로 분리 (CSS 코드 스플리팅)
- TerserPlugin → JS 코드 압축 (최적화)
⚡ 3. Webpack의 동작 과정
웹팩이 번들링하는 과정은 다음과 같아요.
1️⃣ Entry 설정
웹팩이 어디서부터 시작할지(entry) 설정
entry: './src/index.js'
2️⃣ 필요한 파일들(모듈) 찾기
index.js 안에서 import 되어 있는 모든 파일을 찾아요.
import './styles.css';
import logo from './logo.png';
3️⃣ Loaders로 변환
CSS, 이미지 파일 같은 JS가 이해하지 못하는 파일들을 변환해요.
module: {
rules: [{ test: /\\.css$/, use: ['style-loader', 'css-loader'] }]
}
4️⃣ Plugins로 추가 기능 적용
HTML 파일을 자동 생성하거나, JS/CSS를 최적화해요.
plugins: [new HtmlWebpackPlugin({ template: './src/index.html' })]
5️⃣ Output으로 번들링된 파일 저장
변환된 JS 파일을 dist/bundle.js로 저장!
output: {
path: __dirname + '/dist',
filename: 'bundle.js'
}
🚀 4. Webpack 최적화 방법
웹팩을 잘 활용하면 웹사이트 성능을 크게 향상시킬 수 있어요!
✅ 1) 코드 스플리팅 (Code Splitting)
번들 파일 크기가 너무 크면 로딩 속도가 느려지기 때문에, 코드를 여러 개의 번들로 나눌 수 있어요.
✔️ 예제: splitChunks 옵션 사용
module.exports = {
optimization: {
splitChunks: {
chunks: 'all',
},
},
};
➡️ 공통 모듈을 분리해서 별도의 파일로 만들어줘요!
✅ 2) Lazy Loading (지연 로딩)
필요한 순간에만 코드를 로드해서 속도를 최적화해요.
✔️ 예제: import() 사용
button.addEventListener('click', () => {
import('./module.js').then((module) => {
module.load();
});
});
➡️ 버튼을 클릭할 때만 module.js를 로드해요.
✅ 3) Tree Shaking (안 쓰는 코드 제거)
사용하지 않는 JS 코드를 자동으로 제거해서 파일 크기를 줄여줘요.
✔️ 예제: mode: 'production' 설정
module.exports = {
mode: 'production',
};
➡️ mode: 'production'을 설정하면 자동으로 적용돼요!
🎯 Webpack 정리!
개념 설명
Entry | 번들링을 시작할 진입점 파일 (index.js 등) |
Output | 번들링된 결과 파일 (bundle.js)을 저장할 위치 |
Loaders | CSS, 이미지 등을 JS에서 사용할 수 있도록 변환 |
Plugins | 기능 확장 (HTML 생성, 코드 압축 등) |
Code Splitting | 번들 크기를 줄이기 위해 코드 분리 |
Lazy Loading | 필요한 순간에만 코드 로딩 |
Tree Shaking | 안 쓰는 코드 제거 |
🔥 이제 Webpack이 왜 필요한지, 어떻게 동작하는지 이해됐죠?
🔥 React, Vue 같은 프레임워크에서 어떻게 활용되는지도 확실히 감 잡혔을 거예요! 😊
혹시 궁금한 거 있으면 편하게 물어봐요! 🚀