Webpack

원도훈·2024년 12월 11일
1

웹 애플리케이션을 위한 강력한 번들러

안녕하세요, Webpack에 대해 자세히 알아보겠습니다. Webpack은 현대적인 웹 애플리케이션 개발에서 필수적인 도구로 자리 잡은 모듈 번들러(Module Bundler)입니다. 이 글에서는 Webpack의 기본 개념부터 핵심 기능, 설정 방법에 대해 설명드리겠습니다.


Webpack이란 무엇인가요?

Webpack은 모듈 번들러로, 애플리케이션의 다양한 파일(자바스크립트, CSS, 이미지 등)을 하나 또는 여러 개의 번들로 묶어주는 도구입니다. Webpack의 주요 목표는 의존성 그래프(Dependency Graph)를 생성하여 효율적으로 리소스를 관리하고 로드하는 것입니다.

왜 Webpack이 필요한가요?

  1. 모듈화: 모듈 단위로 개발된 코드를 한 번에 묶어서 배포할 수 있습니다.
  2. 의존성 관리: 다양한 파일 간의 의존성을 자동으로 처리합니다.
  3. 최적화: 코드 압축(Uglify), 트리 쉐이킹(Tree Shaking) 등을 통해 애플리케이션 성능을 개선합니다.
  4. 다양한 파일 처리: 자바스크립트 외에도 CSS, 이미지, 폰트 등 다양한 파일 형식을 처리할 수 있습니다.

Webpack의 핵심 개념

1. Entry (진입점)

Webpack이 애플리케이션을 분석하기 시작하는 파일입니다. 일반적으로 src/index.js와 같은 파일을 지정합니다.

module.exports = {
  entry: './src/index.js',
};

2. Output (출력점)

Webpack이 번들링한 결과를 저장할 파일의 위치와 이름을 지정합니다.

module.exports = {
  output: {
    filename: 'bundle.js',
    path: __dirname + '/dist',
  },
};

3. Loaders (로더)

Loaders는 Webpack이 자바스크립트 외의 파일(CSS, 이미지 등)을 처리할 수 있도록 도와줍니다. 대표적으로 css-loaderstyle-loader가 있습니다.

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/, // .css 파일을 처리
        use: ['style-loader', 'css-loader'],
      },
    ],
  },
};

4. Plugins (플러그인)

Plugins는 번들링 과정을 확장하거나 최적화합니다. 대표적으로 HtmlWebpackPluginCleanWebpackPlugin이 있습니다.

const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html',
    }),
  ],
};

5. Mode (모드)

mode는 Webpack의 빌드 모드를 설정합니다.

  • development: 개발 환경 (빠른 빌드, 디버깅 용이)
  • production: 배포 환경 (최적화된 코드 생성)
module.exports = {
  mode: 'production',
};

Webpack 설정 파일 작성하기

Webpack 설정 파일인 webpack.config.js는 Webpack의 동작을 정의합니다. 아래는 기본적인 설정 예제입니다.

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader'],
      },
      {
        test: /\.(png|jpg|gif)$/,
        type: 'asset/resource',
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html',
    }),
  ],
  devServer: {
    static: './dist',
    open: true,
  },
};

주요 내용

  1. entry: 번들링 시작점 지정
  2. output: 결과물 위치와 파일 이름 지정
  3. module.rules: 로더 설정
  4. plugins: 플러그인 설정
  5. devServer: 개발 서버 설정

Webpack의 주요 플러그인

HtmlWebpackPlugin

HTML 파일을 자동으로 생성하고 번들 파일을 삽입합니다.

const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  plugins: [
    new HtmlWebpackPlugin({ template: './src/index.html' }),
  ],
};

CleanWebpackPlugin

빌드 전에 출력 디렉토리를 정리합니다.

const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
  plugins: [new CleanWebpackPlugin()],
};

MiniCssExtractPlugin

CSS 파일을 별도로 추출합니다.

const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader'],
      },
    ],
  },
  plugins: [new MiniCssExtractPlugin()],
};

Webpack DevServer

Webpack DevServer는 개발 중에 파일 변경을 감지하여 브라우저를 자동으로 새로고침합니다.

설정 예제

module.exports = {
  devServer: {
    static: './dist',
    open: true,
    hot: true,
  },
};

Webpack 최적화 기법

1. 코드 스플리팅(Code Splitting)

코드를 여러 번들로 나눠 효율적으로 로드합니다.

module.exports = {
  optimization: {
    splitChunks: {
      chunks: 'all',
    },
  },
};

2. 트리 쉐이킹(Tree Shaking)

사용하지 않는 코드를 제거합니다. production 모드에서 자동으로 활성화됩니다.

3. 캐싱(Cache)

번들 파일에 해시를 추가하여 브라우저 캐싱을 최적화합니다.

module.exports = {
  output: {
    filename: '[name].[contenthash].js',
  },
};

결론

Webpack은 현대적인 웹 개발에 없어서는 안 될 중요한 도구입니다. Webpack을 사용하면 모듈화된 코드를 효율적으로 관리하고, 성능을 최적화하며, 개발 생산성을 높일 수 있습니다. 이번 글에서 소개한 기본 설정과 주요 기능을 활용하여 여러분의 프로젝트를 더욱 효율적으로 관리해보세요!


참고 자료

profile
개발

0개의 댓글