μλ°μ€ν¬λ¦½νΈ λͺ¨λ ν« μ λ°μ΄νΈ μ‘°μ μμ§μ λν μ¬μΈ΅ λΆμμΌλ‘, μ λ°μ΄νΈ λκΈ°νμ 볡μ‘μ±, μνν μ ν 보μ₯, μ΅μ μΉ μ ν리μΌμ΄μ μμμ μ€λ¨ μ΅μνμ μ΄μ μ λ§μΆ₯λλ€.
μλ°μ€ν¬λ¦½νΈ λͺ¨λ ν« μ λ°μ΄νΈ μ‘°μ μμ§: μ λ°μ΄νΈ λκΈ°ν
λμμμ΄ μ§ννλ μΉ κ°λ° νκ²½μμ μ½λ λ°°ν¬ μ€ μνν μ¬μ©μ κ²½νμ μ μ§νλ κ²μ λ§€μ° μ€μν©λλ€. μλ°μ€ν¬λ¦½νΈ λͺ¨λ ν« μ λ°μ΄νΈ μ‘°μ μμ§μ κ°λ°μκ° μ 체 νμ΄μ§λ₯Ό μλ‘κ³ μΉ¨ν νμ μμ΄ μ€ν μ€μΈ μ ν리μΌμ΄μ μ λͺ¨λμ μ λ°μ΄νΈν μ μλ μ루μ μ μ 곡ν©λλ€. μ’ μ’ HMR(Hot Module Replacement)μ΄λΌκ³ λΆλ¦¬λ μ΄ κΈ°λ₯μ κ°λ°μ μμ°μ±μ ν¬κ² ν₯μμν€κ³ μ¬μ©μ λ§μ‘±λλ₯Ό λμ λλ€. κ·Έλ¬λ ν΅μ¬ κ³Όμ λ μ λ°μ΄νΈ λκΈ°νμ μμ΅λλ€. μ¦, μ λ°μ΄νΈλ μ½λμ μμ‘΄νλ λͺ¨λ λͺ¨λκ³Ό μ»΄ν¬λνΈκ° μ ννκ³ μΌκ΄λκ² μ λ°μ΄νΈλλλ‘ λ³΄μ₯νμ¬ μ€λ¨κ³Ό μ μ¬μ μ€λ₯λ₯Ό μ΅μννλ κ²μ λλ€. μ΄ κΈμμλ μλ°μ€ν¬λ¦½νΈ λͺ¨λ ν« μ λ°μ΄νΈ μ‘°μ μμ§ λ΄μμ μ λ°μ΄νΈ λκΈ°νμ 볡μ‘μ±μ νꡬνλ©° κ΄λ ¨λ λ©μ»€λμ¦, κ³Όμ λ° λͺ¨λ² μ¬λ‘λ₯Ό μ΄ν΄λ΄ λλ€.
HMR(ν« λͺ¨λ κ΅μ²΄) μ΄ν΄νκΈ°
μ λ°μ΄νΈ λκΈ°νμ 볡μ‘μ±μ λν΄ μμΈν μμ보기 μ μ HMRμ κΈ°λ³Έ μμΉμ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€. μ ν΅μ μΌλ‘ μ½λ λ³κ²½μ΄ λ°μνλ©΄ κ°λ°μλ λ³κ²½ μ¬νμ΄ μ ν리μΌμ΄μ μ λ°μλλλ‘ λΈλΌμ°μ λ₯Ό μλμΌλ‘ μλ‘κ³ μΉ¨ν΄μΌ νμ΅λλ€. μ΄ κ³Όμ μ νΉν λΉ λ₯Έ κ°λ° μ£ΌκΈ° λμ μκ°μ΄ λ§μ΄ κ±Έλ¦¬κ³ λ²κ±°λ‘μ΅λλ€. HMRμ λ€μμ ν΅ν΄ μ΄ κ³Όμ μ μλνν©λλ€:
- μ½λ λ³κ²½ κ°μ§: νμΌ μμ€ν λ³κ²½ μ¬νμ λͺ¨λν°λ§νκ³ μμ λ λͺ¨λμ μλ³ν©λλ€.
- μ λ°μ΄νΈλ λͺ¨λ λΉλ: λ³κ²½λ λͺ¨λκ³Ό κ·Έ μμ‘΄μ±λ§ λ€μ μ»΄νμΌν©λλ€.
- λ°νμμ λͺ¨λ κ΅μ²΄: μ 체 μλ‘κ³ μΉ¨ μμ΄ λΈλΌμ°μ μμ μ΄μ λͺ¨λμ μ λͺ¨λλ‘ μννκ² κ΅μ²΄ν©λλ€.
- μ ν리μΌμ΄μ μν 보쑴: μ¬μ©μ μ λ ₯ λ° μ€ν¬λ‘€ μμΉμ κ°μ μ ν리μΌμ΄μ μ νμ¬ μνλ₯Ό μ μ§νμ¬ μ€λ¨μ μ΅μννλ €κ³ μλν©λλ€.
μΉν©(Webpack), νμ¬(Parcel), λΈλΌμ°μ 리νμ΄(Browserify)μ κ°μ μΈκΈ° μλ λꡬλ€μ λ΄μ₯λ HMR μ§μμ μ 곡νμ¬ ν΅ν© κ³Όμ μ κ°μνν©λλ€. HMR μ¬μ©μ μ΄μ μ μλΉν©λλ€:
- κ°λ°μ μμ°μ± ν₯μ: λ λΉ λ₯Έ νΌλλ°± 루νμ κ°λ° μκ° λ¨μΆ.
- μ¬μ©μ κ²½ν κ°μ : κ°λ° μ€ λ μ΄μ κ±°μ¬λ¦¬λ μ 체 νμ΄μ§ μλ‘κ³ μΉ¨μ΄ μμ.
- μ ν리μΌμ΄μ μν 보쑴: μ ν리μΌμ΄μ κ³Ό μνΈμμ©νλ μ¬μ©μμ μ€λ¨ κ°μ.
- λλ²κΉ κ°ν: μ€μκ°μΌλ‘ λ³κ²½ μ¬νμ κ΄μ°°νμ¬ λ²κ·Έλ₯Ό 격리νκ³ μμ νκΈ° μ¬μ.
μ λ°μ΄νΈ λκΈ°νμ κ³Όμ
HMRμ μλ§μ μ΄μ μ μ 곡νμ§λ§, μνν μ λ°μ΄νΈ λκΈ°νλ₯Ό λ¬μ±νλ κ²μ μλΉν κ³Όμ λ₯Ό μ μν©λλ€. μ£Όμ λ¬Έμ λ λͺ¨λ μν₯μ λ°λ λͺ¨λμ΄ μ¬λ°λ₯Έ μμμ μ μ ν μμ μ μ λ°μ΄νΈλμ΄ λΆμΌμΉμ μ€λ₯λ₯Ό λ°©μ§νλλ‘ λ³΄μ₯νλ κ²μ λλ€. λ€μμ λͺ κ°μ§ μ£Όμ κ³Όμ μ λλ€:
μμ‘΄μ± κ΄λ¦¬
μ΅μ μλ°μ€ν¬λ¦½νΈ μ ν리μΌμ΄μ μ μ’ μ’ λ³΅μ‘ν μμ‘΄μ± κ΄κ³λ₯Ό κ°μ§ μλ°± λλ μμ² κ°μ λͺ¨λλ‘ κ΅¬μ±λ©λλ€. ν λͺ¨λμ΄ μ λ°μ΄νΈλλ©΄, κ·Έ λͺ¨λ μμ‘΄μ± λͺ¨λλ μΌκ΄μ±μ μ μ§νκΈ° μν΄ μ λ°μ΄νΈλμ΄μΌ ν©λλ€. μ΄λ₯Ό μν΄μλ μν₯μ λ°λ λͺ¨λ λͺ¨λμ μ ννκ² μλ³νκ³ μ¬λ°λ₯Έ μμλ‘ μ λ°μ΄νΈλλλ‘ λ³΄μ₯νλ κ°λ ₯ν μμ‘΄μ± μΆμ λ©μ»€λμ¦μ΄ νμν©λλ€. λ€μ μλ리μ€λ₯Ό κ³ λ €ν΄ λ³΄μΈμ:
λͺ¨λ A -> λͺ¨λ B -> λͺ¨λ C
λͺ¨λ Aκ° μ λ°μ΄νΈλλ©΄, HMR μμ§μ μ€λλ μμ‘΄μ±μΌλ‘ μΈν μ€λ₯λ₯Ό λ°©μ§νκΈ° μν΄ λͺ¨λ Bμ λͺ¨λ Cλ κ·Έ μμλλ‘ μ λ°μ΄νΈλλλ‘ λ³΄μ₯ν΄μΌ ν©λλ€.
λΉλκΈ° μ λ°μ΄νΈ
λ§μ μΉ μ ν리μΌμ΄μ μ API νΈμΆ λ° μ΄λ²€νΈ 리μ€λμ κ°μ λΉλκΈ° μμ μ μμ‘΄ν©λλ€. μ΄λ¬ν μμ μ΄ μ§ν μ€μΌ λ λͺ¨λμ μ λ°μ΄νΈνλ©΄ μμΈ‘ν μ μλ λμκ³Ό λ°μ΄ν° λΆμΌμΉκ° λ°μν μ μμ΅λλ€. HMR μμ§μ λΉλκΈ° μμ κ³Ό μ λ°μ΄νΈλ₯Ό μ‘°μ νμ¬ μμ ν λλ§ μ λ°μ΄νΈκ° μ μ©λλλ‘ ν΄μΌ ν©λλ€. μλ₯Ό λ€μ΄, μ»΄ν¬λνΈκ° μ λ°μ΄νΈ λ°μ μ APIμμ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ μ€μ΄λΌλ©΄, μμ§μ μ λ°μ΄νΈκ° μλ£λ ν μ»΄ν¬λνΈκ° μ λ°μ΄ν°λ‘ λ€μ λ λλ§λλλ‘ λ³΄μ₯ν΄μΌ ν©λλ€.
μν κ΄λ¦¬
HMR λμ μ ν리μΌμ΄μ μνλ₯Ό μ μ§νλ κ²μ μ€λ¨μ μ΅μννλ λ° μ€μν©λλ€. κ·Έλ¬λ λͺ¨λμ μ λ°μ΄νΈνλ©΄ μ μ€νκ² μ²λ¦¬νμ§ μμ κ²½μ° μ’ μ’ μν μμ€λ‘ μ΄μ΄μ§ μ μμ΅λλ€. HMR μμ§μ μ λ°μ΄νΈ μ€μ μ ν리μΌμ΄μ μνλ₯Ό 보쑴νκ³ λ³΅μνλ λ©μ»€λμ¦μ μ 곡ν΄μΌ ν©λλ€. μ΄λ μν λ°μ΄ν°λ₯Ό μ§λ ¬ννκ³ μμ§λ ¬ννκ±°λ, Reactμ 컨ν μ€νΈ API λλ Reduxμ κ°μ κΈ°μ μ μ¬μ©νμ¬ μ μ μνλ₯Ό κ΄λ¦¬νλ κ²μ ν¬ν¨ν μ μμ΅λλ€. μ¬μ©μκ° μμμ μμ±νκ³ μλ€κ³ μμν΄ λ³΄μΈμ. μ λ°μ΄νΈλ μ΄μμ μΌλ‘ λΆλΆμ μΌλ‘ μ±μμ§ μμ λ°μ΄ν°λ₯Ό μ§μ°μ§ μμμΌ ν©λλ€.
κ΅μ°¨ λΈλΌμ°μ νΈνμ±
HMR ꡬνμ λΈλΌμ°μ λ§λ€ λ€λ₯Ό μ μμΌλ―λ‘ κ°λ°μλ νΈνμ± λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌ ν©λλ€. HMR μμ§μ λͺ¨λ μ£Όμ λΈλΌμ°μ μμ μλνλ μΌκ΄λ APIλ₯Ό μ 곡νμ¬ λͺ¨λ μ¬μ©μμκ² μΌκ΄λ κ²½νμ 보μ₯ν΄μΌ ν©λλ€. μ΄λ λΈλΌμ°μ λμμ μ°¨μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λΈλΌμ°μ λ³ ν΄λ¦¬νμ΄λ μ¬(shim)μ μ¬μ©νλ κ²μ ν¬ν¨ν μ μμ΅λλ€.
μ€λ₯ μ²λ¦¬
HMR μ€ μ€λ₯λ μ ν리μΌμ΄μ μΆ©λμ΄λ μκΈ°μΉ μμ λμμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. HMR μμ§μ μ€λ₯λ₯Ό κ°μ§νκ³ μ μμ μΌλ‘ 볡ꡬν μ μλ κ°λ ₯ν μ€λ₯ μ²λ¦¬ λ©μ»€λμ¦μ μ 곡ν΄μΌ ν©λλ€. μ΄λ μ€λ₯ λ‘κΉ , μ¬μ©μμκ² μ€λ₯ λ©μμ§ νμ, λλ μ ν리μΌμ΄μ μ μ΄μ λ²μ μΌλ‘ λλ리λ κ²μ ν¬ν¨ν μ μμ΅λλ€. μ λ°μ΄νΈκ° ꡬ문 μ€λ₯λ₯Ό λμ νλ μν©μ κ³ λ €ν΄ λ³΄μΈμ. HMR μμ§μ μ΄ μ€λ₯λ₯Ό κ°μ§νκ³ μ ν리μΌμ΄μ μ΄ μΆ©λνλ κ²μ λ°©μ§ν μ μμ΄μΌ ν©λλ€.
μ λ°μ΄νΈ λκΈ°νλ₯Ό μν λ©μ»€λμ¦
μ λ°μ΄νΈ λκΈ°νμ κ³Όμ λ₯Ό ν΄κ²°νκΈ° μν΄ HMR μμ§μ λ€μν λ©μ»€λμ¦μ μ¬μ©ν©λλ€:
μμ‘΄μ± κ·Έλν μν
HMR μμ§μ μΌλ°μ μΌλ‘ λͺ¨λ κ°μ κ΄κ³λ₯Ό λνλ΄λ μμ‘΄μ± κ·Έλνλ₯Ό μ μ§ν©λλ€. λͺ¨λμ΄ μ λ°μ΄νΈλλ©΄ μμ§μ κ·Έλνλ₯Ό μννμ¬ μν₯μ λ°λ λͺ¨λ λͺ¨λμ μλ³νκ³ μ¬λ°λ₯Έ μμλ‘ μ λ°μ΄νΈν©λλ€. μ΄λ κΉμ΄ μ°μ νμ(depth-first search) λλ λλΉ μ°μ νμ(breadth-first search)κ³Ό κ°μ μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ κ·Έλνλ₯Ό ν¨μ¨μ μΌλ‘ μννλ κ²μ ν¬ν¨ν©λλ€. μλ₯Ό λ€μ΄, μΉν©μ λͺ¨λ κ·Έλνλ₯Ό μ¬μ©νμ¬ μμ‘΄μ±μ μΆμ νκ³ μ λ°μ΄νΈ μμλ₯Ό κ²°μ ν©λλ€.
λͺ¨λ λ²μ κ΄λ¦¬
μΌκ΄μ±μ 보μ₯νκΈ° μν΄ HMR μμ§μ μ’ μ’ λͺ¨λμ λ²μ μ ν λΉν©λλ€. λͺ¨λμ΄ μ λ°μ΄νΈλλ©΄ λ²μ μ΄ μ¦κ°ν©λλ€. κ·Έλ° λ€μ μμ§μ νμ¬ λͺ¨λμ λ²μ κ³Ό μ λ°μ΄νΈλ λͺ¨λμ λ²μ μ λΉκ΅νμ¬ μ΄λ€ λͺ¨λμ κ΅μ²΄ν΄μΌ νλμ§ κ²°μ ν©λλ€. μ΄ μ κ·Ό λ°©μμ μΆ©λμ λ°©μ§νκ³ νμν λͺ¨λλ§ μ λ°μ΄νΈλλλ‘ λ³΄μ₯ν©λλ€. Git μ μ₯μμ²λΌ μκ°νλ©΄ λ©λλ€ β κ° μ»€λ°μ μ½λμ ν λ²μ μ λνλ λλ€.
μ λ°μ΄νΈ κ²½κ³
μ
λ°μ΄νΈ κ²½κ³λ μ
λ°μ΄νΈμ λ²μλ₯Ό μ μν©λλ€. μ΄λ₯Ό ν΅ν΄ κ°λ°μλ λͺ¨λμ΄ λ³κ²½λ λ μ ν리μΌμ΄μ
μ μ΄λ λΆλΆμ΄ μ
λ°μ΄νΈλμ΄μΌ νλμ§ μ§μ ν μ μμ΅λλ€. μ΄λ μ
λ°μ΄νΈλ₯Ό 격리νκ³ λΆνμν μ¬λ λλ§μ λ°©μ§νλ λ° μ μ©ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, Reactμμ μ
λ°μ΄νΈ κ²½κ³λ React.memo
λλ shouldComponentUpdate
μ κ°μ μ»΄ν¬λνΈλ₯Ό μ¬μ©νμ¬ μν₯μ λ°μ§ μλ μ»΄ν¬λνΈμ μ¬λ λλ§μ λ°©μ§ν¨μΌλ‘μ¨ μ μν μ μμ΅λλ€.
μ΄λ²€νΈ μ²λ¦¬
HMR μμ§μ μ΄λ²€νΈλ₯Ό μ¬μ©νμ¬ λͺ¨λμ μ λ°μ΄νΈλ₯Ό μ립λλ€. λͺ¨λμ μ΄λ¬ν μ΄λ²€νΈλ₯Ό ꡬλ νκ³ μν μ λ°μ΄νΈλ UI μ¬λ λλ§κ³Ό κ°μ νμν μμ μ μνν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λͺ¨λμ λ³κ²½ μ¬νμ λμ μΌλ‘ λ°μνκ³ μΌκ΄μ±μ μ μ§ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ»΄ν¬λνΈλ μ λ°μ΄νΈ μ΄λ²€νΈλ₯Ό ꡬλ νκ³ μ΄λ²€νΈκ° νΈλ¦¬κ±°λ λ APIμμ μ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ μ μμ΅λλ€.
λ‘€λ°± λ©μ»€λμ¦
μ€λ₯ λ°μ μ, HMR μμ§μ μ ν리μΌμ΄μ μ μ΄μ λ²μ μΌλ‘ λλ리λ λ‘€λ°± λ©μ»€λμ¦μ μ 곡ν΄μΌ ν©λλ€. μ΄λ μ΄μ λ²μ μ λͺ¨λμ μ μ₯νκ³ μ λ°μ΄νΈ μ€ μ€λ₯κ° λ°μνλ©΄ 볡μνλ κ²μ ν¬ν¨ν μ μμ΅λλ€. μ΄λ μμ μ±μ΄ κ°μ₯ μ€μν νλ‘λμ νκ²½μμ νΉν μ€μν©λλ€.
ν¨κ³Όμ μΈ μ λ°μ΄νΈ λκΈ°νμ ν¨κ» HMRμ ꡬννκΈ° μν λͺ¨λ² μ¬λ‘
HMRμ ν¨κ³Όμ μΌλ‘ ꡬννκ³ μνν μ λ°μ΄νΈ λκΈ°νλ₯Ό 보μ₯νλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€:
μ μ μν μ΅μν
μ μ μνλ μ λ°μ΄νΈλ₯Ό κ΄λ¦¬νκ³ μΌκ΄μ±μ μ μ§νκΈ° μ΄λ ΅κ² λ§λ€ μ μμ΅λλ€. μ μ λ³μ μ¬μ©μ μ΅μννκ³ , μν μ λ°μ΄νΈμ λν λ λμ μ μ΄λ₯Ό μ 곡νλ Reduxλ Vuexμ κ°μ λ‘컬 μν λλ μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ νΈνμμμ€. μ€μ μ§μ€μ μν κ΄λ¦¬ μ루μ μ μ¬μ©νλ©΄ λ¨μΌ μ§μ€ 곡κΈμ(single source of truth)μ μ 곡νμ¬ HMR μ€μ μνλ₯Ό μΆμ νκ³ μ λ°μ΄νΈνκΈ°κ° λ μ¬μμ§λλ€.
λͺ¨λμ μν€ν μ² μ¬μ©
λͺ¨λμ μν€ν μ²λ λͺ¨λμ λ 립μ μΌλ‘ 격리νκ³ μ λ°μ΄νΈνκΈ° μ½κ² λ§λλλ€. μ ν리μΌμ΄μ μ λͺ νν μμ‘΄μ±μ κ°μ§ μκ³ μ μ μλ λͺ¨λλ‘ λΆν΄νμμμ€. μ΄λ μ λ°μ΄νΈμ λ²μλ₯Ό μ€μ΄κ³ μΆ©λ μνμ μ΅μνν©λλ€. λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²λ₯Ό νλ‘ νΈμλμ μ μ©νλ€κ³ μκ°νλ©΄ λ©λλ€.
λͺ νν μ λ°μ΄νΈ κ²½κ³ κ΅¬ν
μ
λ°μ΄νΈ λ²μλ₯Ό μ ννκΈ° μν΄ λͺ
νν μ
λ°μ΄νΈ κ²½κ³λ₯Ό μ μνμμμ€. React.memo
λλ shouldComponentUpdate
μ κ°μ κΈ°μ μ μ¬μ©νμ¬ λΆνμν μ¬λ λλ§μ λ°©μ§νμμμ€. μ΄λ μ±λ₯μ ν₯μμν€κ³ μκΈ°μΉ μμ λμμ μνμ μ€μ
λλ€. μ μ νκ² μ μλ κ²½κ³λ HMR μμ§μ΄ μ
λ°μ΄νΈλ₯Ό λ μ λ°νκ² νκ²ν
νμ¬ μ€λ¨μ μ΅μννλλ‘ ν©λλ€.
λΉλκΈ° μμ μ μ€νκ² μ²λ¦¬
λ°μ΄ν° λΆμΌμΉλ₯Ό λ°©μ§νκΈ° μν΄ λΉλκΈ° μμ κ³Ό μ λ°μ΄νΈλ₯Ό μ‘°μ νμμμ€. Promiseλ async/awaitμ κ°μ κΈ°μ μ μ¬μ©νμ¬ λΉλκΈ° μμ μ κ΄λ¦¬νκ³ μμ ν λλ§ μ λ°μ΄νΈκ° μ μ©λλλ‘ λ³΄μ₯νμμμ€. λΉλκΈ° μμ μ΄ μ§ν μ€μΌ λ λͺ¨λμ μ λ°μ΄νΈνλ κ²μ νΌνμμμ€. λμ μμ μ΄ μλ£λ λκΉμ§ κΈ°λ€λ Έλ€κ° μ λ°μ΄νΈλ₯Ό μ μ©νμμμ€.
μ² μ ν ν μ€νΈ
HMR ꡬνμ μ² μ ν ν μ€νΈνμ¬ μ λ°μ΄νΈκ° μ¬λ°λ₯΄κ² μ μ©λκ³ μ ν리μΌμ΄μ μνκ° λ³΄μ‘΄λλμ§ νμΈνμμμ€. λ¨μ ν μ€νΈμ ν΅ν© ν μ€νΈλ₯Ό μμ±νμ¬ μ λ°μ΄νΈ μ€ μ ν리μΌμ΄μ μ λμμ κ²μ¦νμμμ€. μλνλ ν μ€νΈλ HMRμ΄ μμλλ‘ μλνκ³ μ λ°μ΄νΈκ° νκ·(regression)λ₯Ό μ λ°νμ§ μλμ§ νμΈνλ λ° μ€μν©λλ€.
λͺ¨λν°λ§ λ° λ‘κΉ
μ€λ₯ λ° μ±λ₯ λ¬Έμ μ λν΄ HMR ꡬνμ λͺ¨λν°λ§νμμμ€. λͺ¨λ μ λ°μ΄νΈ μ΄λ²€νΈμ μ€λ₯ λ©μμ§λ₯Ό κΈ°λ‘νμ¬ λ¬Έμ μ§λ¨μ λμ΅λλ€. λͺ¨λν°λ§ λꡬλ₯Ό μ¬μ©νμ¬ μ λ°μ΄νΈ μ€ μ ν리μΌμ΄μ μ μ±λ₯μ μΆμ νμμμ€. ν¬κ΄μ μΈ λͺ¨λν°λ§ λ° λ‘κΉ μ ν΅ν΄ HMR λ° μ λ°μ΄νΈ λκΈ°νμ κ΄λ ¨λ λ¬Έμ λ₯Ό μ μνκ² μλ³νκ³ ν΄κ²°ν μ μμ΅λλ€.
μμ : Reactμ Fast Refresh (HMRμ ν μ’ λ₯)
React Fast Refreshλ μ»΄ν¬λνΈ μνλ₯Ό μμ§ μκ³ React μ»΄ν¬λνΈλ₯Ό κ±°μ μ¦μ μ λ°μ΄νΈν μ μλ μΈκΈ° μλ HMR μ루μ μ λλ€. λ€μκ³Ό κ°μ΄ μλν©λλ€:
- μ»΄ν¬λνΈ κ³μΈ‘: λ³κ²½ μ¬νμ μΆμ νκ³ μ λ°μ΄νΈλ₯Ό νΈλ¦¬κ±°νκΈ° μν΄ React μ»΄ν¬λνΈμ μ½λλ₯Ό μΆκ°ν©λλ€.
- μ λ°μ΄νΈλ μ»΄ν¬λνΈ κ΅μ²΄: μ»΄ν¬λνΈ νΈλ¦¬μμ μ λ°μ΄νΈλ μ»΄ν¬λνΈλ§ κ΅μ²΄ν©λλ€.
- μ»΄ν¬λνΈ μν 보쑴: μ λ°μ΄νΈλ μ»΄ν¬λνΈμ μνλ₯Ό 보쑴νλ €κ³ μλν©λλ€.
React Fast Refreshλ₯Ό μ¬μ©νλ €λ©΄ μΌλ°μ μΌλ‘ react-refresh
ν¨ν€μ§λ₯Ό μ€μΉνκ³ λΉλ λꡬ(μ: μΉν©)λ₯Ό react-refresh-webpack-plugin
μ μ¬μ©νλλ‘ κ΅¬μ±ν΄μΌ ν©λλ€. λ€μμ μΉν©μ ꡬμ±νλ κΈ°λ³Έμ μΈ μμ
λλ€:
// webpack.config.js const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); module.exports = { // ... λ€λ₯Έ μΉν© κ΅¬μ± plugins: [ new ReactRefreshWebpackPlugin(), ], };
React Fast Refreshλ₯Ό μ¬μ©νλ©΄ React μ»΄ν¬λνΈλ₯Ό λ³κ²½νκ³ μ»΄ν¬λνΈμ μνλ₯Ό μμ§ μκ³ κ±°μ μ¦μ λΈλΌμ°μ μ λ³κ²½ μ¬νμ΄ λ°μλλ κ²μ λ³Ό μ μμ΅λλ€. μ΄λ κ°λ°μ μμ°μ±μ ν¬κ² ν₯μμν€κ³ λλ²κΉ μ ν¨μ¬ μ½κ² λ§λλλ€.
κ³ κΈ κ³ λ € μ¬ν
λ 볡μ‘ν μ ν리μΌμ΄μ μ κ²½μ° λ€μ κ³ κΈ κ³ λ € μ¬νμ κ³ λ €νμμμ€:
μ½λ μ€ν리ν
μ½λ μ€ν리ν μ μ¬μ©νλ©΄ μ ν리μΌμ΄μ μ νμμ λ°λΌ λ‘λν μ μλ λ μμ μ²ν¬λ‘ λλ μ μμ΅λλ€. μ΄λ μ ν리μΌμ΄μ μ μ΄κΈ° λ‘λ μκ°μ μ€μ΄κ³ μ±λ₯μ ν₯μμν΅λλ€. HMRκ³Ό ν¨κ» μ½λ μ€ν리ν μ μ¬μ©ν λ, μ λ°μ΄νΈκ° μ¬λ°λ₯Έ μ²ν¬μ μ μ©λκ³ μ²ν¬ κ°μ μμ‘΄μ±μ΄ μ¬λ°λ₯΄κ² μ²λ¦¬λλμ§ νμΈν΄μΌ ν©λλ€. μΉν©μ λμ κ°μ Έμ€κΈ°(dynamic imports)λ μ½λ μ€ν리ν μ ꡬννλ μΌλ°μ μΈ λ°©λ²μ λλ€.
λ§μ΄ν¬λ‘νλ‘ νΈμλ μν€ν μ²
λ§μ΄ν¬λ‘νλ‘ νΈμλ μν€ν μ²λ μ ν리μΌμ΄μ μ λ 립μ μ΄κ³ λ°°ν¬ κ°λ₯ν λ¨μλ‘ λΆν΄νλ κ²μ ν¬ν¨ν©λλ€. HMRκ³Ό ν¨κ» λ§μ΄ν¬λ‘νλ‘ νΈμλλ₯Ό μ¬μ©ν λ, λͺ¨λ λ§μ΄ν¬λ‘νλ‘ νΈμλμ κ±Έμ³ μ λ°μ΄νΈκ° μ‘°μ λκ³ λ§μ΄ν¬λ‘νλ‘ νΈμλ κ°μ μμ‘΄μ±μ΄ μ¬λ°λ₯΄κ² μ²λ¦¬λλμ§ νμΈν΄μΌ ν©λλ€. μ΄λ₯Ό μν΄μλ λΆμ° νκ²½μμ μ λ°μ΄νΈλ₯Ό μ²λ¦¬ν μ μλ κ°λ ₯ν μ‘°μ λ©μ»€λμ¦μ΄ νμν©λλ€. ν κ°μ§ μ κ·Ό λ°©μμ 곡μ μ΄λ²€νΈ λ²μ€λ λ©μμ§ νλ₯Ό μ¬μ©νμ¬ λ§μ΄ν¬λ‘νλ‘ νΈμλ κ°μ μ λ°μ΄νΈ μ΄λ²€νΈλ₯Ό ν΅μ νλ κ²μ λλ€.
μλ² μ¬μ΄λ λ λλ§ (SSR)
μλ² μ¬μ΄λ λ λλ§μ μ¬μ©ν λ, μ λ°μ΄νΈκ° μλ²μ ν΄λΌμ΄μΈνΈ λͺ¨λμ μ μ©λλμ§ νμΈν΄μΌ ν©λλ€. μ΄λ μλ² μ¬μ΄λ HMRκ³Ό κ°μ κΈ°μ μ μ¬μ©νκ±°λ λͺ¨λμ΄ μ λ°μ΄νΈλ λ μλ²μμ μ ν리μΌμ΄μ μ λ€μ λ λλ§νλ κ²μ ν¬ν¨ν μ μμ΅λλ€. μλ²μ ν΄λΌμ΄μΈνΈ κ°μ μ λ°μ΄νΈλ₯Ό μ‘°μ νλ κ²μ νΉν λΉλκΈ° μμ λ° μν κ΄λ¦¬λ₯Ό λ€λ£° λ μ΄λ €μΈ μ μμ΅λλ€. ν κ°μ§ μ κ·Ό λ°©μμ μλ²μ ν΄λΌμ΄μΈνΈ λͺ¨λμμ μ‘μΈμ€ν μ μλ 곡μ μν 컨ν μ΄λλ₯Ό μ¬μ©νλ κ²μ λλ€.
κ²°λ‘
μλ°μ€ν¬λ¦½νΈ λͺ¨λ ν« μ λ°μ΄νΈ μ‘°μ μμ§μ κ°λ°μ μμ°μ±μ ν₯μμν€κ³ μ¬μ©μ κ²½νμ κ°μ νλ κ°λ ₯ν λꡬμ λλ€. κ·Έλ¬λ μνν μ λ°μ΄νΈ λκΈ°νλ₯Ό λ¬μ±νλ €λ©΄ μ μ€ν κ³νκ³Ό ꡬνμ΄ νμν©λλ€. κ΄λ ¨λ κ³Όμ λ₯Ό μ΄ν΄νκ³ μ΄ κΈμμ μ€λͺ ν λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄ HMRμ ν¨κ³Όμ μΌλ‘ ꡬννκ³ μ½λ λ°°ν¬ μ€μλ μ ν리μΌμ΄μ μ΄ μμ μ μ΄κ³ λ°μμ±μ μ μ§νλλ‘ λ³΄μ₯ν μ μμ΅λλ€. μΉ μ ν리μΌμ΄μ μ΄ κ³μν΄μ 볡μ‘ν΄μ§μ λ°λΌ, ν¨κ³Όμ μΈ μ λ°μ΄νΈ λκΈ°νλ₯Ό κ°μΆ κ²¬κ³ ν HMR ꡬνμ κ³ νμ§ κ°λ° κ²½νμ μ μ§νκ³ νμν μ¬μ©μ κ²½νμ μ 곡νλ λ° μ μ λ μ€μν΄μ§ κ²μ λλ€. μλ°μ€ν¬λ¦½νΈ μνκ³κ° κ³μ μ§νν¨μ λ°λΌ, λ°νμμ λͺ¨λμ μ λ°μ΄νΈνλ κ³Όμ μ λμ± λ¨μννκ³ μ¬μ©μμ μ€λ¨μ μ΅μννλ ν¨μ¬ λ μ κ΅ν HMR μ루μ μ΄ λ±μ₯ν κ²μΌλ‘ κΈ°λλ©λλ€.