서녕이네 개발단지

[React] Code Splitting (코드 분할) 본문

프론트엔드/React

[React] Code Splitting (코드 분할)

zero2-pooh 2023. 6. 11. 16:11

Code Splitting (코드 분할)

 

CRA 나 Next.js 와 같은 툴을 사용한다면 이미 App 자체에 Webpack 이 설치되어 있을 것이다.

 

'흩어져 있는 파일들을 압축하여 bundling size를 줄인다.'라는 명목 자체는 매우 훌륭하지만,

앱이 커질수록 해당 번들도 커질 가능성이 농후하다.

특히 큰 사이즈의 3rd party library를 사용하였을 때는 번들 사이즈 또한 커지기 때문에 로드 시간이 길어지고 이는 곧 웹서비스의 성능에 악영향을 끼친다.

번들이 거대해지는 것을 방지하기 위해서 code splitting을 고민해보아야 한다. 코드분할은 앱을 지연로딩(lazy-loading) 하게 도와주고, 이는 앱의 코드 양을 줄이지 않고도 사용자가 필요하지 않은 코드를 불러오지 않게 하며 앱의 initializing에 필요한 loading resource 자체를 줄여준다.

 

 

예시

import()

- 애플리케이션에 code splitting을 도입하는 가장 좋은 방법은 동적 import() 구문을 이용하는 것이다.

 

 

import { add } from './math';

console.log(add(16, 26));

 

 

import("./math").then(math => {
  console.log(math.add(16, 26));
});

Webpack 이 해당 구문을 만나게 되면 자체적으로 앱의 Code를 Splitting 한다.

하지만, Babel을 사용한다면 Babel 은 위와 같은 동적 import를 인식할 수는 있지만, 자체적으로 분할하지는 않는다. 그에 따라, babel-plugin-synyax-dynamic-import를 사용해야만 한다.

 

❗️하지만 ❗️

Create React App을 사용한다면 이미 설정되어 있어 사용할 수 있다. Next.js에서도 지원된다.

 

 

 

마무리

Bundling 툴은 보통 코드를 압축하기에 이에 따른 import 하는 과정에서 너무 많은 리소스를 낭비할 수 있기에,

이 부분에 대해서는 code splitting 이 유용하게 쓰인다. 

 

 

 

참고

https://velog.io/@odini/Code-Splitting코드-스플릿팅#reactlazy

https://ko.legacy.reactjs.org/docs/code-splitting.html

https://hwani.dev/react-code-splitting/