Files
2nd/00_Raw/Code Splitting.md
T

3.8 KiB

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.lazySuspense 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


Last updated: 2026-04-26