ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

web/react

lazy

dev_been94 2024. 12. 16. 11:43
728x90
๋ฐ˜์‘ํ˜•

lazy

 

๐ŸŽฏ lazy๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

React์˜ **lazy**๋Š” ํ•„์š”ํ•  ๋•Œ๋งŒ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ธฐ๋Šฅ์ด์—์š”.
์‰ฝ๊ฒŒ ๋งํ•ด, ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฒŒ์œผ๋ฅด๊ฒŒ(lazily) ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ์ค€๋น„๊ฐ€ ๋  ๋•Œ๋งŒ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ• ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ: ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ ์ด์•ผ๊ธฐ

์—ฌ๋Ÿฌ๋ถ„์ด ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ๋ฅผ ์šด์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”. ๐Ÿ”

  1. ๋ชจ๋“  ๋ฉ”๋‰ด๋ฅผ ํ•œ ๋ฒˆ์— ์ค€๋น„ํ•˜๋ฉด?
    • ์†๋‹˜์ด ์–ธ์ œ ์–ด๋–ค ๋ฉ”๋‰ด๋ฅผ ์ฃผ๋ฌธํ• ์ง€ ๋ชฐ๋ผ์„œ ๋ชจ๋“  ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘”๋‹ค๊ณ  ๊ฐ€์ •ํ•ด์š”.
    • ๊ทธ๋Ÿฌ๋ฉด ๋ƒ‰์žฅ๊ณ ์— ํ–„๋ฒ„๊ฑฐ๊ฐ€ ์Œ“์ด๊ณ , ์žฌ๋ฃŒ ๋‚ญ๋น„๋„ ๋งŽ์•„์ง€๊ฒ ์ฃ ?
  2. lazy๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด?
    • ์†๋‹˜์ด ํŠน์ • ๋ฉ”๋‰ด๋ฅผ ์ฃผ๋ฌธํ•  ๋•Œ๋งŒ ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋ฐ”๋กœ ๋งŒ๋“ค์–ด์„œ ์ œ๊ณตํ•ด์š”.
    • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋‚ญ๋น„ ์—†์ด ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์–ด์š”.

React์˜ **lazy**๋„ ๋˜‘๊ฐ™์•„์š”!
๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋Œ€์‹ , ํ•„์š”ํ•  ๋•Œ๋งŒ ๊ฐ€์ ธ์™€์„œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์ค๋‹ˆ๋‹ค.

 

๐Ÿ› ๏ธ React์—์„œ lazy ์‚ฌ์šฉ๋ฒ•

React์—์„œ **lazy**๋Š” React.lazy() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋™์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
์ฃผ๋กœ **์ฝ”๋“œ ๋ถ„ํ• (Code Splitting)**์„ ์œ„ํ•ด ์‚ฌ์šฉํ•ด์š”.

 

1. ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•: ์ปดํฌ๋„ŒํŠธ๋ฅผ lazyํ•˜๊ฒŒ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

์˜ˆ๋ฅผ ๋“ค์–ด, MyComponent๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋™์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์™€ ๋ณผ๊ฒŒ์š”.

ํŒŒ์ผ ๊ตฌ์กฐ

src/
  โ”œโ”€โ”€ components/
  โ”‚     โ””โ”€โ”€ MyComponent.jsx
  โ”œโ”€โ”€ App.jsx

 

MyComponent.jsx (๋ถˆ๋Ÿฌ์˜ฌ ์ปดํฌ๋„ŒํŠธ)

import React from 'react';

export default function MyComponent() {
  return <h1>์•ˆ๋…•ํ•˜์„ธ์š”! ์ €๋Š” Lazy Component์ž…๋‹ˆ๋‹ค ๐Ÿ˜Š</h1>;
}

 

App.jsx (lazy ์‚ฌ์šฉ)

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

// lazy๋ฅผ ์‚ฌ์šฉํ•ด MyComponent๋ฅผ ๋™์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
const MyComponent = lazy(() => import('./components/MyComponent'));

