Webpack-웹 개발의 필수 도구로서의 이해

YSB·2024년 1월 23일

Javascript Build Tools

목록 보기
1/3
post-thumbnail

들어가며 : 자바스크립트 빌드 툴이란


   JavaScript 빌드 툴(build tool)은 JavaScript 애플리케이션 또는 웹사이트를 개발하는 과정에서 코드를 최적화하고 관리하는 데 사용되는 도구입니다. 이러한 빌드 툴은 다양한 작업을 수행할 수 있으며, 개발자가 보다 효율적으로 작업할 수 있도록 돕습니다.

   대표적인 JavaScript 빌드 툴: Webpack, Rollup, Parcel, Gulp, Grunt 있습니다. JavaScript 빌드 툴의 주요 기능들은 다음과 같습니다:

1. 코드 변환 (Transpilation)

최신 JavaScript(ECMAScript) 버전으로 작성된 코드를 오래된 브라우저에서도 실행될 수 있도록 이전 버전의 JavaScript로 변환합니다.

  • Babel은 ES6 이상의 코드를 ES5로 변환할 수 있습니다.

2. 번들링 (Bundling)

여러 JavaScript 파일을 하나의 파일로 결합합니다. 이는 웹 페이지의 로딩 시간을 줄이는 데 도움이 됩니다.

  • Webpack, Rollup

3. 압축 (Minification)

코드에서 불필요한 공백, 줄바꿈, 주석 등을 제거하여 파일 크기를 줄입니다. 이는 로딩 속도를 향상시키는 데 중요합니다.

  • UglifyJS, Terser

4. 리소스 최적화 (Resource Optimization)

이미지, CSS 파일 등의 자산을 최적화하여 성능을 향상시킵니다.

  • ImageMin, PostCSS

5. 라이브 리로딩 (Live Reloading) 및 핫 모듈 교체 (Hot Module Replacement, HMR)

코드를 변경할 때마다 브라우저를 자동으로 새로고침하거나, 변경된 모듈만을 교체하여 실시간으로 반영합니다.

  • Webpack Dev Server, BrowserSync

6. Linting 및 Testing

코드의 일관성을 유지하고 버그를 찾기 위해 코드 스타일 규칙과 테스트를 자동으로 실행합니다.

  • ESLint, Jest

7. 의존성 관리 (Dependency Management)

프로젝트에 필요한 외부 라이브러리나 프레임워크를 관리하고 업데이트합니다.

  • npm, Yarn


Webpack


  Webpack은 주로 브라우저에서 사용하기 위한 JavaScript 파일을 번들링하는 데 사용되는 강력하고 다재다능한 모듈 번들러입니다. 주로 JavaScript 파일을 대상으로 하지만, 이미지, 폰트, 스타일 시트와 같은 다른 자산들도 처리할 수 있습니다. Webpack은 이러한 파일들을 모두 모아 하나 또는 여러 개의 번들로 만듭니다. 이렇게 하면 브라우저에서 파일을 더 빠르고 효율적으로 로드할 수 있습니다.

주요 기능

  1. 엔트리(Entry)와 아웃풋(Output): Webpack은 엔트리 포인트(시작점)에서 시작하여 의존성 그래프를 생성하고, 아웃풋에서 최종 번들을 생성합니다.
  2. 로더(Loaders): Webpack은 기본적으로 JavaScript와 JSON 파일만 이해합니다. 로더를 사용하면 CSS, 이미지, 폰트 등 다른 유형의 파일들을 JavaScript 모듈로 변환하여 번들에 포함시킬 수 있습니다.
  3. 플러그인(Plugins): 번들링 과정에서 다양한 작업을 수행할 수 있도록 해주는 플러그인 시스템을 제공합니다.
  4. 모듈화 및 코드 분할: 코드를 모듈로 관리할 수 있으며, 필요에 따라 코드를 여러 파일로 분할하여 로딩 시간을 최적화할 수 있습니다.
  5. 개발 서버: Webpack은 개발 중에 라이브 리로딩 기능을 제공하는 개발 서버를 포함하고 있습니다.

