Post

Webpack에 대해 알아보기

Webpack이란?

▶ Webpack은 모듈 번들러(Module Bundler)로, 여러 개의 파일을 하나의 번들로 묶어주는 도구입니다.
JavaScript, CSS, 이미지 등 다양한 파일을 처리하여 웹 애플리케이션을 효율적으로 로드할 수 있게 해줍니다. Webpack은 특히 React 애플리케이션에서 많이 사용되며, 코드 스플리팅(Code Splitting), 로더(Loader), 플러그인(Plugin) 등의 강력한 기능을 제공합니다.

Webpack의 주요 기능

  1. 모듈 번들링: 여러 개의 모듈을 하나의 파일로 묶어, 네트워크 요청 수를 줄이고 로드 속도를 향상시킵니다.

  2. 코드 스플리팅: 애플리케이션을 여러 개의 청크로 분할하여, 필요한 모듈만 로드할 수 있게 합니다. 이를 통해 초기 로드 속도를 개선할 수 있습니다.

  3. 로더: Webpack은 로더를 사용하여 JavaScript 외에도 CSS, 이미지, 폰트 등의 파일을 모듈로 처리할 수 있습니다. 로더는 파일을 번들링하기 전에 전처리하는 데 사용됩니다.

  4. 플러그인: Webpack의 플러그인은 번들링 과정을 더욱 강력하게 확장할 수 있게 해줍니다. 예를 들어, HTML 파일 생성, 압축, 환경 변수 설정 등을 플러그인을 통해 수행할 수 있습니다.

Webpack 설정

  • Webpack 설정 파일은 주로 webpack.config.js 파일에 작성됩니다. 이 파일은 Webpack의 동작을 정의하는 데 사용됩니다.

기본 설정 예시

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
32
33
34
const path = require("path");

module.exports = {
  entry: "./src/index.js", // 번들링의 시작점
  output: {
    filename: "bundle.js", // 출력 파일 이름
    path: path.resolve(__dirname, "dist"), // 출력 디렉토리
  },
  module: {
    rules: [
      {
        test: /\.js$/, // .js 확장자를 가진 파일에 대해
        exclude: /node_modules/, // node_modules 디렉토리는 제외
        use: {
          loader: "babel-loader", // babel-loader를 사용하여 트랜스파일링
        },
      },
      {
        test: /\.css$/, // .css 확장자를 가진 파일에 대해
        use: ["style-loader", "css-loader"], // style-loader와 css-loader를 사용
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "./src/index.html", // HTML 템플릿 파일 경로
    }),
  ],
  devServer: {
    contentBase: path.join(__dirname, "dist"), // 개발 서버의 베이스 디렉토리
    compress: true, // gzip 압축 사용
    port: 9000, // 개발 서버 포트
  },
};

Webpack과 React

  • React 애플리케이션에서는 Webpack을 사용하여 개발 환경을 설정하고, 빌드 과정을 관리할 수 있습니다. Create React App(CRA)은 Webpack을 내장하고 있어, 별도의 설정 없이도 Webpack의 기능을 활용할 수 있습니다.

Create React App을 사용한 프로젝트 생성

  • Create React App(CRA)은 React 애플리케이션을 쉽게 설정할 수 있는 도구입니다. 내부적으로 Webpack을 사용하여 번들링과 개발 서버를 제공합니다.
1
2
3
npx create-react-app my-app
cd my-app
npm start
  • 위 명령어를 통해 생성된 프로젝트는 이미 Webpack 설정이 되어 있어, 즉시 개발을 시작할 수 있습니다.

커스텀 Webpack 설정

  • 더 복잡한 요구 사항이 있는 경우, CRA에서 제공하는 Webpack 설정을 커스터마이징할 수 있습니다. 이를 위해 eject 명령어를 사용하여 설정 파일을 추출할 수 있습니다.
1
npm run eject
  • 이 명령어를 실행하면, Webpack 설정 파일을 포함한 여러 설정 파일이 프로젝트에 추가됩니다. 이후 이 파일들을 직접 수정하여 Webpack 설정을 커스터마이징할 수 있습니다.

코드 스플리팅

  • Webpack의 코드 스플리팅을 사용하면, 애플리케이션의 초기 로드 속도를 개선할 수 있습니다. React에서는 동적 import를 사용하여 코드 스플리팅을 구현할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
import React, { Suspense, lazy } from "react";

const OtherComponent = lazy(() => import("./OtherComponent"));

function MyComponent() {
  return (
    <div>
      <Suspense fallback={<div>Loading...</div>}>
        <OtherComponent />
      </Suspense>
    </div>
  );
}
  • 위 예시에서는 OtherComponent를 동적으로 import하여, 필요할 때만 로드합니다. Suspense 컴포넌트를 사용하여 로딩 상태를 처리할 수 있습니다.

결론

▶ Webpack은 React 애플리케이션의 빌드 도구로서, 모듈 번들링, 코드 스플리팅, 로더, 플러그인 등의 강력한 기능을 제공합니다.
Webpack을 잘 활용하면, 애플리케이션의 성능을 최적화하고 개발 생산성을 높일 수 있습니다. 특히, Create React App을 사용하면 복잡한 설정 없이도 Webpack의 장점을 쉽게 누릴 수 있습니다.


이렇게 오늘은 React와 Webpack에 대해 알아봤는데요,
Webpack을 잘 이해하고 활용하면, 리액트 애플리케이션의 빌드와 배포를 효과적으로 관리할 수 있을 것입니다. 그렇다면 저는 다음에 또 다른 유익한 내용을 들고 오도록 하겠습니다 😁!

This post is licensed under CC BY 4.0 by the author.