๐ React์ Lazy Loading: ๋ก๋ฉ ์ฑ๋ฅ ์ต์ ํ์ ๋น๋ฐ ๐
์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ ๋ณต์กํด์ง๊ณ , ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก **Lazy Loading(์ง์ฐ ๋ก๋ฉ)**์ ๋ ์ด์ ์ ํ์ด ์๋ ํ์๊ฐ ๋์ด๊ฐ๊ณ ์์ต๋๋ค. ์ค๋์ React์ Lazy Loading์ ๋ํด ๋ฌด์์ด๊ณ , ์ ์ค์ํ์ง, ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ค๋ฌด์์ ์ ์ฉํ ํ๊น์ง ํจ๊ป ์์๋ณผ๊ฒ์! ๐ง
๐ง Lazy Loading์ด๋?
Lazy Loading์ ๋ง ๊ทธ๋๋ก “๊ฒ์ผ๋ฅด๊ฒ ๋ก๋ฉ”ํ๋ ๊ธฐ์ ์ ๋๋ค.
์ฆ, ํ์ํ ์๊ฐ์๋ง ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ์ฌ ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๊ณ , ์ฌ์ฉ์์ ๋๊ธฐ ์๊ฐ์ ์ค์ด๋ ๊ธฐ๋ฒ์ด์์.
• ๊ธฐ๋ณธ ์์ด๋์ด:
์ฌ์ฉ์๊ฐ ์ค์ ๋ก ํ์๋ก ํ์ง ์๋ ๋ฆฌ์์ค๋ ๋์ค์ ๋ก๋ํ๋ค.
• ๊ฒฐ๊ณผ:
• ์ด๊ธฐ ๋ก๋ฉ ์๋ ๐
• ๋คํธ์ํฌ ํธ๋ํฝ ๊ฐ์ ๐
• ์ฌ์ฉ์ ๊ฒฝํ(UX) ๊ฐ์ ๐
๐ก React์์ Lazy Loading์ด ์ ํ์ํ ๊น?
React ์ฑ์ ๋ณดํต SPA(Single Page Application) ํํ๋ก ๋ง๋ค์ด์ง๋๋ค. ์ด ๊ฒฝ์ฐ, ํ ๋ฒ์ ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ฒ๋ค๋ก ๋ฌถ์ด ์ฌ์ฉํ์ฃ . ํ์ง๋ง ์ฑ์ด ์ปค์ง์๋ก ๋ฒ๋ค ํฌ๊ธฐ๋ ์ปค์ง๊ณ , ๋ก๋ฉ ์๋๊ฐ ๋๋ ค์ง๊ธฐ ๋ง๋ จ์ ๋๋ค.
Lazy Loading์ ํตํด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ด์:
1. ์ด๊ธฐ ๋ฒ๋ค ํฌ๊ธฐ ์ถ์:
์ฌ์ฉ์๊ฐ ๋น์ฅ ๋ณด์ง ์๋ ์ปดํฌ๋ํธ๋ ๋์ค์ ๋ก๋ํ๋๋ก ๋ถ๋ฆฌ.
2. ๋ก๋ ์๊ฐ ๋จ์ถ:
์ด๊ธฐ ํ๋ฉด์ ํ์ํ ์ต์ํ์ ๋ฆฌ์์ค๋ง ๋ก๋.
3. UX ํฅ์:
ํ๋ฉด์ด ๋น ๋ฅด๊ฒ ๋ ๋๋ง๋์ด ์ฌ์ฉ์ ๊ฒฝํ์ด ๊ฐ์ .
๐ง React์์ Lazy Loading ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
React์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก **React.lazy**์ **Suspense**๋ฅผ ์ฌ์ฉํด Lazy Loading์ ๊ตฌํํฉ๋๋ค.
1๏ธโฃ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ: React.lazy
React.lazy๋ ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์์ ๋๋ค.
import React, { Suspense } from "react";
const LazyComponent = React.lazy(() => import("./MyComponent"));
export default function App() {
return (
<div>
<h1>Welcome to Lazy Loading Example!</h1>
<Suspense fallback={<div>Loading...</div>}>
<LazyComponent />
</Suspense>
</div>
);
}
๐ ๏ธ ์ฃผ์ ํฌ์ธํธ
1. React.lazy(() => import('./Component')):
• ๋์ ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
• import()๋ Webpack์ด๋ Vite ๊ฐ์ ๋ฒ๋ค๋ฌ๊ฐ ์ฝ๋๋ฅผ ๋ถ๋ฆฌ(์ฝ๋ ์คํ๋ฆฌํ )ํ๋๋ก ๋์์ค๋๋ค.
2. Suspense๋ก ๊ฐ์ธ๊ธฐ:
• Lazy Loaded ์ปดํฌ๋ํธ๋ ๋ก๋๋๋ ๋์ Suspense์ **fallback**์ ์ ์๋ UI๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๐ Suspense์ fallback ํ์ฉ
Suspense์ **fallback**์ Lazy Loading ์ค ๋ณด์ฌ์ค “๋ก๋ฉ UI”๋ฅผ ์ ์ํฉ๋๋ค.
์์ : ๋ก๋ฉ ์คํผ๋ ์ถ๊ฐ
import React, { Suspense } from "react";
const LazyComponent = React.lazy(() => import("./MyComponent"));
export default function App() {
return (
<div>
<h1>Loading Spinner Example</h1>
<Suspense fallback={<div className="spinner">Loading...</div>}>
<LazyComponent />
</Suspense>
</div>
);
}
๐๏ธ Lazy Loading๊ณผ Route ๊ธฐ๋ฐ ๋ถ๋ฆฌ
React Router์ ๊ฒฐํฉํ๋ฉด Lazy Loading์ ์ง๊ฐ๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค! ๋ผ์ฐํธ๋ณ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ์ฌ ์ด๊ธฐ ๋ก๋ฉ ์ฑ๋ฅ์ ํฌ๊ฒ ๊ฐ์ ํ ์ ์์ฃ .
React Router์ ํจ๊ป ์ฌ์ฉํ๊ธฐ
import React, { Suspense } from "react";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
const Home = React.lazy(() => import("./pages/Home"));
const About = React.lazy(() => import("./pages/About"));
export default function App() {
return (
<Router>
<Suspense fallback={<div>Loading...</div>}>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Suspense>
</Router>
);
}
๐ ์ค๋ฌด์์์ Lazy Loading ํ
1. ์ด๊ธฐ ํ๋ฉด์ ์ค์ํ ์ปดํฌ๋ํธ๋ Lazy Loadingํ์ง ๋ง์ธ์!
• ์: ๋ค๋น๊ฒ์ด์ ๋ฐ, ํธํฐ ๋ฑ.
2. Lazy Loading ์ปดํฌ๋ํธ๋ฅผ ์ ์ ํ ๊ทธ๋ฃนํํ์ธ์.
• ๋๋ฌด ๋ง์ ์์ ํ์ผ๋ก ๋๋๋ฉด HTTP ์์ฒญ์ด ์ฆ๊ฐํด ์คํ๋ ค ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์ด์.
3. ๋ก๋ฉ ์ํ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ช ํํ ๋ณด์ฌ์ฃผ์ธ์.
• ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ์ํด ๋ก๋ฉ ์ค์์ ์๋ ค์ฃผ๋ UI๋ฅผ ์ถ๊ฐ.
4. ์บ์ฑ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ํจ๊ณผ ๊ทน๋ํ!
• React์ Lazy Loading์ ์บ์ฑ ์ ๋ต๊ณผ ๊ฒฐํฉํ๋ฉด ๋คํธ์ํฌ ๋ถํ๋ฅผ ์ต์ํํ ์ ์์ด์.
๐ Lazy Loading์ ์ฅ์ ์์ฝ
• ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ฌ ๋ก๋ฉ ์๋ ๊ฐ์ โฉ
• ํ์ํ ๋๋ง ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ์ฌ ํจ์จ์ ์ธ ์์ ์ฌ์ฉ ๐ฏ
• ์ฌ์ฉ์ ๊ฒฝํ(UX) ํฅ์ ๐
๐ท์ ์ค์ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ด ์๋น!๐ท
'Front-end > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React: Lifting State Up ๐๏ธโโ๏ธ (0) | 2025.02.24 |
---|---|
React์ Composition vs Inheritance ๐ (0) | 2025.02.22 |
React์ Link ์ปดํฌ๋ํธ vs. ์ ํต์ ์ธ <a> ํ๊ทธ: ๋ญ๊ฐ ๋ค๋ฅผ๊น? (1) | 2025.02.13 |
[React]ํ๋ฆฌ ๋ ๋๋ง(Pre-rendering) ์ ๋๋ก ์ดํดํ๊ธฐ ๐ผ๏ธ (0) | 2025.02.06 |
[React] Transition์ ๋จ๊ณ์ ๋์ ์๋ฆฌ ํบ์๋ณด๊ธฐ!๐ (2) | 2025.01.31 |