μ΅κ·Ό μ¬λ¬ κ΅°λ° λ©΄μ μ 보면μ κ°μ₯ κΈ°μ΅ λλ νλ‘μ νΈμ λν λλ΅μΌλ‘ CRA -> Vite μ νμ λ½μλλ°, μ VITE κ° λΉ λ₯Έκ°μ ? λΌλ μ§λ¬Έμ λͺ
ννκ² λλ΅νμ§ λͺ»νμ΅λλ€. μ€μ λ‘ μ μ©ν΄λ³΄λ λΉ λ₯Έκ±΄ μκ² λλ°, μ νν μ λΉ λ₯Έκ° ? μ λν΄ νμ€νκ² μκ³ μμ§ λͺ»ν΄μ μ΄λ €μμ΄ μμ΄ μ΄λ² κΈ°νμ μ΄λ₯Ό μ 리ν΄λ³΄κ³ μ ν©λλ€.
CRA μ Vite λ₯Ό λΉκ΅νκΈ° μν΄μλ λ¨Όμ μΉ λΈλΌμ°μ μ λμ λ°©μμ μμμΌ ν©λλ€. MDN - μΉ νμ΄μ§λ₯Ό νμνλ€λ κ²: λΈλΌμ°μ λ μ΄λ»κ² λμνλκ° λ₯Ό μ°Έκ³ ν΄ κ°λ¨ν μμ½νλ©΄,
μ΄ κ³Όμ μμ JS , CSS , μ΄λ―Έμ§ λ±λ±μ λΈλΌμ°μ κ° μ΄ν΄νκ³ λ‘λ©ν μ μκ² μ¬λ¬κ°μ λ²λ€λ‘ λ§λλλ° , μ΄ λμμ λμμ£Όλκ² λ²λ€λ¬ ( Bundler ) μ λλ€. λ²λ€λ¬λ μ½λλ₯Ό μμΆνκ±°λ λΆν νκ³ , μ΅μ λ¬Έλ²μ ꡬν λΈλΌμ°μ μμ μλνλλ‘ ( νΈλμ€νμΌλ§ ) νλ λ±μ μ΅μ ν μμ μ μνν©λλ€.
μΉ μ΄ν리μΌμ΄μ μ΄ μ μ 컀μ§κ² λλ©΄ ν΄λΉ λ²λ€λ§ κ³Όμ μμ λΉλ μκ°μ΄ μ€λ 걸릴 λΏλ§ μλλΌ , λΈλΌμ°μ κ° λ²λ€μ λ€μ΄λ‘λνκ³ μ²λ¦¬νλ κ³Όμ μμ λ§μ μκ°μ΄ μμλ μ μμ΅λλ€. μ΄ κ³Όμ μμ μ¬λ¬ μ’ λ₯μ λ²λ€λ¬κ° μ¬μ©λλλ° , μ΄ λ μ¬μ©λλ λꡬλ€μ μ°¨μ΄κ° μΆν μ€λͺ ν CRA μ VITE μμμ μλ μ°¨μ΄λ₯Ό λ°μμν΅λλ€.
μ΄ν DOM κ³Ό CSSOM μ κ²°ν©ν΄ νλ©΄μ 보μ¬μ€ λ λλ§ νΈλ¦¬λ₯Ό λ§λλλ€. ν΄λΉ λ λλ§ νΈλ¦¬λ₯Ό κΈ°λ°μΌλ‘ λ μ΄μμμ λ§λ€κ³ νλ©΄μ κ·Έλ¦Όμ κ·Έλ¦¬κ² ( Painting ) λ©λλ€. λν λ²λ€ νμΌ λ΄λΆμ JS μ½λλ₯Ό μ€νν΄ DOM μ μ‘°μνκ³ , μΉ νμ΄μ§λ₯Ό μμ±ν©λλ€.
CRA ( Create React App ) μ κ²½μ° , κ°λ°μκ° λ³λμ μ€μ μ μ§νν νμ μμ΄ λ―Έλ¦¬ μ΅μ νλ μ€μ μΌλ‘ κ°λ°μ μ§νν μ μλλ‘ μ 곡νκ³ μμ΅λλ€. λ΄λΆμ μΌλ‘λ Webpack μ μ¬μ©ν΄μ λ²λ€λ§μ μ§νν©λλ€.
λ€λ§ Webpack μ κ²½μ° μ ν리μΌμ΄μ μ λͺ¨λ λͺ¨λμ νμ ν μμ‘΄μ± κ·Έλνλ₯Ό λ§λ€κ² λλλ° κ·λͺ¨κ° 컀μ§μλ‘ , μμ‘΄μ±μ΄ 볡μ‘ν΄μ§μλ‘ κ·Έλνλ₯Ό λΆμνλλ° λ§μ μκ°μ΄ κ±Έλ¦¬κ³ , μ΄ κ·Έλνλ₯Ό κ°μ§κ³ λ²λ€λ§μ΄ μ§νλ λ λ§μ μ°μ°κ³Ό μκ°μ΄ κ±Έλ¦¬κ² λ©λλ€. λν κ°λ° νκ²½μμ λ³κ²½μ΄ λ°μνλ©΄ λ³κ²½λ λͺ¨λ λΏλ§ μλλΌ , μμ‘΄μ±μ΄ μ°κ²°λμ΄ μλ λ€λ₯Έ λͺ¨λμ ν¬ν¨ν΄ κ±°μ λλΆλΆμ λͺ¨λμ λ€μ λΉλνκ² λ©λλ€. μ΄ κ³Όμ μμ λ λ§μ μκ°μ΄ μμλκ² λ©λλ€. Vite λ μ΄ λ¨μ μ κ·Ήλ³΅ν΄ λΉ λ₯Έ μλλ₯Ό μ 곡ν©λλ€.
곡μ λ¬Έμμμλ Vite λ₯Ό λΉ λ₯΄κ³ κ°κ²°ν λͺ¨λ μΉ νλ‘μ νΈ κ°λ° κ²½νμ μ΄μ μ λ§μΆ° νμν λΉλ ν΄ μ΄λΌκ³ μκ°νκ³ μμ΅λλ€. κ·Έλ¬λ©΄μ ν¬κ² λ κ°μ§ λΆλΆμΌλ‘ ꡬμ±λμ΄ μλ€κ³ λ§νλλ°,
Vite λ κΈ°μ‘΄ λ²λ€λ¬μλ λ€λ₯Έ λ°©μμΌλ‘ μλλ₯Ό ν¬κ² κ°μ νλλ° , μ€μν μμ΄λμ΄λ κ°λ° λ¨κ³μμλ λ²λ€λ§ νμ§ μκ³ , λΈλΌμ°μ μ ESM κΈ°μ μ μ¬μ© νλ€λ μ μ
λλ€.
μ΅μ μΉ λΈλΌμ°μ λ ECMAScript Modules (ESM) μ κΈ°λ³Έμ μΌλ‘ μ§μν©λλ€. ESM μ <script type='module'> νκ·Έλ₯Ό μ¬μ©ν΄ JS νμΌμ λͺ¨λ λ¨μλ‘ λ‘λνκ³ , κ·Έ μμ‘΄μ±μ import μ export λ‘ κ΄λ¦¬ν©λλ€. Vite λ μ΄λ₯Ό νμ©ν΄ κ°λ° μλ²μμλ λ°λ‘ μ½λλ₯Ό λ²λ€λ§νμ§ μκ³ , λΈλΌμ°μ κ° νΉμ λͺ¨λμ΄ νμνλ€λ©΄ ν΄λΉ λͺ¨λμ μ¦μ λΈλΌμ°μ μκ² μ 곡νλ μμ
λλ€. μ λ°©μμ ν΅ν΄ CRA κ° μ 체 μ ν리μΌμ΄μ
μ μν΄ λΉλνλ μκ°μ μ€μΌ μ μμμ΅λλ€. λν λΈλΌμ°μ κ° HTML νμΌμ νμ±νλ©΄μ script νκ·Έλ₯Ό λ³΄κ³ νμν js λͺ¨λμ μμ²νλ©΄ ν΄λΉ λͺ¨λλ§ λΉ λ₯΄κ² μ κ³΅ν΄ μ½ν
μΈ λ₯Ό λ°λ‘ 보μ¬μ€ μ μλ€λ μ μ΄ μμ΅λλ€.
λν HMR ( Hot Module Replacement ) λ°©μμμλ μ°¨μ΄κ° μλλ° , κΈ°μ‘΄ CRA μμ μ¬μ©νλ Webpack μ κ²½μ° νμΌμ΄ λ³κ²½λλ©΄ μμ‘΄μ± κ·Έλνλ₯Ό λ€μ λ§λ€κ³ , κ΄λ ¨μλ λͺ¨λμ μ¬λΉλνλ©΄μ λ§μ μκ°μ΄ κ±Έλ Έμ΅λλ€. νμ§λ§ Vite λ ESM μ μ¬μ©ν΄ λ³κ²½λ λͺ¨λκ³Ό κ·Έ μν₯λ°λ λͺ¨λλ§μ λΉ λ₯΄κ² νμ ν΄μ μ λ°μ΄νΈν μ μμ΅λλ€. μ΄λ‘μ¨ κ°λ°μκ° νΉμ μ½λλ₯Ό μμ νκ³ , λΉ λ₯Έ μκ°λ΄μ λ³κ²½μ μ νμ ν μ μλ€λ μ₯μ μ΄ μμ΅λλ€.
λ§μ§λ§μΌλ‘ Production λΉλμ κ²½μ°, ESM κΈ°λ°μ Rollup μ΄λΌλ λ²λ€λ¬λ₯Ό μ¬μ©ν΄μ μ΅μ’ λ²λ€ ν¬κΈ°λ₯Ό μ΅μννκ³ , μ΅μ νλ λ²λ€μ μ 곡ν©λλ€.
κ²°κ΅ Vite λ ESM μ μ κ·Ήμ μΌλ‘ μ¬μ©ν΄ κ°λ° λ¨κ³μμλ λΉ λ₯Έ μ λ°μ΄νΈλ₯Ό μ 곡νκ³ , production μμλ λ²λ€ ν¬κΈ°λ₯Ό μ΅μ νν©λλ€. μ΄λ‘μ¨ CRA κ° κ°μ§κ³ μλ λ¨μ μ ν΄κ²°νκ³ , λ³΄λ€ λΉ λ₯΄κ² κ°λ°μ μ§νν μ μκ² λμμ΅λλ€.
Vite κ° λΉ λ₯Έ μ΄μ λ₯Ό μ λ¦¬ν΄ λ³΄μλλ° , μ΄μ μλ μ€μ λ‘ μ μ©ν΄ 보μμ λκΌλ€λ©΄ μ΄λ²μλ νμ€ν μ΄μ λ₯Ό ν΅ν΄ μ΄ν΄νκ² λμμ΅λλ€. λν ν¬λ―Ένκ² μκ³ μκ±°λ , κΉλ¨Ήμλ μ 보λ€λ μ 리ν μ μμ΄μ μ’μμ΅λλ€. μ΄μ λ νμ€νκ² μ Vite κ° λΉ λ₯΄κ³ , μ μ¬μ©ν΄μΌ νλμ§ λ§ν μ μμ κ² κ°μ΅λλ€ .