React Router ์ฝ๋ ์คํ๋ฆฌํ ๊ณผ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ lazy์ Suspense ๋์ ์ปดํฌ๋ํธ ๋ก๋ฉ
ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ ๋ ๋ณต์กํด์ง๊ณ ๊ธฐ๋ฅ์ด ํ๋ถํด์ง์ ๋ฐ๋ผ, ์ด๊ธฐ ๋ก๋ฉ ์๋์ ์ ์ฒด ์ฑ๋ฅ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ํฐ ์ํฅ์ ๋ฏธ์น๊ฒ ๋์์ต๋๋ค. ํนํ, ๋ฆฌ์กํธ(React) ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ถํ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด์ ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง๊ณ , ์ฌ์ฉ์ ์ดํ๋ฅ ์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฆฌ์กํธ์์๋ ์ฝ๋ ์คํ๋ฆฌํ (Code Splitting)๊ณผ ๋์ ์ปดํฌ๋ํธ ๋ก๋ฉ ๊ธฐ๋ฒ์ ๋์ ํ์ฌ ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ๊ณ , ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ํ์ํ ๋ฆฌ์์ค๋ง ๋ก๋ํ ์ ์๋๋ก ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ๋ฆฌ์กํธ์ ๋ด์ฅ ๊ธฐ๋ฅ์ธ lazy์ Suspense๋ฅผ ํ์ฉํ์ฌ ์ฝ๋ ์คํ๋ฆฌํ ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ, ๋์ ์ปดํฌ๋ํธ ๋ก๋ฉ ๊ธฐ๋ฒ์ ํตํ ์ฑ๋ฅ ์ต์ ํ ์ ๋ต, ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ค์ ํ๋ก์ ํธ์ ์ ์ฉํ๋ ์ฌ๋ก์ ๋ํด ๊ตฌ์ฒด์ ์ผ๋ก ์๊ฐํด๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ฝ๋ ์คํ๋ฆฌํ ์ ๊ฐ๋ ๊ณผ ํ์์ฑ
์ฝ๋ ์คํ๋ฆฌํ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๊ฐ์ ์์ ๋ฒ๋ค๋ก ๋ถํ ํ์ฌ, ์ฌ์ฉ์๊ฐ ์ฒ์ ์ ์ํ ๋ ๋ชจ๋ ์์์ ํ ๋ฒ์ ๋ก๋ํ์ง ์๊ณ , ํ์ํ ์์ ์ ๋์ ์ผ๋ก ํ์ํ ๋ถ๋ถ๋ง ๋ถ๋ฌ์ค๋ ๊ธฐ์ ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ๋จ์ถํ๊ณ , ์ฌ์ฉ์ ์ธํฐ๋์ ์ ๋ฐ๋ผ ์ถ๊ฐ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ์ฌ ํจ์จ์ ์ธ ๋คํธ์ํฌ ์ฌ์ฉ๊ณผ ํฅ์๋ ์ฑ๋ฅ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
ํนํ, SPA(Single Page Application) ๊ตฌ์กฐ์ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ํ์ด์ง ์ด๋ ์์ด ๋ชจ๋ ๊ธฐ๋ฅ์ ํ๋์ ๋ฒ๋ค๋ก ์ ๊ณตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์, ์ ํ๋ฆฌ์ผ์ด์ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฝ๋ ์คํ๋ฆฌํ ์ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ ์ ๊ณตํฉ๋๋ค.
- ์ด๊ธฐ ๋ก๋ฉ ์๋ ๊ฐ์ : ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์ ํ์ํ ์ต์ํ์ ์ฝ๋๋ง ๋ก๋ํ์ฌ ๋น ๋ฅธ ๋ ๋๋ง์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๋คํธ์ํฌ ์ฌ์ฉ ์ต์ ํ: ์ฌ์ฉ์ ํ๋์ ๋ฐ๋ผ ํ์ํ ์ฝ๋๋ง ๋์ ์ผ๋ก ์์ฒญํ๋ฏ๋ก, ๋ถํ์ํ ๋ฐ์ดํฐ ๋ค์ด๋ก๋๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ ํฅ์: ๋น ๋ฅธ ์๋ต์ฑ๊ณผ ๋ถ๋๋ฌ์ด ์ธํฐ๋์ ์ ์ ๊ณตํ์ฌ ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๋ง์กฑ๋๋ฅผ ๋์ ๋๋ค.
- ์ ์ง๋ณด์์ฑ ๊ฐํ: ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ๋ณ๋ก ๋ถ๋ฆฌํ์ฌ ๋ชจ๋ํํ๋ฉด, ์ฝ๋ ๊ด๋ฆฌ ๋ฐ ์ ๋ฐ์ดํธ๊ฐ ์ฉ์ดํด์ง๋๋ค.
๋ฆฌ์กํธ์ lazy์ Suspense๋ฅผ ํ์ฉํ ๋์ ์ปดํฌ๋ํธ ๋ก๋ฉ
๋ฆฌ์กํธ๋ 16.6 ๋ฒ์ ๋ถํฐ ์ฝ๋ ์คํ๋ฆฌํ ์ ์ํด lazy์ Suspense API๋ฅผ ๋์ ํ์์ต๋๋ค. ์ด ๋ ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด, ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ ์ ์์ผ๋ฉฐ, ๋ก๋ฉ ์ค์ ๋์ฒด UI๋ฅผ ์ ๊ณตํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
1. React.lazy๋ฅผ ์ด์ฉํ ๋์ ์ํฌํธ
React.lazy ํจ์๋ ๋์ import()๋ฅผ ํ์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋ํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ฅผ ํตํด ๋ฒ๋ค์ ์ฌ๋ฌ ๊ฐ์ ์ฒญํฌ(chunk)๋ก ๋ถํ ํ๊ณ , ์ฌ์ฉ์๊ฐ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ํ์๋ก ํ ๋๋ง ๋ก๋ํ ์ ์์ต๋๋ค.
์๋ ์์ ๋ ๋์ ์ผ๋ก ๋ก๋๋๋ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ ์ฌ๋ก์ ๋๋ค.
import React, { lazy, Suspense } from 'react';
// ๋์ ์ํฌํธ๋ฅผ ํตํด ์ปดํฌ๋ํธ๋ฅผ lazy๋ก ๋ก๋ํฉ๋๋ค.
const LazyComponent = lazy(() => import('./LazyComponent'));
const App = () => {
return (
<div style={{ padding: '20px' }}>
<h2>๋์ ์ปดํฌ๋ํธ ๋ก๋ฉ ์์ </h2>
{/* Suspense๋ฅผ ํตํด ๋ก๋ฉ ์ํ๋ฅผ ํ์ํฉ๋๋ค. */}
<Suspense fallback={<div>๋ก๋ฉ ์ค์
๋๋ค...</div>}>
<LazyComponent />
</Suspense>
</div>
);
};
export default App;
์ ์์ ์์ LazyComponent๋ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ํด๋น ์ปดํฌ๋ํธ๋ฅผ ํ์๋ก ํ ๋ ๋ก๋๋ฉ๋๋ค. Suspense ์ปดํฌ๋ํธ๋ ๋ก๋ ์ค์ธ ์ํ๋ฅผ ๋์ฒด UI(์: ๋ก๋ฉ ๋ฉ์์ง)๋ก ๋ณด์ฌ์ค์ผ๋ก์จ ์ฌ์ฉ์์๊ฒ ๋ช ํํ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค.
2. Suspense์ ์ญํ ๊ณผ ์ปค์คํฐ๋ง์ด์ง
Suspense๋ ๋์ ๋ก๋ฉ ์ค์ ๋์ฒด ์ฝํ ์ธ ๋ฅผ ํ์ํ๋ ์ญํ ์ ํ๋ฉฐ, ๋ก๋ฉ ์ํ๋ฅผ ๋ณด๋ค ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค. fallback ์์ฑ์ ์ฌ์ฉํ๋ฉด ๋ก๋ฉ ์ค์ ๋ณด์ฌ์ค ์ปดํฌ๋ํธ๋ฅผ ์ง์ ํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋จ์ํ ๋ก๋ฉ ๋ฉ์์ง ๋์ ์คํผ๋๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ ์ฉํ ์๋ ์์ต๋๋ค.
import React, { lazy, Suspense } from 'react';
import Spinner from './Spinner'; // ์คํผ๋ ์ปดํฌ๋ํธ
const LazyComponent = lazy(() => import('./LazyComponent'));
const App = () => {
return (
<div style={{ padding: '20px' }}>
<h2>๋์ ์ปดํฌ๋ํธ ๋ก๋ฉ - ์ปค์คํฐ๋ง์ด์ง๋ ๋ก๋ฉ UI</h2>
<Suspense fallback={<Spinner />}>
<LazyComponent />
</Suspense>
</div>
);
};
export default App;
์ด์ ๊ฐ์ด, Suspense์ ํจ๊ป ์ปค์คํฐ๋ง์ด์ง๋ ๋ก๋ฉ UI๋ฅผ ์ ๊ณตํ๋ฉด ์ฌ์ฉ์๋ ๋ก๋ ์ค์๋ ์๊ฐ์ ํผ๋๋ฐฑ์ ๋ฐ๊ฒ ๋์ด ์ ๋ฐ์ ์ธ ์ธํฐ๋์ ํ์ง์ด ํฅ์๋ฉ๋๋ค.
๊ณ ๊ธ ์ฝ๋ ์คํ๋ฆฌํ ์ ๋ต
๋ฆฌ์กํธ์ ๊ธฐ๋ณธ lazy์ Suspense ์ธ์๋, ๋ณด๋ค ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ๋ฌ ํ์ด์ง๋ ๊ธฐ๋ฅ ๋จ์๋ก ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ ์ ๋ต์ ๊ณ ๋ คํ ์ ์์ต๋๋ค. ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฒ์ด ์์ต๋๋ค.
1. ๋ผ์ฐํ ๊ณผ ๊ฒฐํฉํ ์ฝ๋ ์คํ๋ฆฌํ
๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์ ์ฝ๋ ์คํ๋ฆฌํ ์ ๊ฒฐํฉํ๋ฉด, ๊ฐ ๋ผ์ฐํธ๋ณ๋ก ํ์ํ ์ปดํฌ๋ํธ๋ง ๋์ ์ผ๋ก ๋ก๋ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด, ์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ์ง ์๋ ํ์ด์ง์ ๋ํ ๋ฆฌ์์ค ๋ก๋๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
import React, { lazy, Suspense } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const HomePage = lazy(() => import('./pages/HomePage'));
const AboutPage = lazy(() => import('./pages/AboutPage'));
const ContactPage = lazy(() => import('./pages/ContactPage'));
const App = () => {
return (
<Router>
<Suspense fallback={<div>ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค๋ ์ค์
๋๋ค...</div>}>
<Switch>
<Route exact path="/" component={HomePage} />
<Route path="/about" component={AboutPage} />
<Route path="/contact" component={ContactPage} />
</Switch>
</Suspense>
</Router>
);
};
export default App;
์ด๋ฌํ ๋ฐฉ์์ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ๋ฐฉ๋ฌธํ๋ ํ์ด์ง์ ๋ํด์๋ง ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ฏ๋ก, ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ๋ํญ ๊ฐ์ ํ ์ ์์ต๋๋ค.
2. ๋ฒ๋ค ํฌ๊ธฐ ๋ชจ๋ํฐ๋ง๊ณผ ์ต์ ํ
์ฝ๋ ์คํ๋ฆฌํ ์ ๊ตฌํํ ํ์๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ, ๋ถํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค๋ณต ์ฝ๋๊ฐ ํฌํจ๋์ง ์๋๋ก ์ต์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. Webpack Bundle Analyzer, Source Map Explorer ๋ฑ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ๊ฐ ์ฒญํฌ์ ํฌ๊ธฐ๋ฅผ ๋ถ์ํ๊ณ , ๊ฐ์ ๊ฐ๋ฅํ ๋ถ๋ถ์ ์ฐพ์๋ด๋ ๊ฒ์ด ํ์ํฉ๋๋ค.
3. ์บ์ฑ๊ณผ ํ๋ฆฌ๋ก๋ฉ ์ ๋ต
๋์ ์ปดํฌ๋ํธ ๋ก๋ฉ ์, ์บ์ฑ ์ ๋ต๊ณผ ํ๋ฆฌ๋ก๋ฉ(Preloading)์ ์ ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ํ์ด์ง ์ด๋ ์ ๋์ฑ ๋น ๋ฅธ ์๋ต ์๋๋ฅผ ๊ฒฝํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ํน์ ํ์ด์ง๋ฅผ ์์ฃผ ๋ฐฉ๋ฌธํ๋ค๋ฉด, ํด๋น ํ์ด์ง์ ์ปดํฌ๋ํธ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํด๋๊ฑฐ๋ ์บ์ํ์ฌ ๋ค์ ์ ๊ทผ ์ ๋น ๋ฅด๊ฒ ๋ ๋๋งํ ์ ์์ต๋๋ค.
์ฑ๋ฅ ์ต์ ํ์ ์ฌ์ฉ์ ๊ฒฝํ ํฅ์
์ฝ๋ ์คํ๋ฆฌํ ๊ณผ ๋์ ์ปดํฌ๋ํธ ๋ก๋ฉ์ ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๋ ๋ฐ ํต์ฌ์ ์ธ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ป์ ์ ์๋ ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋น ๋ฅธ ์ด๊ธฐ ๋ ๋๋ง: ํ์ํ ์ต์ํ์ ์ฝ๋๋ง ๋ก๋ํจ์ผ๋ก์จ, ํ์ด์ง ์ต์ด ๋ ๋๋ง ์๊ฐ์ ๋จ์ถํ ์ ์์ต๋๋ค.
- ํจ์จ์ ์ธ ๋คํธ์ํฌ ์ฌ์ฉ: ์ฌ์ฉ์ ์ธํฐ๋์ ์ ๋ฐ๋ผ ์ถ๊ฐ ๋ฆฌ์์ค๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ์ฌ, ๋ถํ์ํ ๋คํธ์ํฌ ์์ฒญ์ ์ค์ ๋๋ค.
- ๋ชจ๋ํ์ ์ ์ง๋ณด์์ฑ ๊ฐํ: ๊ธฐ๋ฅ๋ณ๋ก ์ฝ๋๋ฅผ ๋ถ๋ฆฌํจ์ผ๋ก์จ, ์ฝ๋ ๊ตฌ์กฐ๊ฐ ๋ช ํํด์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋๋ค.
- ํฅ์๋ ์ฌ์ฉ์ ์ธํฐ๋์ : Suspense์ ๊ฐ์ ๋์ฒด UI๋ฅผ ํ์ฉํ์ฌ ๋ก๋ฉ ์ค์๋ ์ฌ์ฉ์์๊ฒ ๋ช ํํ ํผ๋๋ฐฑ์ ์ ๊ณต, ์ ๋ฐ์ ์ธ UX๋ฅผ ๊ฐ์ ํฉ๋๋ค.
๋ํ, ์ด๋ฌํ ์ต์ ํ ๊ธฐ๋ฒ์ ๋ชจ๋ฐ์ผ ์ฌ์ฉ์๋ ๋คํธ์ํฌ ์๋๊ฐ ๋๋ฆฐ ํ๊ฒฝ์์๋ ํจ๊ณผ์ ์ ๋๋ค. ์ด๊ธฐ ๋ก๋ฉ์ด ๋นจ๋ผ์ง์ ๋ฐ๋ผ ์ฌ์ฉ์ ์ดํ๋ฅ ์ด ์ค์ด๋ค๊ณ , ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ฑ์ด ํฅ์๋์ด ๋ง์กฑ์ค๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์ค์ ํ๋ก์ ํธ์์์ ์ ์ฉ ์ฌ๋ก
๋๊ท๋ชจ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋ค์์ ํ์ด์ง๋ฅผ ๊ฐ์ง ํ๋ก์ ํธ์์๋ ์ฝ๋ ์คํ๋ฆฌํ ์ ์ ๊ทน ํ์ฉํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์์๊ฑฐ๋ ์น์ฌ์ดํธ์์๋ ํ, ์ํ ๋ชฉ๋ก, ์ํ ์์ธ ํ์ด์ง, ๊ฒฐ์ ํ์ด์ง ๋ฑ ๊ฐ ํ์ด์ง๋ณ๋ก ๋ฒ๋ค์ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฉ์์๊ฒ ํ์ํ ๋ฆฌ์์ค๋ง ๋ก๋ํ๊ฒ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ๊ณ , ์ฌ์ฉ์ ํ๋์ ๋ฐ๋ผ ๋ถ๋๋ฌ์ด ํ์ด์ง ์ ํ์ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ํ, ๊ด๋ฆฌ ๋๊ตฌ๋ ๋์๋ณด๋์ ๊ฐ์ ๋ณต์กํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋์ ๋ก๋ฉ๊ณผ ์บ์ฑ ์ ๋ต์ ๊ฒฐํฉํ์ฌ, ์ฌ์ฉ์๊ฐ ํน์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋๋ง ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ค๊ณ , ์ฌ์ฉํ์ง ์๋ ๊ธฐ๋ฅ์ ๋์ค์ ๋ก๋ํ ์ ์๋๋ก ์ต์ ํํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ์๋ฒ ๋ถํ ๊ฐ์์ ํจ๊ป ํด๋ผ์ด์ธํธ ์ธก ์ฑ๋ฅ์ ๊ทน๋ํํ๋ ํจ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๊ฒฐ๋ก
๋ฆฌ์กํธ์ lazy์ Suspense๋ฅผ ํ์ฉํ ์ฝ๋ ์คํ๋ฆฌํ ๊ณผ ๋์ ์ปดํฌ๋ํธ ๋ก๋ฉ์ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ ์ต์ ํ์์ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ๊ณ , ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ํ์ํ ๋ฆฌ์์ค๋ง ๋ก๋ํ์ฌ ๋คํธ์ํฌ ์ฌ์ฉ์ ์ต์ ํํ ์ ์์ต๋๋ค. ๋ํ, ๋ผ์ฐํ ๊ณผ ๊ฒฐํฉํ ์ฝ๋ ์คํ๋ฆฌํ , ๋ฒ๋ค ํฌ๊ธฐ ๋ชจ๋ํฐ๋ง, ์บ์ฑ ๋ฐ ํ๋ฆฌ๋ก๋ฉ ์ ๋ต ๋ฑ ๋ค์ํ ๊ธฐ๋ฒ์ ํจ๊ป ์ ์ฉํ๋ฉด, ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์์ผ๋ก์ ํ๋ก์ ํธ์์ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋, ์ฝ๋ ์คํ๋ฆฌํ ๊ธฐ๋ฒ์ ์ ๊ทน ๋์ ํ์ฌ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ๋จ์ถํ๊ณ , ์ฌ์ฉ์์๊ฒ ๋น ๋ฅด๊ณ ๋งค๋๋ฌ์ด ์ธํฐ๋์ ์ ์ ๊ณตํ์๊ธธ ๊ถ์ฅ๋๋ฆฝ๋๋ค. ์ต์ ํ๋ ๋ฒ๋ค ๊ตฌ์ฑ๊ณผ ๋์ ๋ก๋ฉ ์ ๋ต์ ์ ์ง๋ณด์์ ํ์ฅ์ฑ ์ธก๋ฉด์์๋ ํฐ ์ด์ ์ ์ ๊ณตํ๋ฉฐ, ๊ฐ๋ฐ์๋ก์ ๋ณด๋ค ๋ชจ๋ํ๋ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ ์งํ ์ ์๋๋ก ๋์์ค๋๋ค.
์ด์ ๊ฐ์ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉ์์ ๋ค์ํ ํ๊ฒฝ์ ๋ง์ถ ์ต์ ์ ๊ฒฝํ์ ์ ๊ณตํ๊ณ , ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๊ณต์ ์ธ ์ด์์ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ ๋๋ค.
๋๊ธ