Dynamic import๋ฅผ ์ด์ฉํ๋ฉด ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ ์ฌ ์ ์์ต๋๋ค.
Dynamic import๋ฅผ ์ด์ฉํ๋ฉด ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ ์ฌ ์ ์์ต๋๋ค.
const loader = async () => import('[path]');
loader().then((data) = console.log(data));์๋ฐ์คํฌ๋ฆฝํธ ES2020์์๋ ์์ฝ๊ฒ Dynamic import๋ฅผ ์ง์ํ๊ณ ์์ต๋๋ค.
์ฝ๋์์ ์ ์ํด์ผ ํ ์ ์ async/await์ ์ด์ฉํด import ๋ฌธ์ ์์ฑํ๊ณ ์๋ค๋ ์ ์
๋๋ค.
๋ฆฌ์กํธ์์ lazy ํจ์์ Dynamic import ๋ฌธ๋ฒ์ ์ด์ฉํด์ ์ปดํฌ๋ํธ๋ฅผ ๋ณ๋์ ์ฒญํฌํ์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
const LazyComponent = lazy(() => import('./LazyComponent'));
const WrapComponent = () => {
return(
<Suspense fallback={<div>Loading...</div>}>
<LazyComponent />
</Suspense>
)
}Dynamic import ํฌ์คํ ์ด๋ฏ๋ก Suspense์ ๋ํด ๋ณ๋๋ก ๊ธฐ์ ํ์ง ์์ต๋๋ค.
LazyComponent๊ฐ ๋ก๋ ๋์ง ์์์ผ๋ฏ๋ก fallback ui๊ฐ ํ์ถ๋จDynamic import๋ก ์ธํด ๋ณ๋์ ์ฒญํฌํ์ผ์ ์์ฒญ(http)ํ๊ณ ์๋ต ๋ฐ์LazyComponent๋ฅผ ๋ ๋๋งํจNext.js์์๋ lazy ํจ์์ Susepnse๋ฅผ ์ด์ฉํด Dynamic import๋ฅผ ์ฌ์ฉ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ฒ ์ปดํฌ๋ํธ์์๋ ๊ธฐ์กด์ ๋ฐฉ์๋๋ก ์ ์ฉ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ ์ด์ ๋ lazy ํจ์๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์๋ง ์ฌ์ฉ ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋ฒ ์ปดํฌ๋ํธ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ํ๋ฒ ๊ฐ์ธ์ ์ฌ์ฉํด์ผํฉ๋๋ค.
// ClientLazyComponent.tsx
'use client';
const LazyComponent = lazy(() => import('./LazyComponent'));
export const ClientComponent = () => {
return(
<Suspense fallback={<div>Loading...</div>}>
<LazyComponent />
</Suspense>
)
}
// ServerComponent.tsx
export default function ServerPage() {
return (
<div>
<ClientComponent />
</div>
)
}์ด์ฒ๋ผ ์๋ฒ ์ปดํฌ๋ํธ์์ Dynamic import๋ฅผ ์ง์ ์ ์ธ ํ ์ ์๋ค๋ ๋ถํธํจ์ด ์์ด, Next.js๋ dynamic ํจ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
const LazyComponent = dynamic(() => import('[path]'), {
ssr: true,
loading: () => <div>Loading...</div>
})
export default function ServerPage() {
return (
<LazyComponent />
)
}์ด ํจ์์ ํน์ง์ ์๋ฒ/ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์ ๋ชจ๋ ์ฌ์ฉ ํ ์ ์์ผ๋ฉฐ ๋ณ๋์ Suspense ์กฐ์ฐจ ์ ์ธ ํ ํ์๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค.
๋๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก Dynamic import๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ๋ค๋ฉด ์ด๋ค ๊ฒ์ ์ ํํด์ผ ํ ๊น์?
ssr ์ต์
์ ํตํด ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ฌ๋ถ ์ ์ด ๊ฐ๋ฅSuspense ์์ด๋ loading UI ํ์ ๊ฐ๋ฅlazy ํจ์๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ค ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ์ง ๋ณ๋์ ์ฒญํฌ ํ์ผ์ ์์ฒญํ๋ ๋ฐฉ์์ผ๋ก ๋์๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ SSR์ ์ ์ธํ ์ ์๋์ง ์ฌ๋ถ์
๋๋ค. lazy ํจ์๋ฅผ ํตํด 'Dynamic importํ๊ฑฐ๋, 'Suspense๋ก ๊ฐ์ธ์ ๋ก๋ฉ์ ํ์ถํ๋ค๊ณ ํด๋ ์ต์์ ์ปดํฌ๋ํธ๊ฐ ์๋ฒ ์ปดํฌ๋ํธ์ธ ๊ฒฝ์ฐ SSR์ ํฌํจ๋ฉ๋๋ค.
๊ทธ๋์ SSR์ ์ ์ธํ๊ณ ์ถ๋ค๋ฉด dynamic ํจ์๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค. SSR์์ ์ ์ธ ํจ์ ์ด๊ธฐ HTML์ ๋น์๋ฆฌ๋ก ํ์ํ๊ณ ํด๋ผ์ด์ธํธ์์ ์จ์ ํ ๋์ฒดํจ์ ์๋ฏธํฉ๋๋ค.