Front-end/React

๐Ÿš€ React์˜ Lazy Loading: ๋กœ๋”ฉ ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ๋น„๋ฐ€ ๐Ÿ”„

xeunnie 2025. 2. 18. 01:00
728x90
๋ฐ˜์‘ํ˜•

๐Ÿš€ 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) ํ–ฅ์ƒ ๐ŸŒŸ

 

๐ŸŒท์ „์„ค์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ด…์‹œ๋‹น!๐ŸŒท

728x90
๋ฐ˜์‘ํ˜•