# [[Code Splitting and Lazy Loading]] ## ๐Ÿ“Œ Brief Summary **Code Splitting(์ฝ”๋“œ ๋ถ„ํ• )**๊ณผ **Lazy Loading(์ง€์—ฐ ๋กœ๋”ฉ)**์€ ๋ฐฉ๋Œ€ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค์„ ๋” ์ž‘์€ ์ฒญํฌ(chunk) ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์‹œ์ ์—๋งŒ ์˜จ๋””๋งจ๋“œ(on-demand) ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋กœ๋“œํ•˜๋Š” ํ”„๋ŸฐํŠธ์—”๋“œ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค[1-3]. ์ด ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ดˆ๊ธฐ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ํฌ๊ฒŒ ์ค„์—ฌ ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„๊ณผ ์‚ฌ์šฉ์ž ์ธ์ง€ ์„ฑ๋Šฅ์„ ํš๊ธฐ์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค[1, 4]. React ํ™˜๊ฒฝ์—์„œ๋Š” ์ฃผ๋กœ ๋™์  ์ž„ํฌํŠธ์™€ ๊ฒฐํ•ฉ๋œ `React.lazy()` ๋ฐ ``๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค[5, 6]. ## ๐Ÿ“– Core Content * **์ดˆ๊ธฐ ๋ฒˆ๋“ค ํฌ๊ธฐ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ์ฑ…:** ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋˜ ํ”„๋ŸฐํŠธ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ชจ๋“  ์•ฑ ์ฝ”๋“œ์™€ ์™ธ๋ถ€ ์ข…์†์„ฑ(dependencies)์„ ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ(๋ฒˆ๋“ค)๋กœ ํŒจํ‚ค์ง•ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ธด ๋‹ค์šด๋กœ๋“œ ์‹œ๊ฐ„, ๋ฌด๊ฑฐ์šด ํŒŒ์‹ฑ ๋ฐ ์ปดํŒŒ์ผ ์ž‘์—…, ๊ทธ๋ฆฌ๊ณ  Core Web Vitals(FCP, LCP, INP) ์ง€ํ‘œ์˜ ํ•˜๋ฝ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค[3, 7]. **์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…**์€ ์ด ๊ฑฐ๋Œ€ํ•œ ๋ฒˆ๋“ค์„ ๋ถ„ํ• ํ•˜์—ฌ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดˆ๊ธฐ ๊ตฌ๋™์— ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์ด๋Ÿฌํ•œ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค[3, 8]. * **์Šคํ”Œ๋ฆฌํŒ… ๋ฐ ์ง€์—ฐ ๋กœ๋”ฉ์˜ ์ ์šฉ ์ „๋žต:** * **๋ผ์šฐํŠธ ๊ธฐ๋ฐ˜ ์Šคํ”Œ๋ฆฌํŒ…(Route-level splitting):** ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ํŽ˜์ด์ง€ ๊ฒฝ๋กœ(Route)๋กœ ๋„ค๋น„๊ฒŒ์ด์…˜ํ•  ๋•Œ๋งŒ ํ•ด๋‹น ํ™”๋ฉด์˜ ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ฒŒ ํ•˜์—ฌ ์ดˆ๊ธฐ ๋กœ๋“œ ์†๋„๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค[2, 3, 9]. * **์ปดํฌ๋„ŒํŠธ ์ˆ˜์ค€ ์ง€์—ฐ ๋กœ๋”ฉ(Component-level lazy loading):** ์ฐจํŠธ, ์ง€๋„, ๋ฆฌ์น˜ ํ…์ŠคํŠธ ์—๋””ํ„ฐ์ฒ˜๋Ÿผ ๋ฌด๊ฒ๊ฑฐ๋‚˜, ๋ชจ๋‹ฌ ์ฐฝ ๋ฐ ๊ด€๋ฆฌ์ž ์„ค์ • ํŒจ๋„์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ UI ๋ธ”๋ก์„ ๋ Œ๋”๋ง์ด ํ•„์š”ํ•œ ์ˆœ๊ฐ„์—๋งŒ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค[5, 10]. * **React์—์„œ์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• (`React.lazy`์™€ `Suspense`):** React๋Š” ๋‚ด์žฅ ํ•จ์ˆ˜์ธ `React.lazy()`๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋™์ ์œผ๋กœ ์ž„ํฌํŠธ(`import()`)ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค[1, 5]. ์ด๋•Œ ๋ถ„ํ• ๋œ ์ฝ”๋“œ๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋˜๋Š” ๋™์•ˆ ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ๋‚˜ ์Šค์ผˆ๋ ˆํ†ค UI์™€ ๊ฐ™์€ ํด๋ฐฑ(fallback) ํ™”๋ฉด์€ `` ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค[6, 9]. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ์ ์šฉํ•˜๋ฉด ์•ฑ ๋ณต์žก๋„์— ๋”ฐ๋ผ ์ดˆ๊ธฐ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ตœ๋Œ€ 20~70%๊นŒ์ง€ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค[6]. * **์ด๋ฏธ์ง€ ์ง€์—ฐ ๋กœ๋”ฉ ์ตœ์ ํ™”:** ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด๋ฏธ์ง€ ์—ญ์‹œ ํŽ˜์ด์ง€ ์šฉ๋Ÿ‰์˜ ํฐ ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋กค ์•„๋ž˜์— ์œ„์น˜ํ•ด ๋‹น์žฅ ๋ณด์ด์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ํ•„์š” ์—†์ด ๋ธŒ๋ผ์šฐ์ € ๋„ค์ดํ‹ฐ๋ธŒ ์†์„ฑ์ธ `loading="lazy"`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ๋‹ค์šด๋กœ๋“œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค[11]. * **์ ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ (์•ˆํ‹ฐ ํŒจํ„ด):** ์ง€์—ฐ ๋กœ๋”ฉ์€ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ํ™”๋ฉด ์ตœ์ƒ๋‹จ์— ์žˆ์–ด ์Šคํฌ๋กค ์—†์ด ์ฆ‰์‹œ ๋ณด์—ฌ์•ผ ํ•˜๋Š” ํ•„์ˆ˜ ์˜์—ญ(above-the-fold) ์ปดํฌ๋„ŒํŠธ๋‚˜, ๋ Œ๋”๋ง ์†๋„๊ฐ€ ๋งค์šฐ ๋นจ๋ผ ์ฆ‰๊ฐ์ ์œผ๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•˜๋Š” ์š”์†Œ๋“ค์—๋Š” ์ ์šฉ์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค[10, 11]. ์ด๋“ค์— ์ ์šฉํ•˜๋ฉด ์˜คํžˆ๋ ค ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์„ ์ง€์—ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[React Performance Optimization]], [[Core Web Vitals]], [[Suspense]] - **Projects/Contexts:** [[Vite]], [[Next.js]] - **Contradictions/Notes:** ์ง€์—ฐ ๋กœ๋”ฉ์€ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•œ ํ•ต์‹ฌ ๋„๊ตฌ์ด์ง€๋งŒ, ํ™”๋ฉด ์ฒซ ๋ Œ๋”๋ง์— ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„(above-the-fold ์š”์†Œ ๋“ฑ)์— ๋‚จ์šฉํ•˜๋ฉด ๋ฐ˜๋Œ€๋กœ ๋ Œ๋”๋ง ์ง€์—ฐ์„ ์ดˆ๋ž˜ํ•˜๋ฏ€๋กœ ์ฃผ์˜ ๊นŠ๊ฒŒ ์ธก์ •ํ•˜๊ณ  ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค[10, 11]. --- *Last updated: 2026-04-26*