번들링 & 웹팩

hzn·2022년 11월 23일
0

React

목록 보기
1/15
post-thumbnail
  • 사용자가 더 쉽고 빠르게 프론트엔드 애플리케이션에 접근할 수 있도록 용량을 줄이거나 파일을 최소화하여 유저에게 전달하는 과정

번들링

일반적인 의미

  • 여러 제품이나 코드, 프로그램을 묶어서 패키지로 제공하는 행위

프론트엔드 개발자

  • 사용자에게 웹 애플리케이션을 제공하기 위한 파일 묶음

    1) 사용자가 브라우저를 열고 주소를 입력
    2) 해당 주소에서 프론트엔드 개발자가 번들링한 여러 파일을 받음
    3) 이 파일을 브라우저가 실행하여 웹 애플리케이션을 사용자에게 제공

번들링의 필요성

  • 변수간 충돌을 막기 위해
  • (코드 가독성 문제 없이) 용량 줄이기 위해
  • 배포 코드를 숨기기 위해
    👉🏽 용량을 줄이고 파일을 통일하는 툴링 작업(번들링)이 필요

HTML, CSS, JavaScript 파일을 그대로 전송한다면 생길 수 있는 문제들

  • 두 개의 .js 파일에서 같은 변수를 사용하고 있어서, 변수 간 충돌이 일어남.
  • 딱 한 번 불러오는 프레임워크 코드가 8MB라서, 인터넷 속도가 느린 국가의 모바일 환경에서 사용자가 불편을 호소.
  • 번들 파일 사이즈를 줄이기 위해서 파일의 공백을 모두 지웠는데, 가독성이 너무 떨어져서 코딩하기가 어려움. 결국 그대로 공백을 되돌려서 코딩.
  • 배포 코드가 너무 읽기 쉬워 개발을 할 줄 아는 사용자가 프론트엔드 애플리케이션을 임의로 조작하여 피해가 발생.
  • 작은 용량을 지원하는 오락기에서 게임 구현하기 위해
    : 기존에 만든 그래픽 패턴을 재사용 한다거나, 색 표현 범위를 최소화하는 등 최적화 절차..

번들러

[npm trend] 유명 JavaScript 번들러와 webpack 비교

  • 웹팩(webpack) 이 압도적 1위

웹팩 Webpack

  • (2022년 7월 현재) 프론트엔드 애플리케이션 배포를 위해서 가장 많이 사용하는 번들러.
  • 여러 개의 파일을 하나의 파일로 합쳐주는 모듈 번들러
  • 모듈 번들러 : HTML, CSS, JavaScript 등의 자원을 전부 각각의 모듈로 보고 이를 조합해 하나의 묶음으로 번들링(빌드)하는 도구

모듈 번들러(Module Bundler)의 등장

  • 모던 웹으로 발전하면서 JavaScript 코드의 양이 절대적으로 증가했고, 또 대규모의 의존성 트리를 가지고 있는 대형 웹 애플리케이션이 등장함으로써 세분화된 모듈 파일이 폭발적으로 증가
  • 모듈 단위의 파일들을 호출을 해 브라우저에 띄워야 하는데, JavaScript 언어의 특성에 따라 발생하기 쉬운 각 변수들의 스코프 문제를 해결해야 하고, 각 자원을 호출할 때에 생겨나는 네트워크 쪽의 코스트도 신경써줘야만 했습니다.
  • 이런 복잡성에 대응하기 위해 하나의 시작점(Ex. React App의 index.js 등)으로부터 의존성을 가지는 모듈을 모두 추적하여 하나의 결과물을 만들어내는 모듈 번들러가 등장하게 되었습니다.

웹팩에서의 모듈

  • JavaScript 외에도 HTML, CSS, 혹은 .jpg.png 같은 이미지 파일들도 전부 포함한 포괄적인 개념
  • 웹팩은 주요 구성 요소인 로더(loader)를 통해 다양한 파일을 번들링하는 것이 가능

빌드와 번들링

빌드

  • 개발이 완료된 앱을 배포하기 위해 하나의 폴더(directory)로 구성하여 준비하는 작업
  • 빌드 안에 번들링이 포함된다.

React에서의 빌드

npm run build를 실행하면 React build 작업이 진행되고, index.html 파일에 압축되어 배포에 최적화된 상태를 제공해준다.

번들링

  • 묶음의 개념, 파일을 묶는 작업 그 자체
  • 의존적 관계에 있는 파일들(import, export) 그 자체 혹은 내부적으로 포함 되어 있는 모듈을 의미
  • 모듈 간의 의존성 관계를 파악해 그룹화 하는 작업

웹팩의 필요성 : 빠른 로딩 속도와 높은 성능

  • 웹 애플리케이션의 빠른 로딩 속도와 높은 성능을 위해
  • 웹페이지가 무거울 수록(= 구성하는 코드의 양이 많을 수록) 로딩 속도와 성능은 저하.
  • 일반적으로 유저는 3초 이내에 웹페이지가 뜨지 않으면 이탈

로딩 시간에 따른 유저 이탈률

요청 파일의 숫자를 줄여줌

  • 로딩 속도 개선을 위해, 브라우저에서 서버로 요청하는 파일의 숫자를 줄이는 것이 필요
  • 웹팩이 없다면 각 자원들을 일일히 서버에 요청해야 하지만, 웹팩이 있다면 같은 타입의 파일들은 묶어서 요청 및 응답을 받을 수 있기 때문에 네트워크 코스트가 획기적으로 줄어든다.

일부 브라우저에서 지원하지 않는 문법, 언어, 파일 형식을 변환

  • 웹팩 로더(Webpack loader)를 사용하면 일부 브라우저에서 지원하지 않는 JavaScript ES6의 문법들을 ES5로 번환해주는 babel-loader를 사용할 수 있게 된다.
  • Vue인 경우는 vue-loader를, scss 파일 같은 경우는 css 파일로 변환해주는 scss-loader 등의 loader도 사용할 수 있다
  • 따라서 개발자는 본인이 원하는 최선의 개발 방식을 선택해 개발할 수 있다.

Develoment, Production 두 가지 모드 지원

  • Webpack4 버전 이상부터는 Develoment, Production 두 가지의 모드를 지원
  • Production 모드로 번들링을 진행할 경우, 코드 난독화, 압축, 최적화(Tree Shaking) 작업을 지원
    👉🏽 상용화 된 프로그램을 사용자가 느끼기에 더욱 쾌적한 환경보안까지 신경쓰면서 노출시킬 수 있다

0개의 댓글