React Lazy Loading: ์ต์ ํ๋ ์ฑ๋ฅ์ ์ํ ์ปดํฌ๋ํธ ์ฝ๋ ๋ถํ | MLOG | MLOG 2025๋
8์ 16์ผ ํ๊ตญ์ด
Lazy loading ๋ฐ ์ปดํฌ๋ํธ ์ฝ๋ ๋ถํ ์ ํตํด React ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๋จ์ถํ๊ณ ์ฑ๋ฅ์ ๊ฐ์ ํ์ธ์. ์ค์ฉ์ ์ธ ๊ธฐ์ ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐฐ์ธ ์ ์์ต๋๋ค.
React Lazy Loading: ์ต์ ํ๋ ์ฑ๋ฅ์ ์ํ ์ปดํฌ๋ํธ ์ฝ๋ ๋ถํ
์ค๋๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ๋์งํธ ์ธ๊ณ์์ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ์ฉ์๋ ์ฆ๊ฐ์ ์ธ ๋ง์กฑ์ ๊ธฐ๋ํ๋ฉฐ, ๋๋ฆฐ ๋ก๋ฉ ์๊ฐ์ ๋ถ๋ง, ์ฅ๋ฐ๊ตฌ๋ ํฌ๊ธฐ, ๋ถ์ ์ ์ธ ๋ธ๋๋ ์ด๋ฏธ์ง๋ก ์ด์ด์ง ์ ์์ต๋๋ค. React ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ, ์ํํ๊ณ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๊ธฐ์ ์ค ํ๋๋ ์ปดํฌ๋ํธ ์ฝ๋ ๋ถํ ์ ์ฌ์ฉํ lazy loading ์
๋๋ค.
Lazy Loading ๋ฐ ์ฝ๋ ๋ถํ ์ด๋ ๋ฌด์์
๋๊น?
Lazy loading ์ ์ด๋ฏธ์ง, ์คํฌ๋ฆฝํธ ๋ฐ ์ปดํฌ๋ํธ์ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์ค์ ํ ๋ฒ์ ๋ชจ๋ ๋ก๋ํ๋ ๋์ ํ์ํ ๋๋ง ๋ก๋ํ๋ ๊ธฐ์ ์
๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด๊ธฐ์ ๋ค์ด๋ก๋ํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํด์ผ ํ๋ ๋ฐ์ดํฐ ์์ด ํฌ๊ฒ ์ค์ด๋ค์ด ์ด๊ธฐ ๋ก๋ ์๊ฐ์ด ๋นจ๋ผ์ง๊ณ ์ธ์ง๋ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
์ฝ๋ ๋ถํ ์ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๋ฅผ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฒญํฌ(๋๋ ๋ฒ๋ค)๋ก ๋๋๋ ํ๋ก์ธ์ค์
๋๋ค. ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ ์ด๊ธฐ ๋ณด๊ธฐ์ ํ์ํ ์ฝ๋๋ง ๋ค์ด๋ก๋ํ๊ณ ์ค์ ๋ก ํ์ํ ๋๊น์ง ๋ค๋ฅธ ์ฝ๋์ ๋ก๋ฉ์ ์ฐ๊ธฐํ ์ ์์ต๋๋ค. Lazy loading์ ์ฝ๋ ๋ถํ ์ ํ์ฉํ์ฌ ํน์ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๋ ค๊ณ ํ ๋๋ง ๋ก๋ํฉ๋๋ค.
React์์ Lazy Loading ๋ฐ ์ฝ๋ ๋ถํ ์ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
React ํ๋ก์ ํธ์ lazy loading ๋ฐ ์ฝ๋ ๋ถํ ์ ํตํฉํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํฅ์๋ ์ด๊ธฐ ๋ก๋ ์๊ฐ: ํ์ ์ปดํฌ๋ํธ๋ง ์ด๊ธฐ์ ๋ก๋ํ์ฌ ํ์ด์ง๊ฐ ์ํธ ์์ฉ ๊ฐ๋ฅํด์ง๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ ์ธํฐ๋ท ์ฐ๊ฒฐ ์๋๊ฐ ๋๋ฆฌ๊ฑฐ๋ ๋ชจ๋ฐ์ผ ์ฅ์น๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ ํนํ ์ ์ฉํฉ๋๋ค.
์ค์ด๋ ๋ฒ๋ค ํฌ๊ธฐ: ์ฝ๋ ๋ถํ ์ ์ด๊ธฐ JavaScript ๋ฒ๋ค์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ ๋ค์ด๋ก๋ ๋ฐ ๊ตฌ๋ฌธ ๋ถ์ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
ํฅ์๋ ์ฌ์ฉ์ ๊ฒฝํ: ๋ ๋น ๋ฅธ ๋ก๋ฉ ์น์ฌ์ดํธ๋ ๋ ์ํํ๊ณ ์ฆ๊ฑฐ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ์ฌ ์ฐธ์ฌ๋์ ์ ํ์จ์ ๋์
๋๋ค.
์ ์ฌ์ ์ฅ์น์์์ ๋ ๋์ ์ฑ๋ฅ: Lazy loading์ ์ ํ๋ ์ฒ๋ฆฌ ๋ฅ๋ ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง ์ฅ์น์์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฏธ๋ฆฌ ๋ก๋ํ๊ณ ์ฒ๋ฆฌํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
SEO ์ด์ : ๊ฒ์ ์์ง์ ๋ก๋ฉ ์๊ฐ์ด ๋ ๋น ๋ฅธ ์น์ฌ์ดํธ๋ฅผ ์ฐ์ ์ํ๋ฏ๋ก lazy loading์ ๊ตฌํํ๋ฉด ๊ฒ์ ์์ง ์์์ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
React์์ Lazy Loading์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
React๋ React.lazy ๋ฐ Suspense ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ lazy loading์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค. ๋ค์์ ๋จ๊ณ๋ณ ๊ฐ์ด๋์
๋๋ค.
1. React.lazy() ์ฌ์ฉ
React.lazy()๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฏ๋ก ์ฝ๋๋ฅผ ๋ณ๋์ ์ฒญํฌ๋ก ํจ๊ณผ์ ์ผ๋ก ๋ถํ ํ ์ ์์ต๋๋ค. import()๋ฅผ ํธ์ถํ๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ด ํจ์๋ ์ปดํฌ๋ํธ๋ก ํ์ธ๋๋ Promise๋ฅผ ๋ฐํํฉ๋๋ค.
const MyComponent = React.lazy(() => import('./MyComponent'));
์ด ์์์ MyComponent๋ ๋ ๋๋ง๋๋ ค๊ณ ํ ๋๋ง ๋ก๋๋ฉ๋๋ค.
2. <Suspense>๋ก ๋ํ
React.lazy()๋ ๋น๋๊ธฐ์ ์ธ ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก lazy-loaded ์ปดํฌ๋ํธ๋ฅผ <Suspense> ์ปดํฌ๋ํธ๋ก ๋ํํด์ผ ํฉ๋๋ค. <Suspense> ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ก๋๋๋ ๋์ ํด๋ฐฑ UI(์: ๋ก๋ฉ ์คํผ๋)๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
import React, { Suspense } from 'react';
function MyPage() {
return (
Loading... }>
);
}
์ด ์์์ MyComponent๊ฐ ๋ก๋๋๋ ๋์ Loading... ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ์ปดํฌ๋ํธ๊ฐ ๋ก๋๋๋ฉด ํด๋ฐฑ UI๋ฅผ ๋์ฒดํฉ๋๋ค.
3. ์ค์ฉ์ ์ธ ์: ๋์ฉ๋ ์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌ Lazy Loading
๋์ฉ๋ ์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌ๊ฐ ์๋ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค. ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ํ ๋ฒ์ ๋ก๋ํ๋ฉด ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋ค์์ React.lazy() ๋ฐ <Suspense>๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ lazy loadingํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
import React, { Suspense } from 'react';
const LazyImage = React.lazy(() => import('./Image'));
function ImageGallery() {
const images = [
{ id: 1, src: 'image1.jpg', alt: 'Image 1' },
{ id: 2, src: 'image2.jpg', alt: 'Image 2' },
{ id: 3, src: 'image3.jpg', alt: 'Image 3' },
// ... more images
];
return (
{images.map(image => (
Loading image...
}>
))}
);
}
export default ImageGallery;
๊ทธ๋ฆฌ๊ณ Image.js ์ปดํฌ๋ํธ:
import React from 'react';
const Image = ({ src, alt }) => {
return ;
};
export default Image;
์ด ์์์ ๊ฐ ์ด๋ฏธ์ง๋ <Suspense> ์ปดํฌ๋ํธ๋ก ๋ํ๋๋ฏ๋ก ๊ฐ ์ด๋ฏธ์ง๊ฐ ๋ก๋๋๋ ๋์ ๋ก๋ฉ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด๋ฏธ์ง๊ฐ ๋ค์ด๋ก๋๋๋ ๋์ ์ ์ฒด ํ์ด์ง๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๊ณ ๊ธ ๊ธฐ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ
1. ์ค๋ฅ ๊ฒฝ๊ณ
Lazy loading์ ์ฌ์ฉํ ๋๋ ๋ก๋ฉ ํ๋ก์ธ์ค ์ค์ ๋ฐ์ํ ์ ์๋ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ค๋ฅ ๊ฒฝ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๊ณ ํด๋ฐฑ UI๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ค๋ฅ ๊ฒฝ๊ณ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
import React, { Component } from 'react';
class ErrorBoundary extends Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// Update state so the next render will show the fallback UI.
return { hasError: true };
}
componentDidCatch(error, errorInfo) {
// You can also log the error to an error reporting service
console.error(error, errorInfo);
}
render() {
if (this.state.hasError) {
// You can render any custom fallback UI
return Something went wrong. ;
}
return this.props.children;
}
}
export default ErrorBoundary;
๊ทธ๋ฐ ๋ค์ <Suspense> ์ปดํฌ๋ํธ๋ฅผ <ErrorBoundary>๋ก ๋ํํฉ๋๋ค.
Loading...}>
MyComponent๋ฅผ ๋ก๋ํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด <ErrorBoundary>๊ฐ ์ด๋ฅผ ํฌ์ฐฉํ๊ณ ํด๋ฐฑ UI๋ฅผ ํ์ํฉ๋๋ค.
2. ์๋ฒ์ธก ๋ ๋๋ง(SSR) ๋ฐ Lazy Loading
Lazy loading์ ์๋ฒ์ธก ๋ ๋๋ง(SSR)๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๊ฐ์ ํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ช ๊ฐ์ง ์ถ๊ฐ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค. ์๋ฒ๊ฐ ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ lazy-loaded ์ปดํฌ๋ํธ๊ฐ ํด๋ผ์ด์ธํธ์ธก์์ ์ ์ ํ๊ฒ ํ์ด๋๋ ์ด์
๋๋๋ก ํด์ผ ํฉ๋๋ค.
Next.js ๋ฐ Gatsby.js์ ๊ฐ์ ๋๊ตฌ๋ SSR ํ๊ฒฝ์์ lazy loading ๋ฐ ์ฝ๋ ๋ถํ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฏ๋ก ํ๋ก์ธ์ค๊ฐ ํจ์ฌ ์ฌ์์ง๋๋ค.
3. Lazy-Loaded ์ปดํฌ๋ํธ ๋ฏธ๋ฆฌ ๋ก๋
๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ค์ ๋ก ํ์ํ๊ธฐ ์ ์ lazy-loaded ์ปดํฌ๋ํธ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ ์ ์์ต๋๋ค. ์ด๋ ๊ณง ๋ ๋๋ง๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ปดํฌ๋ํธ(์: ํด๋ ์๋์ ์์ง๋ง ์คํฌ๋กค๋์ด ๋ณผ ์ ์์ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ปดํฌ๋ํธ)์ ์ ์ฉํ ์ ์์ต๋๋ค. import() ํจ์๋ฅผ ์๋์ผ๋ก ํธ์ถํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ ์ ์์ต๋๋ค.
import('./MyComponent'); // MyComponent ๋ฏธ๋ฆฌ ๋ก๋
์ด๋ ๊ฒ ํ๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ปดํฌ๋ํธ ๋ก๋ฉ์ด ์์๋๋ฏ๋ก ์ค์ ๋ก ๋ ๋๋ง๋ ๋ ๋ ๋นจ๋ฆฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
4. Webpack Magic Comments๋ฅผ ์ฌ์ฉํ ๋์ ๊ฐ์ ธ์ค๊ธฐ
Webpack์ "magic comments"๋ ์์ฑ๋ ์ฝ๋ ์ฒญํฌ์ ์ด๋ฆ์ ์ฌ์ฉ์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฒ๋ค ๊ตฌ์กฐ๋ฅผ ๋๋ฒ๊น
ํ๊ณ ๋ถ์ํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
const MyComponent = React.lazy(() => import(/* webpackChunkName: "my-component" */ './MyComponent'));
์ด๋ ๊ฒ ํ๋ฉด ์ผ๋ฐ์ ์ธ ์ด๋ฆ ๋์ "my-component.js"(๋๋ ์ ์ฌํ)๋ผ๋ ์ฝ๋ ์ฒญํฌ๊ฐ ์์ฑ๋ฉ๋๋ค.
5. ์ผ๋ฐ์ ์ธ ํจ์ ํผํ๊ธฐ
๊ณผ๋ํ ๋ถํ : ์ฝ๋๋ฅผ ๋๋ฌด ์์ ์ฒญํฌ๋ก ๋ถํ ํ๋ฉด ์ฌ๋ฌ ๋คํธ์ํฌ ์์ฒญ์ ๋ง๋๋ ์ค๋ฒํค๋๋ก ์ธํด ์ค์ ๋ก ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ์ ํฉํ ๊ท ํ์ ์ฐพ์ผ์ญ์์ค.
์๋ชป๋ Suspense ๋ฐฐ์น: <Suspense> ๊ฒฝ๊ณ๊ฐ ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋๋ก ์ ์ ํ๊ฒ ๋ฐฐ์น๋์๋์ง ํ์ธํฉ๋๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ ์ฒด ํ์ด์ง๋ฅผ <Suspense>๋ก ๋ํํ์ง ๋ง์ญ์์ค.
์ค๋ฅ ๊ฒฝ๊ณ ์์ง ์๊ธฐ: lazy loading ์ค์ ๋ฐ์ํ ์ ์๋ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ํญ์ ์ค๋ฅ ๊ฒฝ๊ณ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์ค์ ์ฌ๋ก ๋ฐ ์ฌ์ฉ ์ฌ๋ก
Lazy loading์ React ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ด๋ฒ์ํ ์๋๋ฆฌ์ค์ ์ ์ฉํ ์ ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์์
๋๋ค.
์ ์ ์๊ฑฐ๋ ์น์ฌ์ดํธ: ์ ํ ์ด๋ฏธ์ง, ๋น๋์ค ๋ฐ ์์ธํ ์ ํ ์ค๋ช
์ lazy loadingํ๋ฉด ์ ํ ํ์ด์ง์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ํฌ๊ฒ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๋ธ๋ก๊ทธ ๋ฐ ๋ด์ค ์น์ฌ์ดํธ: ์ด๋ฏธ์ง, ์๋ฒ ๋๋ ๋น๋์ค ๋ฐ ๋๊ธ ์น์
์ lazy loadingํ๋ฉด ์ฝ๊ธฐ ํ๊ฒฝ์ ๊ฐ์ ํ๊ณ ์ดํ๋ฅ ์ ์ค์ผ ์ ์์ต๋๋ค.
๋์๋ณด๋ ๋ฐ ๊ด๋ฆฌ์ ํจ๋: ๋ณต์กํ ์ฐจํธ, ๊ทธ๋ํ ๋ฐ ๋ฐ์ดํฐ ํ
์ด๋ธ์ lazy loadingํ๋ฉด ๋์๋ณด๋ ๋ฐ ๊ด๋ฆฌ์ ํจ๋์ ์๋ต์ฑ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
(SPA): ๊ฒฝ๋ก ๋ฐ ์ปดํฌ๋ํธ๋ฅผ lazy loadingํ๋ฉด SPA์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ด๊ณ ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๊ตญ์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์
: ์ฌ์ฉ์ ์ธ์ด์ ํ์ํ ๊ฒฝ์ฐ์๋ง ๋ก์ผ์ผ๋ณ ๋ฆฌ์์ค(ํ
์คํธ, ์ด๋ฏธ์ง ๋ฑ)๋ฅผ ๋ก๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋
์ผ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ๋
์ผ์ด ๋ฒ์ญ์ ๋ก๋ํ๊ณ ์คํ์ธ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ์คํ์ธ์ด ๋ฒ์ญ์ ๋ก๋ํฉ๋๋ค.
์: ๊ตญ์ ์ ์ ์๊ฑฐ๋ ์น์ฌ์ดํธ
์ ์ธ๊ณ์ ์ ํ์ ํ๋งคํ๋ ์ ์ ์๊ฑฐ๋ ์น์ฌ์ดํธ๋ฅผ ์์ํด ๋ณด์ญ์์ค. ๊ตญ๊ฐ๋ง๋ค ํตํ, ์ธ์ด ๋ฐ ์ ํ ์นดํ๋ก๊ทธ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ตญ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ๋ ๋์ lazy loading์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋๋ง ์ฌ์ฉ์ ์์น์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค.
const CurrencyFormatter = React.lazy(() => import(`./CurrencyFormatter/${userCountry}`))
const ProductCatalog = React.lazy(() => import(`./ProductCatalog/${userCountry}`))
function ECommerceSite() {
const userCountry = getUserCountry(); // ์ฌ์ฉ์์ ๊ตญ๊ฐ๋ฅผ ๊ฒฐ์ ํ๋ ํจ์
return (
Loading content for your region...}>
);
}
๊ฒฐ๋ก
Lazy loading ๋ฐ ์ปดํฌ๋ํธ ์ฝ๋ ๋ถํ ์ React ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๊ธฐ์ ์
๋๋ค. ์ปดํฌ๋ํธ๋ฅผ ํ์ํ ๋๋ง ๋ก๋ํ๋ฉด ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ํฌ๊ฒ ์ค์ด๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ฉฐ SEO๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค. React์ ๊ธฐ๋ณธ ์ ๊ณต React.lazy() ๋ฐ <Suspense> ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ์์ lazy loading์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ๋ ๋น ๋ฅด๊ณ ์๋ต์ฑ์ด ๋ฐ์ด๋๊ณ ๋งค๋ ฅ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ์ญ์์ค.
lazy loading์ ๊ตฌํํ ๋๋ ํญ์ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ณ ๋ คํ์ญ์์ค. ์ ์ฉํ ํด๋ฐฑ UI๋ฅผ ์ ๊ณตํ๊ณ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ฑ๋ฅ์ ์ ์คํ๊ฒ ๋ถ์ํ์ฌ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ณ ์๋์ง ํ์ธํ์ญ์์ค. ๋ค์ํ ์ ๊ทผ ๋ฐฉ์์ ์คํํ๊ณ ํน์ ์๊ตฌ ์ฌํญ์ ๊ฐ์ฅ ์ ํฉํ ์๋ฃจ์
์ ์ฐพ๋ ๊ฒ์ ๋๋ ค์ํ์ง ๋ง์ญ์์ค.