ReactJS - 코드 분리: 초보자 가이드

안녕하세요, 미래의 React 개발자 여러분! 오늘, 우리는 ReactJS의 코드 분리 세계로 흥미로운 여정을 떠납니다. 프로그래밍에 새로운 사람이라면 걱정하지 마세요 - 저는 당신의 친절한 안내자가 되겠습니다. 우리는 단계별로 진행하겠습니다. 이 튜토리얼의 끝까지 읽다 보면, 코드 분리가 무엇인지 이해하고 프로처럼 사용할 수 있을 것입니다!

ReactJS - Code Splitting

코드 분리는 무엇인가요?

여러분이 여행을 준비할 때, 모든 것을 하나의 거대한 가방에 채우시겠습니까? 아마 그럴 가능성은 적겠죠! 필요한 것만 챙기시겠죠? React의 코드 분리는 이와 비슷하게 작동합니다.

코드 분리는 JavaScript 코드를 더 작은 조각으로 나누는 기술입니다. 사용자가 웹사이트를 방문할 때 모든 코드를 한 번에 로드하는 대신, 필요한 것만 로드합니다. 이는 초기 페이지 로드 속도를 빠르게 하고 앱을 더 효율적으로 만듭니다.

코드 분리가 중요한 이유는 무엇인가요?

  1. 초기 로드 시간이 빠르다
  2. 성능이 좋다
  3. 사용자 경험을 개선한다

이제 React에서 코드 분리를 어떻게 구현할 수 있는지 알아보겠습니다!

React.lazy()와 Suspense를 사용한 기본 코드 분리

React는 코드 분리에 두 가지 주요 도구를 제공합니다: React.lazy()Suspense.

React.lazy()

React.lazy()는 동적 import를 일반 컴포넌트로 렌더링할 수 있게 해줍니다. 다음은 그 작동 방식입니다:

import React, { lazy } from 'react';

const LazyComponent = lazy(() => import('./LazyComponent'));

이 예제에서, LazyComponent는 실제로 앱에서 필요할 때까지 로드되지 않습니다.

Suspense

Suspense는 lazy-loaded 컴포넌트를 기다리는 동안 로딩 상태를 지정할 수 있습니다. 다음은 그 사용 방법입니다:

import React, { Suspense } from 'react';

function MyComponent() {
return (
<Suspense fallback={<div>로딩 중...</div>}>
<LazyComponent />
</Suspense>
);
}

fallback 속성은 lazy 컴포넌트가 로드되는 동안 표시할 내용을 지정합니다.

실용적인 예제: Lazy-Loaded 페이지 생성

간단한 앱을 만들어 봅시다. lazy-loaded 페이지를 가지는 앱입니다. 먼저, 파일 구조를 설정해보겠습니다:

src/
App.js
Home.js
About.js

이제 App.js에서 코드 분리를 구현해보겠습니다:

import React, { lazy, Suspense } from 'react';
import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom';

const Home = lazy(() => import('./Home'));
const About = lazy(() => import('./About'));

function App() {
return (
<Router>
<div>
<nav>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
</ul>
</nav>

<Suspense fallback={<div>로딩 중...</div>}>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
</Switch>
</Suspense>
</div>
</Router>
);
}

export default App;

이 예제에서, 우리는 React Router를 사용하여 네비게이션을 설정했습니다. HomeAbout 컴포넌트는 lazy-loaded되어 있어, 사용자가 해당 라우트로 이동할 때만 가져옵니다.

고급 코드 분리 기술

라우트 기반 코드 분리

라우트 기반 코드 분리는 더 큰 애플리케이션에 완벽합니다. 코드를 라우트에 따라 나누어, 각 페이지에 필요한 컴포넌트만 로드합니다.

다음은 React Router를 사용한 예제입니다:

import React, { lazy, Suspense } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';

const Home = lazy(() => import('./routes/Home'));
const About = lazy(() => import('./routes/About'));
const Contact = lazy(() => import('./routes/Contact'));

function App() {
return (
<Router>
<Suspense fallback={<div>로딩 중...</div>}>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/contact" component={Contact} />
</Switch>
</Suspense>
</Router>
);
}

컴포넌트 기반 코드 분리

때로는 개별 컴포넌트를 나누는 것이 더 나을 때가 있습니다. 이는 종종 필요하지 않은 복잡한 컴포넌트에 유용합니다.

import React, { lazy, Suspense } from 'react';

const HeavyComponent = lazy(() => import('./HeavyComponent'));

function MyComponent() {
return (
<div>
<h1>My Component</h1>
<Suspense fallback={<div>Heavy component 로딩 중...</div>}>
<HeavyComponent />
</Suspense>
</div>
);
}

코드 분리의 최선의 관행

관행 설명
라우트 수준에서 분리 가장 큰 영향을 미치기 위해 라우트 수준에서 코드를 분리하자
과도한 분리를 피하다 모든 작은 컴포넌트를 분리하지 말고, 앱의 더 크고 자주 사용되지 않는 부분에 집중하자
명명된 Export 사용 동적 import를 사용할 때 명명된 export를 사용하여 코드를 더 명확하게 하자
컴포넌트 사전 로드 중요한 컴포넌트의 경우 사전 로드를 고려하여 가시적인 성능을 개선하자
오류 경계 사용 로딩 오류를 부드럽게 처리하기 위해 오류 경계를 사용하자

결론

축하합니다! React의 코드 분리 세계로 첫 걸음을 뗐습니다. 기억하시기 바랍니다, 코드 분리는 앱의 성능을 최적화하고 더 나은 사용자 경험을 제공하는 것입니다. 더 큰 애플리케이션을 개발할 때 이 기술들을 기억하고 사용하십시오. 이 개념들을 연습하고, 다양한 분리 전략을 실험하여, 곧 프로처럼 코드를 분리할 수 있을 것입니다! 행복하게 코딩하세요, 그리고 당신의 번들은 항상 최적화되어 있기를 바랍니다! ??

Credits: Image by storyset