๊ฐœ๋ฐœ ์‹œ๋‚˜๋ธŒ๋กœ

Lazy Loading

youngdeok 2023. 8. 12. 15:31

๋ ˆ์ด์ง€ ๋กœ๋”ฉ(Lazy Loading)์€ ์›น์‚ฌ์ดํŠธ์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•„์š”ํ•œ ์‹œ์ ์—๋งŒ ๋กœ๋“œํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ด๋ฏธ์ง€๋‚˜ ๋™์˜์ƒ๊ณผ ๊ฐ™์€ ๋Œ€์šฉ๋Ÿ‰ ๋ฆฌ์†Œ์Šค๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜, ํŽ˜์ด์ง€์˜ ์ผ๋ถ€๋ถ„์„ ๋™์ ์œผ๋กœ ๋กœ๋”ฉํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์ง€ ๋กœ๋”ฉ์˜ ์ฃผ์š” ์•„์ด๋””์–ด๋Š” ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ์ ์— ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํ•œ ๋ฒˆ์— ๋กœ๋“œํ•˜๋Š” ๋Œ€์‹ , ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•œ ์ˆœ๊ฐ„์— ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋กœ์จ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ํŽ˜์ด์ง€ ์ „ํ™˜ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ๊ฐœ๋ฐœ์—์„œ ๋ ˆ์ด์ง€ ๋กœ๋”ฉ์€ ์ฃผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค:

 

  1. ์ด๋ฏธ์ง€ ๋ ˆ์ด์ง€ ๋กœ๋”ฉ: ํŽ˜์ด์ง€์— ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€๋Š” ์ดˆ๊ธฐ์— ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋กคํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•  ๋•Œ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ปดํฌ๋„ŒํŠธ ๋ ˆ์ด์ง€ ๋กœ๋”ฉ: React๋‚˜ Vue์™€ ๊ฐ™์€ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•„์š”ํ•œ ์‹œ์ ์— ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **React.lazy**์™€ **Suspense**๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ ˆ์ด์ง€ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋™์  ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ: ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ, ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋กœ๋“œํ•˜์—ฌ ํŽ˜์ด์ง€์˜ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ํŽ˜์ด์ง€์˜ ์ผ๋ถ€ ๋กœ๋”ฉ: ํŽ˜์ด์ง€์˜ ํŠน์ • ๋ถ€๋ถ„์ด๋‚˜ ์„น์…˜์„ ํ•„์š”ํ•œ ์ˆœ๊ฐ„์— ๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

 

๋ ˆ์ด์ง€ ๋กœ๋”ฉ์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๊ณ  ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ํ™œ์šฉํ•˜์—ฌ ์›น์‚ฌ์ดํŠธ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘‰์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด ์ดˆ๊ธฐ์— ํ•œ๋ฒˆ์— ๋ชจ๋“  ๊ฒƒ์„ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ์†๋„๊ฐ€ ๋‹น์—ฐํžˆ ๋Šฆ์ถฐ์งˆ ์ˆ˜ ๋ฐ–์— ์—†๋Š”๋ฐ, ์›ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜๋Š” ์‹œ์ ์— ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์„ ๋ ˆ์ด์ง€๋กœ๋”ฉ์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ:

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

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

function App() {
  return (
    <div>
      <h1>My App</h1>
      <Suspense fallback={<div>Loading...</div>}>
        <LazyLoadedComponent />
      </Suspense>
    </div>
  );
}

export default App;

์ €๊ฐ™์€ ๊ฒฝ์šฐ ์ ์šฉ์„ ํ•ด์ฃผ๋‹ˆ 3์  ์ •๋„ ์„ฑ๋Šฅ์ด ์˜ฌ๋ผ๊ฐ„ ํšจ๊ณผ๋ฅผ ๋ดค์Šต๋‹ˆ๋‹ค. (์•„์ง ๊ฐˆ๊ธธ์ด ๋จธ๋„ค์š”…)