Webpack의 로더와 플러그인은 각각 다른 목적과 작업 방식을 가집니다.

  • 로더(Loaders):
    • 목적: Webpack이 JavaScript와 JSON 외의 파일 형식을 이해하고 처리할 수 있게 해줍니다.
    • 기능: 소스 파일을 받아서 새로운 형식의 파일로 변환합니다. 이 과정에서 변환(transpile)이나 컴파일(compile)을 수행합니다.
    • 예시: 'babel-loader'는 ES6 이상의 JavaScript 코드를 ES5 코드로 변환합니다. 'css-loader'는 CSS 파일을 JavaScript 모듈로 변환합니다.
  • 플러그인(Plugins):
    • 목적: Webpack의 번들링 프로세스에 훅(hook)을 사용하여, 번들링 과정에서 추가적인 작업을 수행합니다.
    • 기능: 번들 최적화, 자산 관리, 환경 변수 주입 등의 작업을 수행합니다.
    • 예시: 'HtmlWebpackPlugin'은 HTML 파일을 생성하고, 번들링된 JavaScript 파일을 주입합니다. 'UglifyJsPlugin'은 JavaScript 번들을 압축하고 최적화합니다.

Webpack의 코드 분할 기능은 여러 가지 이점을 제공합니다

  • 로딩 시간 감소: 코드 분할을 사용하면 사용자가 필요로 하는 코드만 로드하여 초기 로딩 시간을 줄일 수 있습니다.
  • 캐싱 효율 향상: 공통 라이브러리나 코드를 별도의 파일로 분할하여 캐시의 효율을 높일 수 있습니다.
  • 자원 사용 최적화: 사용자가 실제로 필요로 하는 기능의 코드만 로드하여 네트워크 및 시스템 자원을 효율적으로 사용할 수 있습니다.

Webpack 설정 파일에서 개발 서버를 설정하는 것은 다음과 같은 이점을 가집니다

  • 라이브 리로딩: 소스 코드 변경 시 자동으로 웹 페이지를 새로고침하여 변경 사항을 바로 볼 수 있습니다.
  • 개발 용이성: 별도의 HTTP 서버 설정 없이 간편하게 로컬 개발 환경을 구축할 수 있습니다.
  • 기능성 향상: 핫 모듈 교체(Hot Module Replacement, HMR)와 같은 추가 기능을 지원하여 개발 과정의 생산성을 높일 수 있습니다.

Webpack 설정

Webpack을 사용하기 위해 webpack.config.js 파일을 설정해야 합니다. 이 파일에서 엔트리, 아웃풋, 로더, 플러그인 등을 정의할 수 있습니다.

  1. 엔트리 포인트 설정: 애플리케이션의 시작점을 정의합니다.

      module.exports = {
        entry: './src/index.js'
	};
  1. 아웃풋 설정: 번들 파일의 출력 경로와 파일 이름을 지정합니다.

    const path = require('path');
    
    module.exports = {
      // ...
      output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
      }
    };
    
  2. 로더 설정: 다양한 유형의 파일을 처리하기 위해 로더를 설정합니다.

    module.exports = {
      // ...
      module: {
        rules: [
          { test: /\.css$/, use: ['style-loader', 'css-loader'] }
        ]
      }
    };
    
  3. 플러그인 설정: 번들 최적화, 환경 변수 주입 등 추가 기능을 위해 플러그인을 추가합니다.

    const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
      // ...
      plugins: [new HtmlWebpackPlugin()]
    };
    
  4. 개발 서버 설정: 개발 중 라이브 리로딩을 위한 개발 서버를 설정할 수 있습니다.

    javascriptCopy code
    module.exports = {
      // ...
      devServer: {
        contentBase: './dist'
      }
    };
    
profile
즐거운하루!

0개의 댓글