# [[Rollup|Rollup]] ## πŸ“Œ Brief Summary Rollup은 2025λ…„ κΈ°μ€€ μ΅œμ‹  ν”„λ‘ νŠΈμ—”λ“œ λΉŒλ“œ 도ꡬ인 Vite의 ν”„λ‘œλ•μ…˜ λΉŒλ“œλ₯Ό λ°±κ·ΈλΌμš΄λ“œμ—μ„œ λ‹΄λ‹Ήν•˜λŠ” λͺ¨λ“ˆ λ²ˆλ“€λŸ¬μž…λ‹ˆλ‹€ [1]. 개발 λ‹¨κ³„μ—μ„œλŠ” λ„€μ΄ν‹°λΈŒ ES λͺ¨λ“ˆ(ESM)을 μ‚¬μš©ν•˜λŠ” Viteκ°€ μ‹€μ œ 배포 μ‹œμ μ—λŠ” Rollup으둜 μ „ν™˜ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλ₯Ό λ³‘ν•©ν•˜κ³  μ΅œμ ν™”ν•©λ‹ˆλ‹€ [1, 2]. μžλ™ μ½”λ“œ λΆ„ν• (Code Splitting)κ³Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ½”λ“œλ₯Ό μ œκ±°ν•˜λŠ” 트리 쉐이킹(Tree-shaking) κΈ°λŠ₯을 톡해 맀우 μ΅œμ ν™”λœ μ΅œμ’… 에셋을 μƒμ„±ν•˜λŠ” 것이 핡심 μ—­ν• μž…λ‹ˆλ‹€ [1]. ## πŸ“– Core λŒ€Content * **Viteμ™€μ˜ ν•˜μ΄λΈŒλ¦¬λ“œ μ•„ν‚€ν…μ²˜:** ViteλŠ” 둜컬 개발 μ‹œμ—λŠ” λ²ˆλ“€λ§ 없이 λ„€μ΄ν‹°λΈŒ ESM으둜 μ½”λ“œλ₯Ό μ œκ³΅ν•˜μ—¬ κ·Ήλ„λ‘œ λΉ λ₯Έ μ‹œμž‘κ³Ό HMR(Hot Module Replacement)을 μ§€μ›ν•˜μ§€λ§Œ, ν”„λ‘œλ•μ…˜ 배포 μ‹œμ—λŠ” Rollup을 μ‚¬μš©ν•˜μ—¬ μ΅œμ ν™”λœ λ²ˆλ“€(Bundled build)을 μƒμ„±ν•˜λŠ” ν•˜μ΄λΈŒλ¦¬λ“œ 방식을 μ·¨ν•©λ‹ˆλ‹€ [1]. * **λ²ˆλ“€ μ΅œμ ν™” 및 트리 쉐이킹 (Tree-shaking):** Rollup은 ν”„λ‘œλ•μ…˜ λΉŒλ“œ μ‹œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄μ—μ„œ μ‚¬μš©λ˜μ§€ μ•ŠλŠ” μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ 제거(Tree-shaking)ν•˜κ³  효율적으둜 μ½”λ“œλ₯Ό λΆ„ν• ν•˜μ—¬ μ΅œμ ν™”λœ 에셋을 μ œκ³΅ν•©λ‹ˆλ‹€ [1]. * **청크 μˆ˜λ™ μ œμ–΄ (`manualChunks`):** κΈ°λ³Έ μ„€μ • μƒνƒœμ—μ„œ Rollup은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ™€ `node_modules`의 λͺ¨λ“  쒅속성을 단일 파일(`index.js`)둜 λ¬Άμ–΄ κ±°λŒ€ν•œ λ²ˆλ“€μ„ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€ [3]. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œλŠ” Rollup μ˜΅μ…˜ 쀑 `manualChunks`λ₯Ό μ„Έλ°€ν•˜κ²Œ μ„€μ •ν•˜μ—¬, 자주 λ³€κ²½λ˜μ§€ μ•ŠλŠ” 무거운 벀더 라이브러리(React μ½”μ–΄, Recharts, Lodash, μ•„μ΄μ½˜ λ“±)λ₯Ό λ³„λ„μ˜ 청크 파일둜 λΆ„λ¦¬ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [4-6]. * **μΊμ‹œ νš¨μœ¨μ„± κ°œμ„ :** `manualChunks`λ₯Ό 톡해 벀더 라이브러리λ₯Ό λΆ„λ¦¬ν•˜λ©΄, ν•΄λ‹Ή λΌμ΄λΈŒλŸ¬λ¦¬λŠ” 자주 λ³€κ²½λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ—¬λŸ¬ 번 λ°°ν¬ν•˜λ”λΌλ„ λΈŒλΌμš°μ €κ°€ 이λ₯Ό μΊμ‹œν•˜μ—¬ μž¬μ‚¬μš©ν•  수 μžˆμœΌλ―€λ‘œ 초기 λ‘œλ“œ μ„±λŠ₯이 크게 ν–₯μƒλ©λ‹ˆλ‹€ [5-7]. ## βš–οΈ Trade-offs & Caveats * **초기 μ„€μ • λΆ€μ‘± μ‹œ λŒ€μš©λŸ‰ λ²ˆλ“€ λ°œμƒ:** κΈ°λ³Έ μ„€μ •μœΌλ‘œ λ‘˜ 경우 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λͺ¨λ“  쒅속성이 ν•˜λ‚˜μ˜ νŒŒμΌμ— Eager Import λ˜μ–΄ 결합될 수 μžˆμŠ΅λ‹ˆλ‹€ [3]. μ΄λŠ” λ―Έλ‹ˆνŒŒμ΄(Minification) 후에도 500kBλ₯Ό μ΄ˆκ³Όν•˜λŠ” λŒ€κ·œλͺ¨ 청크(Large Chunks)λ₯Ό μƒμ„±ν•˜μ—¬, λ‹€μš΄λ‘œλ“œ μ‹œκ°„μ„ μ§€μ—°μ‹œν‚€κ³  저사양 κΈ°κΈ°μ—μ„œ νŒŒμ‹± 및 μ»΄νŒŒμΌμ— 무리λ₯Ό 쀄 수 μžˆμŠ΅λ‹ˆλ‹€ [3, 8, 9]. * **μΊμ‹œ λ¬΄νš¨ν™”(Cache Invalidation) 문제:** 단일 κ±°λŒ€ λ²ˆλ“€λ‘œ λΉŒλ“œν•  경우 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μž‘μ€ μ½”λ“œ ν•˜λ‚˜λ§Œ μˆ˜μ •ν•˜λ”λΌλ„ 전체 λ²ˆλ“€μ΄ μƒˆλ‘œ ν•΄μ‹œ(Hash)λ˜μ–΄ μ‚¬μš©μžλŠ” λͺ¨λ“  JavaScript νŒŒμΌμ„ λ‹€μ‹œ λ‹€μš΄λ‘œλ“œν•΄μ•Ό ν•˜λŠ” λΉ„νš¨μœ¨μ„±μ΄ λ°œμƒν•©λ‹ˆλ‹€ [9]. 이λ₯Ό λ°©μ§€ν•˜λ €λ©΄ `manualChunks` μ„€μ •κ³Ό `React.lazy`λ₯Ό κ²°ν•©ν•œ 라우트 기반 μ½”λ“œ λΆ„ν•  λ“± 좔가적인 μ΅œμ ν™” μž‘μ—…μ΄ κ°•μ œλ©λ‹ˆλ‹€ [3, 6]. ## πŸ”— Knowledge Connections ### Related Concepts #### [μ•„ν‚€ν…μ²˜/기반 기술] - Vite - μ—°κ²° 이유: Rollup은 Vite의 μ•„ν‚€ν…μ²˜ λ‚΄μ—μ„œ ν”„λ‘œλ•μ…˜ 배포 μ‹œ μ΅œμ ν™”λœ λΉŒλ“œλ₯Ό μˆ˜ν–‰ν•˜λŠ” λ‚΄λΆ€ μ—”μ§„μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€ [1]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 개발 λͺ¨λ“œ(ESM)와 배포 λͺ¨λ“œ(Rollup)λ₯Ό λ‹€λ₯΄κ²Œ κ°€μ Έκ°€λŠ” Vite의 ν•˜μ΄λΈŒλ¦¬λ“œ λ²ˆλ“€λ§ μ•„ν‚€ν…μ²˜ μ „λž΅μ„ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [1, 2]. - [[Tree Shaking (ᄇα…₯ᆫ들 크가 α„Žα…¬α„Œα…₯ᆨᄒα…ͺ)|Tree-shaking]] - μ—°κ²° 이유: Rollup이 배포용 μ½”λ“œλ₯Ό μ΅œμ ν™”ν•  λ•Œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ½”λ“œλ₯Ό λœμ–΄λ‚΄λŠ” 핡심 λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€ [1]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: ES λͺ¨λ“ˆ 기반 라이브러리 μ‚¬μš©μ΄ μ™œ μ΅œμ’… λ²ˆλ“€ μ‚¬μ΄μ¦ˆ μ΅œμ ν™”μ— ν•„μˆ˜μ μΈμ§€ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [10]. #### [κ΅¬ν˜„/ν™œμš© 도ꡬ] - manualChunks - μ—°κ²° 이유: Rollup을 μ‚¬μš©ν•˜μ—¬ κ±°λŒ€ν•œ 메인 λ²ˆλ“€μ„ μ„ΈλΆ„ν™”λœ 벀더 청크(Vendor chunk)둜 μͺΌκ°€ λ•Œ μ‚¬μš©λ˜λŠ” 핡심 μ„€μ •μž…λ‹ˆλ‹€ [4-6]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λΈŒλΌμš°μ € 캐싱을 κ·ΉλŒ€ν™”ν•˜κΈ° μœ„ν•΄ μ½”λ“œλ₯Ό 성격(λ³€κ²½ λΉˆλ„)에 따라 λΆ„λ¦¬ν•˜λŠ” μ΅œμ ν™” μ „λž΅μ„ 배울 수 μžˆμŠ΅λ‹ˆλ‹€ [6, 7]. - [[Code Splitting|Code Splitting]] - μ—°κ²° 이유: Rollup의 κΈ°λŠ₯κ³Ό React의 μ§€μ—° λ‘œλ”©(`React.lazy`)을 κ²°ν•©ν•˜μ—¬ κ΅¬ν˜„λ˜λŠ” μ„±λŠ₯ μ΅œμ ν™” κΈ°λ²•μž…λ‹ˆλ‹€ [3, 11]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 초기 νŽ˜μ΄λ‘œλ“œ(Payload)λ₯Ό 쀄이고 Core Web Vitalsλ₯Ό κ°œμ„ ν•˜λŠ” λŸ°νƒ€μž„ μ΅œμ ν™” 방법을 ν•™μŠ΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [9, 12]. ### Deeper Research Questions - ViteλŠ” μ™œ 개발 ν™˜κ²½μ—μ„œλŠ” Rollup을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  λ„€μ΄ν‹°λΈŒ ESM을 μ‚¬μš©ν•˜λ©°, ν”„λ‘œλ•μ…˜ λΉŒλ“œμ—μ„œλ§Œ Rollup을 λ„μž…ν•˜λŠ” μ•„ν‚€ν…μ²˜λ₯Ό μ„ νƒν–ˆλŠ”κ°€? - Rollup의 Tree-shaking λ©”μ»€λ‹ˆμ¦˜μ€ λΉŒλ“œ μ‹œ μ–΄λ–€ λ°©μ‹μœΌλ‘œ λ°λ“œ μ½”λ“œ(Dead code)λ₯Ό μ‹λ³„ν•˜κ³  μ΅œμ’… λ²ˆλ“€μ—μ„œ μ œμ™Έν•˜λŠ”κ°€? - `manualChunks`λ₯Ό μ‚¬μš©ν•˜μ—¬ 벀더(Vendor) νŒŒμΌμ„ λΆ„ν• ν•  λ•Œ λ°œμƒν•˜λŠ” λͺ¨λ“ˆ κ°„ 쀑볡 포함 문제λ₯Ό λ°©μ§€ν•˜λŠ” μ„€μ • 방법은 무엇인가? - Rollup이 μƒμ„±ν•œ λ²ˆλ“€ 크기λ₯Ό μ‹œκ°μ μœΌλ‘œ λΆ„μ„ν•˜κΈ° μœ„ν•΄ `rollup-plugin-visualizer`κ°€ μ œκ³΅ν•˜λŠ” λ°μ΄ν„°λŠ” μ‹€μ œ μ„±λŠ₯ κ°œμ„ μ— μ–΄λ–»κ²Œ ν™œμš©λ˜λŠ”κ°€? - Rollup의 λΉŒλ“œ μ΅œμ ν™”κ°€ FCP, LCP, INP λ“± Core Web Vitals μ§€ν‘œ ν–₯상에 λ―ΈμΉ˜λŠ” ꡬ체적인 μΈκ³Όκ΄€κ³„λŠ” 무엇인가? ### Practical Application Contexts - **Implementation:** `vite.config.js` 내뢀에 `build.rollupOptions.output.manualChunks`λ₯Ό κ΅¬μ„±ν•˜μ—¬ `react`, `react-dom` λ“±μ˜ 라이브러리λ₯Ό λ³„λ„μ˜ 파일둜 κ°•μ œ λΆ„λ¦¬ν•©λ‹ˆλ‹€ [4, 6]. - **System Design:** ν”„λ‘ νŠΈμ—”λ“œ ν”„λ‘œλ•μ…˜ μ‹œμŠ€ν…œ 섀계 μ‹œ, 자주 λ³€ν•˜μ§€ μ•ŠλŠ” μ„œλ“œνŒŒν‹° λΌμ΄λΈŒλŸ¬λ¦¬μ™€ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λΆ„λ¦¬ν•˜μ—¬ CDN μΊμ‹œ νžˆνŠΈμœ¨μ„ 높이도둝 μ„€κ³„ν•©λ‹ˆλ‹€ [5, 6]. - **Operation / Maintenance:** CI/CD νŒŒμ΄ν”„λΌμΈμ—μ„œ "500 kB μ΄μƒμ˜ 청크" κ²½κ³ κ°€ λ°œμƒν•  경우, `rollup-plugin-visualizer`λ₯Ό 톡해 λ²ˆλ“€ μƒνƒœλ₯Ό μ κ²€ν•˜κ³  λΆ„ν•  섀정을 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€ [8, 13, 14]. - **Learning Path:** React μ΅œμ ν™” ν•™μŠ΅ μ‹œ, λ‹¨μˆœνžˆ `React.lazy()`만 λ°°μš°λŠ” 것을 λ„˜μ–΄ λ²ˆλ“€λŸ¬(Rollup) λ ˆλ²¨μ—μ„œμ˜ μ½”λ“œ μ²­ν‚Ή(Chunking) 원리λ₯Ό ν•¨κ»˜ ν•™μŠ΅ν•©λ‹ˆλ‹€ [3, 6]. - **My Project Relevance:** Vite 기반 React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ Vercelμ΄λ‚˜ AWS μ„œλ²„μ— λ°°ν¬ν•˜κΈ° 전에 λΉŒλ“œ 속도 및 초기 λ‹€μš΄λ‘œλ“œ 속도λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•œ ν•„μˆ˜ 점검 λ‹¨κ³„λ‘œ ν™œμš©ν•©λ‹ˆλ‹€ [2, 11]. ### Adjacent Topics - ES Modules (ESM) - ν™•μž₯ λ°©ν–₯: Rollup의 ν”„λ‘œλ•μ…˜ λΉŒλ“œ 이전, Viteκ°€ 개발 ν™˜κ²½μ—μ„œ μ½”λ“œ λ³€κ²½ 사항을 μ¦‰κ°μ μœΌλ‘œ λΈŒλΌμš°μ €μ— λ°˜μ˜ν•˜λŠ” 원리 νŒŒμ•… [1, 15]. - [[Core Web Vitals|Core Web Vitals]] - ν™•μž₯ λ°©ν–₯: Rollup의 λ²ˆλ“€ λΆ„ν•  및 κ²½λŸ‰ν™” μž‘μ—…μ΄ LCP(Largest Contentful Paint)λ‚˜ INP(Interaction to Next Paint)와 같은 λΈŒλΌμš°μ € μ„±λŠ₯ μΈ‘μ • μ§€ν‘œλ₯Ό μ–΄λ–»κ²Œ κ°œμ„ ν•˜λŠ”μ§€ 쑰사 [9, 14]. --- *Last updated: 2026-04-30*