# [[Code Splitting]] ## πŸ“Œ Brief Summary μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…(Code Splitting)은 μžλ°”μŠ€ν¬λ¦½νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ±°λŒ€ν•œ 단일 λ²ˆλ“€μ„ 더 μž‘μ€ 청크(chunk) λ‹¨μœ„λ‘œ λΆ„ν• ν•˜μ—¬ ν•„μš”ν•  λ•Œλ§Œ λΉ„λ™κΈ°μ μœΌλ‘œ λ‘œλ“œ(on-demand)ν•˜λ„λ‘ λ§Œλ“œλŠ” μ΅œμ ν™” κΈ°λ²•μž…λ‹ˆλ‹€ [1, 2]. 이λ₯Ό 톡해 초기 μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€ 크기λ₯Ό 50~100KB μˆ˜μ€€μœΌλ‘œ 쀄여 μ‚¬μš©μžκ°€ 의미 μžˆλŠ” μ½˜ν…μΈ λ₯Ό 더 빨리 λ³Ό 수 있게 ν•΄μ€λ‹ˆλ‹€ [3]. 결과적으둜 초기 λ‘œλ“œ μ‹œκ°„, TTFB(Time to First Byte), TTI(Time to Interactive)λ₯Ό λŒ€ν­ λ‹¨μΆ•ν•˜μ—¬ μ½”μ–΄ μ›Ή λ°”μ΄νƒˆ(Core Web Vitals) 및 검색 μ—”μ§„ μ΅œμ ν™”(SEO) μ„±λŠ₯을 크게 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€ [4, 5]. ## πŸ“– Core Content * **κΈ°λ³Έ μž‘λ™ 원리와 React API 적용:** μ΅œμ‹  React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” `React.lazy`와 `Suspense` APIλ₯Ό 톡해 μ†μ‰½κ²Œ μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…κ³Ό μ§€μ—° λ‘œλ”©(Lazy Loading)을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [4]. `React.lazy`λŠ” 동적 κ°€μ Έμ˜€κΈ°(dynamic import)λ₯Ό 톡해 μ»΄ν¬λ„ŒνŠΈλ₯Ό 일반적인 λ Œλ”λ§ λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν•˜κ²Œ ν•΄μ£Όλ©°, `Suspense`λŠ” ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈκ°€ λ‘œλ“œλ  λ•ŒκΉŒμ§€ λŒ€κΈ°ν•˜λŠ” λ™μ•ˆ μŠ€μΌˆλ ˆν†€ ν™”λ©΄μ΄λ‚˜ λ‘œλ”© μŠ€ν”Όλ„ˆμ™€ 같은 λŒ€μ²΄(fallback) UIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€ [4, 6]. * **라우트 및 μ»΄ν¬λ„ŒνŠΈ 기반 λΆ„ν•  (Route & Component-level Splitting):** κ°€μž₯ 효과적이고 일반적으둜 ꢌμž₯λ˜λŠ” λΆ„ν•  지점은 라우트(Route) λ‹¨μœ„μž…λ‹ˆλ‹€ [7]. μ‚¬μš©μžκ°€ νŠΉμ • νŽ˜μ΄μ§€λ‘œ 이동할 λ•Œλ§Œ ν•΄λ‹Ή 라우트의 μ½”λ“œλ₯Ό λ‘œλ“œν•¨μœΌλ‘œμ¨ 초기 λ²ˆλ“€ 크기λ₯Ό κΈ‰κ²©νžˆ 쀄일 수 있으며, React Router의 ν”„λ ˆμž„μ›Œν¬ λͺ¨λ“œμ—μ„œλŠ” 라우트 기반 뢄할이 기본적으둜 μžλ™ μ μš©λ©λ‹ˆλ‹€ [1, 8]. λ˜ν•œ, 차트, 에디터, νƒ­, λͺ¨λ‹¬ λ“± 초기 화면에 λ‹Ήμž₯ 보이지 μ•Šκ±°λ‚˜ μš©λŸ‰μ΄ 큰 UI μš”μ†Œμ— λŒ€ν•΄μ„œλŠ” μ»΄ν¬λ„ŒνŠΈ μˆ˜μ€€μ˜ 뢄할을 μΆ”κ°€λ‘œ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [7, 9]. * **μ„±λŠ₯ μ§€ν‘œ(Core Web Vitals)와 SEO에 λ―ΈμΉ˜λŠ” 영ν–₯:** λΆ„ν• λ˜μ§€ μ•Šμ€ 2MB μ΄μƒμ˜ κ±°λŒ€ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€μ€ λΈŒλΌμš°μ €μ˜ 메인 μŠ€λ ˆλ“œλ₯Ό 막아 INP(Interaction to Next Paint)λ₯Ό 높이고 LCP(Largest Contentful Paint)λ₯Ό μ§€μ—°μ‹œν‚΅λ‹ˆλ‹€ [5, 10]. μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…μ„ 적절히 κ΅¬μ„±ν•˜λ©΄ 메인 λ²ˆλ“€ 크기λ₯Ό 1.8MBμ—μ„œ 320KBκΉŒμ§€ μ€„μ΄λŠ” λ“±μ˜ μ΅œμ ν™”κ°€ κ°€λŠ₯ν•΄μ Έ, INP 점수λ₯Ό 100ms κ°€λŸ‰ ν–₯μƒμ‹œν‚€κ³  전체적인 νŽ˜μ΄μ§€ μƒν˜Έμž‘μš©μ„±κ³Ό SEO λž­ν‚Ήμ„ λ°©μ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [10, 11]. * **μ΅œμ ν™” λͺ¨λ²” 사둀 및 μ£Όμ˜μ‚¬ν•­:** μ›ΉνŒ© 맀직 주석(Webpack Magic Comments) 등을 μ‚¬μš©ν•œ 사전 페치(Prefetching)λ‚˜ 사전 λ‘œλ”©(Preloading)을 톡해 μ‚¬μš©μž κ²½ν—˜μ„ λ§€λ„λŸ½κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€ [12]. λ˜ν•œ, λ„€νŠΈμ›Œν¬ 였λ₯˜λ‚˜ 청크 λ‘œλ”© μ‹€νŒ¨ 상황을 μš°μ•„ν•˜κ²Œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μ—λŸ¬ λ°”μš΄λ”λ¦¬(Error Boundaries) κ΅¬ν˜„μ΄ ν•„μˆ˜μ μž…λ‹ˆλ‹€ [13]. λ‹€λ§Œ, μ§€λ‚˜μΉ˜κ²Œ μ„Έλ°€ν•œ λ‹¨μœ„λ‘œ κ³Όλ„ν•˜κ²Œ λΆ„ν• (Over-splitting)ν•˜λŠ” 것은 였히렀 λ„€νŠΈμ›Œν¬ μ˜€λ²„ν—€λ“œλ₯Ό μ¦κ°€μ‹œμΌœ μ„±λŠ₯을 μ €ν•˜μ‹œν‚€λ―€λ‘œ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€ [7, 8]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Lazy Loading]], [[Core Web Vitals]], [[Interaction to Next Paint (INP)]], [[Largest Contentful Paint (LCP)]], [[React Router]], [[Suspense]] - **Projects/Contexts:** [[Next.js]], [[React Applications]], [[E-commerce Optimization]] - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…μ€ 초기 λ‘œλ”© 속도와 μ›Ή μ„±λŠ₯ ν–₯상을 μœ„ν•΄ ν•„μˆ˜μ μΈ κΈ°λ²•μ΄μ§€λ§Œ, λ¬΄λΆ„λ³„ν•˜κ²Œ κ³Όλ„ν•œ λΆ„ν• (over-splitting)을 μ μš©ν•  경우 λΈŒλΌμš°μ €κ°€ λ„ˆλ¬΄ λ§Žμ€ 청크λ₯Ό λ‘œλ“œν•΄μ•Ό ν•˜λ―€λ‘œ 였히렀 λ„€νŠΈμ›Œν¬ μ˜€λ²„ν—€λ“œ(overhead)κ°€ 증가해 μ„±λŠ₯이 악화될 수 μžˆλ‹€λŠ” 점을 κ²½κ³ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [7, 8, 14]. --- *Last updated: 2026-04-26*