# [[Lazy Loading]] ## ๐Ÿ“Œ Brief Summary Lazy Loading์€ ๋ฆฌ์†Œ์Šค๋‚˜ ์ฝ”๋“œ ์ฒญํฌ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดˆ๊ธฐ ๊ตฌ๋™ ์‹œ ํ•œ ๋ฒˆ์— ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”๋กœ ํ•˜๋Š” ์‹œ์ ์— ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค [1, 2]. ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์ดˆ๊ธฐ JavaScript ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ตœ๋Œ€ 20~70%๊นŒ์ง€ ์ค„์—ฌ ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„์„ ํš๊ธฐ์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค [3]. ์ฃผ๋กœ ๊ฒฝ๋กœ(Route) ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ, ๋ฌด๊ฑฐ์šด UI ์œ„์ ฏ(์ฐจํŠธ ๋“ฑ), ๋ทฐํฌํŠธ ํ•˜๋‹จ์˜ ์ด๋ฏธ์ง€ ๋“ฑ์— ์ ์šฉ๋˜์–ด ์•ฑ์˜ ์ „๋ฐ˜์ ์ธ ๋ฐ˜์‘์„ฑ๊ณผ Core Web Vitals ์ง€ํ‘œ๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค [4, 5]. ## ๐Ÿ“– Core Content * **JavaScript ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…๊ณผ ๋™์  ์ž„ํฌํŠธ(Dynamic Imports)**: Lazy Loading์€ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜จ๋””๋งจ๋“œ(on-demand)๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๋” ์ž‘์€ ์ฒญํฌ(chunk)๋กœ ๋ถ„ํ• ํ•˜๋Š” ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…(Code Splitting) ๊ธฐ๋ฒ•์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค [2]. ๋™์  ์ž„ํฌํŠธ๋ฅผ ํ†ตํ•ด Vite๋‚˜ Webpack ๊ฐ™์€ ๋นŒ๋“œ ํˆด์ด ๋ Œ๋”๋ง์— ๋‹น์žฅ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ๋ฅผ ๋ฉ”์ธ ๋ฒˆ๋“ค์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ ํŒŒ์ผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค [1, 6, 7]. * **React ํ™˜๊ฒฝ์—์„œ์˜ ๊ตฌํ˜„ (`React.lazy` ๋ฐ `Suspense`)**: React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” `React.lazy()` ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ์˜ ์ง€์—ฐ ๋กœ๋”ฉ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค [8]. ๋ชจ๋“ˆ์ด ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋‹ค์šด๋กœ๋“œ๋˜๋Š” ๋™์•ˆ ํ™”๋ฉด์ด ๋ฉˆ์ถ”๊ฑฐ๋‚˜ ๋น„์–ด ๋ณด์ด์ง€ ์•Š๋„๋ก, ``๋ฅผ ๊ฐ์‹ธ์„œ ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ์™€ ๊ฐ™์€ ๋Œ€์ฒด UI(Fallback UI)๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค [7, 8]. * **๋ผ์šฐํŠธ ๋ ˆ๋ฒจ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ ˆ๋ฒจ ์ง€์—ฐ ๋กœ๋”ฉ**: ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹์€ ๋ผ์šฐํŠธ ๋ ˆ๋ฒจ์—์„œ ์ ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ํŽ˜์ด์ง€๋กœ ๋„ค๋น„๊ฒŒ์ด์…˜ํ•  ๋•Œ๋งŒ ํ•ด๋‹น ํŽ˜์ด์ง€์˜ JavaScript ์ฒญํฌ๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค [2, 7]. ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ๋Š” ์„œ๋“œํŒŒํ‹ฐ ํ†ตํ•ฉ ๊ธฐ๋Šฅ(๋น„๋””์˜ค ํ”Œ๋ ˆ์ด์–ด, PDF ๋ทฐ์–ด ๋“ฑ)์ด๋‚˜ ์ฐจํŠธ, ๋ฆฌ์น˜ ํ…์ŠคํŠธ ์—๋””ํ„ฐ ๊ฐ™์ด ๋ฌด๊ฑฐ์šด UI ๋ธ”๋ก์— ์ ์šฉํ•˜์—ฌ ๋ฉ”์ธ ๋ฒˆ๋“ค์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค [5, 6]. * **์ด๋ฏธ์ง€(Media) ์ตœ์ ํ™”**: JavaScript ์ฝ”๋“œ๋ฟ ์•„๋‹ˆ๋ผ ๋ฏธ๋””์–ด ๋ฆฌ์†Œ์Šค์—๋„ Lazy Loading์ด ๋„๋ฆฌ ์“ฐ์ž…๋‹ˆ๋‹ค [4]. HTML `` ํƒœ๊ทธ์— ๋„ค์ดํ‹ฐ๋ธŒ ์†์„ฑ์ธ `loading="lazy"`๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด, ์Šคํฌ๋กค์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ๋ทฐํฌํŠธ์— ๋„๋‹ฌํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค [4]. ## โš–๏ธ Trade-offs & Caveats * **์ดˆ๊ธฐ ๋ทฐํฌํŠธ(Above-the-fold) ์ฝ˜ํ…์ธ  ์ ์šฉ ๊ธˆ์ง€**: ์ง€์—ฐ ๋กœ๋”ฉ์€ ์Šคํฌ๋กค ์—†์ด ์ฒ˜์Œ ํ™”๋ฉด์— ๋ฐ”๋กœ ๋ณด์—ฌ์•ผ ํ•˜๋Š” ํ•ต์‹ฌ ์ฝ˜ํ…์ธ (Above-the-fold)๋‚˜ ์ฆ‰์‹œ ์ƒํ˜ธ์ž‘์šฉํ•ด์•ผ ํ•˜๋Š” ๋ Œ๋”๋ง์ด ๋น ๋ฅธ ์š”์†Œ์—๋Š” ์ ˆ๋Œ€ ์ ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค [5]. ์ด๋ฅผ ์ ์šฉํ•  ๊ฒฝ์šฐ ์ดˆ๊ธฐ ํŽ˜์ธํŠธ ์‹œ๊ฐ„์ด ๋А๋ ค์ง€๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์‹ฌ๊ฐํ•˜๊ฒŒ ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค [5, 9]. * **์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ์‹œ ์ผ์‹œ์  ์ง€์—ฐ ๋ฐœ์ƒ**: ์ง€์—ฐ ๋กœ๋”ฉ๋œ ๊ธฐ๋Šฅ์ด๋‚˜ ํŽ˜์ด์ง€์— ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ์ ‘๊ทผํ•  ๋•Œ, ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•„์š”ํ•œ ์Šคํฌ๋ฆฝํŠธ ์ฒญํฌ๋ฅผ ๊ทธ์ œ์•ผ ๋„คํŠธ์›Œํฌ๋กœ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค [7, 8, 10]. ์ด๋กœ ์ธํ•ด ์•ฝ๊ฐ„์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ``๋ฅผ ํ†ตํ•œ ํด๋ฐฑ ์ƒํƒœ๋ฅผ ์„ธ์‹ฌํ•˜๊ฒŒ ๋””์ž์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [8, 11]. * **๊ณผ๋„ํ•œ ํŒŒํŽธํ™”(Over-fragmentation) ์ฃผ์˜**: ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ๊ฐ€๋ฒผ์šด ๊ธฐ๋Šฅ๊นŒ์ง€ ๋ชจ๋‘ ์ง€์—ฐ ๋กœ๋”ฉ์œผ๋กœ ๋ถ„๋ฆฌํ•  ๊ฒฝ์šฐ, ์˜คํžˆ๋ ค ๋ธŒ๋ผ์šฐ์ €์˜ ๋„คํŠธ์›Œํฌ ์š”์ฒญ ํšŸ์ˆ˜๊ฐ€ ๊ธ‰์ฆํ•˜๊ณ  ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๋กœ๋”ฉ ์ƒํƒœ(`Suspense`)๊ฐ€ ๋งŽ์•„์ ธ ์„ฑ๋Šฅ ๋ฐ ๊ฐœ๋ฐœ ํšจ์œจ์„ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 12]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] - [[Code Splitting]] - ์—ฐ๊ฒฐ ์ด์œ : Lazy Loading์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‹จ์ผ JavaScript ๋ฒˆ๋“ค์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ์ฒญํฌ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๋Š” ๊ทผ๋ณธ์ ์ธ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [2, 13]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ชจ๋˜ ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ ํˆด(Vite, Webpack)์ด ๋Ÿฐํƒ€์ž„ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ถ„ํ• ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 7]. - [[Dynamic Imports]] - ์—ฐ๊ฒฐ ์ด์œ : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ์„ ํŒŒ์ผ์˜ ์ตœ์ƒ๋‹จ์—์„œ ์ •์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ , ์‹คํ–‰ ์ค‘์— ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด `import()` ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [1, 7]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ผ์šฐํŠธ ์ „ํ™˜์ด๋‚˜ ํŠน์ • ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ์ ์— ํ•„์š”ํ•œ ์ฝ”๋“œ๋งŒ ๋„คํŠธ์›Œํฌ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7]. #### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] - [[React Suspense]] - ์—ฐ๊ฒฐ ์ด์œ : `React.lazy()`๋ฅผ ์ด์šฉํ•ด ์ง€์—ฐ ๋กœ๋”ฉ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, ์ฒญํฌ๊ฐ€ ๋กœ๋“œ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋ Œ๋”๋ง์„ ์ผ์‹œ ์ค‘์ง€ํ•˜๊ณ  Fallback UI๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ ค์ฃผ๋Š” ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค [7, 8]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋น„๋™๊ธฐ UI ๋กœ๋”ฉ ์‹œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์„ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ Œ๋”๋ง ์ œ์–ด ๋ฐ ๋กœ๋”ฉ ์ƒํƒœ ์„ค๊ณ„ ํŒจํ„ด์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 11]. - [[Vite manualChunks]] - ์—ฐ๊ฒฐ ์ด์œ : Vite๋ฅผ ํ†ตํ•ด ๋นŒ๋“œํ•  ๋•Œ, ๋ณ€๊ฒฝ์ด ์žฆ์ง€ ์•Š์€ ๋ฌด๊ฑฐ์šด ๋ฒค๋” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(React ์ฝ”์–ด ๋“ฑ)๋ฅผ Lazy Loading์˜ ์ฒญํฌ ๋ถ„ํ•  ์ „๋žต๊ณผ ๊ฒฐํ•ฉํ•ด ๋ณ„๋„ ํŒŒ์ผ๋กœ ๋…๋ฆฝ์‹œํ‚ค๋Š” ํ™˜๊ฒฝ ์„ค์ •์ž…๋‹ˆ๋‹ค [7, 14]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ธŒ๋ผ์šฐ์ € ์บ์‹ฑ ์ „๋žต์„ ๊ทน๋Œ€ํ™”ํ•˜๊ณ , ์ดˆ๊ธฐ ๋ฒˆ๋“ค ์šฉ๋Ÿ‰ ๊ฒฝ๊ณ ("Large Chunks") ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฒˆ๋“ค๋Ÿฌ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 15]. ### Deeper Research Questions - React 18์˜ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง(Concurrent Rendering) ๊ธฐ๋Šฅ์ธ `useTransition` ๋“ฑ์€ ์ง€์—ฐ ๋กœ๋”ฉ ์‹œ ๋ฐœ์ƒํ•˜๋Š” UI ๋ฉˆ์ถค ํ˜„์ƒ์„ ์–ด๋–ป๊ฒŒ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [16, 17] - ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ €ํ•˜๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ์ง€์—ฐ ๋กœ๋”ฉ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ•˜๊ธฐ ์ง์ „์— ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜ค๋Š” Prefetching ์ „๋žต์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”๊ฐ€? [18, 19] - Next.js์˜ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ ์ง€์—ฐ ๋กœ๋”ฉ๊ณผ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ(RSC) ์•„ํ‚คํ…์ฒ˜๋Š” ์ดˆ๊ธฐ ๋ฒˆ๋“ค ์ตœ์ ํ™” ์ธก๋ฉด์—์„œ ์–ด๋–ค ์ฐจ์ด์ ๊ณผ ์‹œ๋„ˆ์ง€๋ฅผ ๊ฐ€์ง€๋Š”๊ฐ€? [5, 20, 21] - ๋ฌด๊ฑฐ์šด UI ๋ธ”๋ก์„ ์ง€์—ฐ ๋กœ๋”ฉํ•  ๋•Œ, `rollup-plugin-visualizer`์™€ ๊ฐ™์€ ๋ฒˆ๋“ค ๋ถ„์„ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์ง€์—ฐ ๋กœ๋”ฉ ๋Œ€์ƒ์„ ์–ด๋–ป๊ฒŒ ํšจ๊ณผ์ ์œผ๋กœ ์‹๋ณ„ํ•˜๊ณ  ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [10, 12] - ๋„ค์ดํ‹ฐ๋ธŒ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ์ธ `loading="lazy"` ์†์„ฑ๊ณผ JavaScript ๊ธฐ๋ฐ˜์˜ Intersection Observer API๋ฅผ ํ™œ์šฉํ•œ ๋ฏธ๋””์–ด ์ง€์—ฐ ๋กœ๋”ฉ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ํ•œ๊ณ„์ ๊ณผ Trade-off๋Š” ๋ฌด์—‡์ธ๊ฐ€? [4] ### Practical Application Contexts - **Implementation:** React ์ฝ”๋“œ ์ƒ๋‹จ์˜ ๋ฌด๊ฑฐ์šด ์™ธ๋ถ€ ์ปดํฌ๋„ŒํŠธ(์˜ˆ: ์—๋””ํ„ฐ, ์ฐจํŠธ ๋“ฑ) import ๋ฌธ์„ ์ง€์šฐ๊ณ , `const Dashboard = React.lazy(() => import('./Dashboard'));`์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•œ ํ›„ ๋ Œ๋”๋ง ์˜์—ญ์„ `}>`๋กœ ๊ฐ์Œ‰๋‹ˆ๋‹ค [1, 6-8]. - **System Design:** ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์šฐํŒ… ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์‹œ๋ถ€ํ„ฐ, ํ•„์ˆ˜ ์ดˆ๊ธฐ ์ง„์ž… ํ™”๋ฉด(Above-the-fold)์€ ์ฆ‰์‹œ ๋กœ๋“œํ•˜๊ณ , ๊ด€๋ฆฌ์ž ํŒจ๋„์ด๋‚˜ ์ž˜ ์“ฐ์ด์ง€ ์•Š๋Š” ๋ผ์šฐํŠธ๋Š” ๋ถ„๋ฆฌํ•˜์—ฌ Code Splitting๋˜๋„๋ก ์‹œ์Šคํ…œ์˜ ๋ฒˆ๋“ค๋ง ์ „๋žต์„ ๊ตฌ์ƒํ•ฉ๋‹ˆ๋‹ค [5, 12, 14]. - **Operation / Maintenance:** ์šด์˜ ์ค‘์ธ ์„œ๋น„์Šค๊ฐ€ ๋ฌด๊ฑฐ์›Œ์ง€๊ฑฐ๋‚˜ Vite ๋นŒ๋“œ ์‹œ "500 kB ์ดˆ๊ณผ ์ฒญํฌ" ๊ฒฝ๊ณ ๊ฐ€ ๋œฐ ๊ฒฝ์šฐ, ๋ฒˆ๋“ค ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฉ”์ธ ๋ฒˆ๋“ค์—์„œ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋ฌด๊ฑฐ์šด ๋ฒค๋”๋‚˜ ํŠน์ • ๋ผ์šฐํŠธ๋ฅผ ์‹๋ณ„ํ•ด ์ ์ง„์ ์œผ๋กœ Lazy Loading์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค [10, 12, 15]. - **Learning Path:** React ๊ธฐ์ดˆ ๋ Œ๋”๋ง ์‚ฌ์ดํด ํ•™์Šต โž” JavaScript ๋ชจ๋“ˆ ๋ฐ ๋ฒˆ๋“ค๋Ÿฌ ๊ตฌ์กฐ ์ดํ•ด โž” `React.lazy`์™€ `Suspense`๋ฅผ ํ†ตํ•œ ๋ผ์šฐํŠธ ์Šคํ”Œ๋ฆฌํŒ… ์ ์šฉ โž” Chrome ์„ฑ๋Šฅ ํƒญ๊ณผ Web Vitals๋กœ ์‹ค์ œ ๋กœ๋“œ ์†๋„ ์ธก์ • ๋ฐ ๊ฒ€์ฆ [13, 22, 23]. - **My Project Relevance:** ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง์— ๋”ฐ๋ผ ํ•„์—ฐ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” JavaScript ํŽ˜์ด๋กœ๋“œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , FCP(First Contentful Paint)์™€ TTI(Time to Interactive) ๋“ฑ ํ•ต์‹ฌ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ๋ฐฉ์–ดํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜์ ์ธ ๋ Œ๋”๋ง ์ตœ์ ํ™” ์ „๋žต์ž…๋‹ˆ๋‹ค [3, 8]. ### Adjacent Topics - [[Core Web Vitals]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ง€์—ฐ ๋กœ๋”ฉ์ด ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO) ๋ฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ง€ํ‘œ์ธ FCP, LCP(Largest Contentful Paint), INP(Interaction to Next Paint) ์ˆ˜์น˜๋ฅผ ์‹ค์ œ๋กœ ์–ผ๋งˆ๋‚˜ ๊ฐœ์„ ํ•˜๋Š”์ง€ ์ธก์ • ๋ฐ ๋ถ„์„ํ•˜๋Š” ๊ด€์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 23, 24]. - [[Server Components (RSC)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ํ˜„๋Œ€์  ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ, ํด๋ผ์ด์–ธํŠธ์—์„œ ์‹คํ–‰๋  ์ฝ”๋“œ๋ฅผ ์•„์˜ˆ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ•˜๊ณ  HTML๋กœ๋งŒ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹๊ณผ Lazy Loading๊ณผ์˜ ์—ญํ• ์„ ๋น„๊ต/๋Œ€์กฐํ•ฉ๋‹ˆ๋‹ค [20, 21]. --- *Last updated: 2026-04-30*