function App() {
  return (
    <div>
      <h1>React lazy ์˜ˆ์ œ</h1>
      <Suspense fallback={<p>๋กœ๋”ฉ ์ค‘...</p>}>
        <MyComponent /> {/* MyComponent๋ฅผ ํ•„์š”ํ•  ๋•Œ๋งŒ ๋ถˆ๋Ÿฌ์˜ด */}
      </Suspense>
    </div>
  );
}

export default App;

 

๐Ÿ” ์ฝ”๋“œ ์„ค๋ช…

  1. React.lazy()
    • React.lazy()๋ฅผ ์‚ฌ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋™์ ์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    • ์—ฌ๊ธฐ์„œ **import('./components/MyComponent')**๋Š” ์‹ค์ œ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ฝ”๋“œ์˜ˆ์š”.
  2. Suspense ์ปดํฌ๋„ŒํŠธ
    • Suspense๋Š” lazy ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋กœ๋”ฉ๋  ๋•Œ ๋ณด์—ฌ์ค„ ํ™”๋ฉด์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • fallback ์†์„ฑ์œผ๋กœ ๋กœ๋”ฉ ์ค‘์— ๋ณด์—ฌ์ค„ UI๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.
    • ์˜ˆ๋ฅผ ๋“ค์–ด <p>๋กœ๋”ฉ ์ค‘...</p>๋ฅผ ํ‘œ์‹œํ•ด์ค๋‹ˆ๋‹ค.
  3. MyComponent์˜ ๋กœ๋”ฉ
    • App ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ๋ Œ๋”๋ง๋  ๋•Œ MyComponent๋Š” ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • MyComponent๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚  ๋•Œ๋งŒ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

 

๐Ÿš€ lazy๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ 

  1. ์•ฑ ์„ฑ๋Šฅ ์ตœ์ ํ™”
    • ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ  ํ•„์š”ํ•  ๋•Œ๋งŒ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋นจ๋ผ์ ธ์š”.
  2. ์ฝ”๋“œ ๋ถ„ํ•  (Code Splitting)
    • ํฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”.
    • ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋น ๋ฅด๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์œ ์—ฐํ•œ ๋กœ๋”ฉ ํ™”๋ฉด ์„ค์ •
    • Suspense๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๋”ฉ ํ™”๋ฉด์„ ์ž์œ ๋กญ๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

โš ๏ธ ์ฃผ์˜ํ•  ์ 

  • Suspense๋Š” ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ด์š”
    • React.lazy๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์—,
      ๋กœ๋”ฉ ์ค‘์— ๋ญ˜ ๋ณด์—ฌ์ค„์ง€ Suspense๋ฅผ ํ†ตํ•ด ์„ค์ •ํ•ด์•ผ ํ•ด์š”.
  • ๋ผ์šฐํŒ…๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ
    • React Router์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ lazyํ•˜๊ฒŒ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ด์š”.

 

๐ŸŒŸ ๊ฒฐ๋ก : React.lazy๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

React์˜ **lazy**๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•„์š”ํ•  ๋•Œ๋งŒ ๋ถˆ๋Ÿฌ์™€์„œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด์—์š”.
์ด๋ ‡๊ฒŒ ๋™์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋” ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

๐ŸŽ‰ ํ•œ ์ค„ ์š”์•ฝ

React.lazy๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ "๊ฒŒ์œผ๋ฅด๊ฒŒ" ๋ถˆ๋Ÿฌ์™€์„œ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด์—์š”!

 

๐Ÿ˜Š ๋งˆ๋ฌด๋ฆฌ

  • ํ•„์š”ํ•  ๋•Œ๋งŒ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค
  • **Suspense**๋กœ ๋กœ๋”ฉ ํ™”๋ฉด์„ ์„ค์ •ํ•ด์ค€๋‹ค
728x90
๋ฐ˜์‘ํ˜•

'web > react' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

startTransition  (0) 2024.12.16
memo  (0) 2024.12.16
forwardRef  (0) 2024.12.16
createContext  (0) 2024.12.16
cache  (0) 2024.12.16
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•
250x250