λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Lect & Tip/React by GPT

React Router μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…κ³Ό μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•œ lazy와 Suspense 동적 μ»΄ν¬λ„ŒνŠΈ λ‘œλ”©

by μ•Œ 수 μ—†λŠ” μ‚¬μš©μž 2025. 5. 25.
λ°˜μ‘ν˜•

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λ₯Ό ν™œμš©ν•œ μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…κ³Ό 동적 μ»΄ν¬λ„ŒνŠΈ λ‘œλ”©μ€ ν˜„λŒ€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯ μ΅œμ ν™”μ—μ„œ 맀우 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 초기 λ‘œλ”© 속도λ₯Ό κ°œμ„ ν•˜κ³ , μ‚¬μš©μžκ°€ μ‹€μ œλ‘œ ν•„μš”ν•œ λ¦¬μ†ŒμŠ€λ§Œ λ‘œλ“œν•˜μ—¬ λ„€νŠΈμ›Œν¬ μ‚¬μš©μ„ μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, λΌμš°νŒ…κ³Ό κ²°ν•©ν•œ μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…, λ²ˆλ“€ 크기 λͺ¨λ‹ˆν„°λ§, 캐싱 및 ν”„λ¦¬λ‘œλ”© μ „λž΅ λ“± λ‹€μ–‘ν•œ 기법을 ν•¨κ»˜ μ μš©ν•˜λ©΄, μ‚¬μš©μž κ²½ν—˜κ³Ό 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νš¨μœ¨μ„±μ„ 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ•žμœΌλ‘œμ˜ ν”„λ‘œμ νŠΈμ—μ„œ λ¦¬μ•‘νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•  λ•Œ, μ½”λ“œ μŠ€ν”Œλ¦¬νŒ… 기법을 적극 λ„μž…ν•˜μ—¬ 초기 λ‘œλ”© μ‹œκ°„μ„ λ‹¨μΆ•ν•˜κ³ , μ‚¬μš©μžμ—κ²Œ λΉ λ₯΄κ³  λ§€λ„λŸ¬μš΄ μΈν„°λž™μ…˜μ„ μ œκ³΅ν•˜μ‹œκΈΈ ꢌμž₯λ“œλ¦½λ‹ˆλ‹€. μ΅œμ ν™”λœ λ²ˆλ“€ ꡬ성과 동적 λ‘œλ”© μ „λž΅μ€ μœ μ§€λ³΄μˆ˜μ™€ ν™•μž₯μ„± μΈ‘λ©΄μ—μ„œλ„ 큰 이점을 μ œκ³΅ν•˜λ©°, κ°œλ°œμžλ‘œμ„œ 보닀 λͺ¨λ“ˆν™”λœ μ½”λ“œ ꡬ쑰λ₯Ό μœ μ§€ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

이와 같은 μ ‘κ·Ό 방식은 μ‚¬μš©μžμ˜ λ‹€μ–‘ν•œ ν™˜κ²½μ— 맞좘 졜적의 κ²½ν—˜μ„ μ œκ³΅ν•˜κ³ , μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 성곡적인 μš΄μ˜μ— μ€‘μš”ν•œ 역할을 ν•  κ²ƒμž…λ‹ˆλ‹€.

λ°˜μ‘ν˜•

λŒ“κΈ€