본문 바로가기
부트캠프교육중/react

웹팩 Webpack

by 뭉지야 2023. 3. 20.
728x90

webpack은 2022년 7월 현재 프론트엔드 애플리케이션 배포를 위해서 가장 많이 사용하는 번들러입니다.

 

https://webpack.kr/

 

webpack

웹팩은 모듈 번들러입니다. 주요 목적은 브라우저에서 사용할 수 있도록 JavaScript 파일을 번들로 묶는 것이지만, 리소스나 애셋을 변환하고 번들링 또는 패키징할 수도 있습니다.

webpack.kr

 

< Webpack >

- 여러개의 파일을 하나의 파일로 합쳐주는 모듈 번들러를 의미한다.

모듈 번들러란 HTML, CSS, JavaScript 등의 자원을 전부 각각의 모듈로 보고 이를 조합해 하나의 묶음으로 번들링(빌드)하는 도구입니다.

 

# 모듈 번들러의 등장

모던 웹으로 발전하면서 JavaScript 코드의 양이 절대적으로 많이 증가했고, 또 대규모의 의존성 트리를 가지고 있는 대형 웹 애플리케이션이 등장함으로써 세분화된 모듈 파일이 폭발적으로 증가했습니다. 이 모듈 단위의 파일들을 호출을 해 브라우저에 띄워야 하는데, JavaScript 언어의 특성에 따라 발생하기 쉬운 각 변수들의 스코프 문제를 해결해야 하고, 각 자원을 호출할 때에 생겨나는 네트워크 쪽의 코스트도 신경써줘야만 했습니다.

그래서 이런 복잡성에 대응하기 위해 하나의 시작점(Ex. React App의 index.js 등)으로부터 의존성을 가지는 모듈을 모두 추적하여 하나의 결과물을 만들어내는 모듈 번들러가 등장하게 되었습니다.

 

# webpack에서의 모듈

Webpack에서의 모듈은 JavaScript의 모듈에만 국한하지 않습니다. HTML, CSS, 혹은 .jpg나 .png 같은 이미지 파일들도 전부 포함한 포괄적인 개념입니다.

따라서 Webpack은 주요 구성 요소인 로더(loader)를 통해 다양한 파일도 번들링이 가능합니다.

 

#빌드와 번들링

-빌드

  • 개발이 완료된 앱을 배포하기 위해 하나의 폴더(directory)로 구성하여 준비하는 작업을 말한다.
  • react앱을 기준으로, npm run build 커맨드를통해 react build 작업이 진행되고, index.html 파일에 압축되어 배포에 최적화된 상태를 제공한다.

-번들링

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

# webpack의 필요성

- Webpack이 필요한 가장 큰 이유는 웹 애플리케이션의 빠른 로딩 속도와 높은 성능을 위해서입니다.

-웹페이지를 구성하는 코드의 양이 많은 것을 “무겁다”라고 표현하는데, 이것이 무거우면 무거울수록 웹 페이지의 로딩 속도와 성능은 저하가 됩니다.

-페이지의 로딩 속도가 느리면 느릴수록 사용자가 폭발적으로 이탈합니다.

-로딩 속도를 개선하기 위한 많은 노력이 필요했고, 그 대표적인 것으로 브라우저에서 서버로 요청하는 파일의 숫자를 줄이는 것이었습니다. 

-Webpack이 없다면 각 자원들을 일일히 서버에 요청해 얻어와야 하지만, Webpack이 있다면 같은 타입의 파일들은 묶어서 요청 및 응답을 받을 수 있기 때문에 네트워크 코스트가 획기적으로 줄어듭니다.

-개발자는 본인이 원하는 최선의 개발 방식을 선택해 개발할 수 있게끔 지원하기도 합니다.

- Webpack4 버전 이상부터는 Develoment, Production 두 가지의 모드를 지원합니다. 여기서 Production 모드로 번들링을 진행할 경우, 코드 난독화, 압축, 최적화(Tree Shaking) 작업을 지원하기도 합니다. 한마디로 상용화 된 프로그램을 사용자가 느끼기에 더욱 쾌적한 환경 및 보안까지 신경쓰면서 노출시킬 수 있다는 점에서도 Webpack의 필요성은 굉장히 높은 편이라고 할 수 있겠습니다.

 

 

 

728x90

'부트캠프교육중 > react' 카테고리의 다른 글

리액트와 웹팩  (0) 2023.03.21
웹팩의 핵심 개념  (0) 2023.03.20
빌드와 번들링 정리  (0) 2023.03.20
Redux 간단히 정리  (0) 2023.02.27
Redux Hook  (0) 2023.02.24