HMR์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ ์ค์ธ ์ํ์์ ์ ์ฒด ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด ๋ณ๊ฒฝ๋ ๋ชจ๋๋ง ๊ต์ฒดํ๋ ๊ธฐ์ ์ด๋ค. ๊ฐ๋ฐ ์ค ์ฝ๋๋ฅผ ์์ ํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ด ์ฆ์ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์๋๋ค.
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
- ์ ์ฒด ์๋ก๊ณ ์นจ์ ๋ฌธ์ : ์ฝ๋ ์์ โ ํ์ด์ง ๋ฆฌ๋ก๋ โ ์ ํ๋ฆฌ์ผ์ด์ ์ํ(state) ์ด๊ธฐํ
- ํผ์ ์ ๋ ฅํ ๋ฐ์ดํฐ, ์คํฌ๋กค ์์น, ์ด๋ ค ์๋ ๋ชจ๋ฌ ๋ฑ์ด ์ ๋ถ ์ฌ๋ผ์ง
- ์ฑ์ด ์ปค์ง์๋ก ๋ฆฌ๋ก๋ ์๊ฐ๋ ๊ธธ์ด์ง
- HMR์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ์ํ๋ฅผ ๋ณด์กดํ๋ฉด์ ๋ณ๊ฒฝ๋ ์ฝ๋๋ง ๊ต์ฒด
AS-IS (์ ์ฒด ์๋ก๊ณ ์นจ)
์ฝ๋ ์์ โ ์ ์ฒด ํ์ด์ง ๋ฆฌ๋ก๋ โ ์ํ ์ด๊ธฐํ
์: 3๋จ๊ณ ํผ์ 3๋จ๊ณ์์ CSS ์์
โ ๋ฆฌ๋ก๋ โ 1๋จ๊ณ๋ถํฐ ๋ค์ ์งํํด์ผ ํจ
โ ์ฑ์ด ํด์๋ก ๋ฆฌ๋ก๋ ์๊ฐ๋ ์ฆ๊ฐ
TO-BE (HMR)
์ฝ๋ ์์ โ ๋ณ๊ฒฝ๋ ๋ชจ๋๋ง ๊ต์ฒด โ ์ํ ์ ์ง
์: 3๋จ๊ณ ํผ์ 3๋จ๊ณ์์ CSS ์์
โ CSS๋ง ๊ต์ฒด โ 3๋จ๊ณ ์ํ ๊ทธ๋๋ก ์ ์ง
โ ์ฑ ํฌ๊ธฐ์ ๋ฌด๊ดํ๊ฒ ๋น ๋ฅธ ์
๋ฐ์ดํธ
๋์ ์๋ฆฌ (webpack ๊ธฐ์ค)
1. ํ์ผ ์์ ๊ฐ์ง
2. Compiler๊ฐ "Update" ์์ฑ
โโโ Updated Manifest (JSON): ๋ณ๊ฒฝ๋ ์ฒญํฌ ๋ชฉ๋ก
โโโ Updated Chunks (JS): ๋ณ๊ฒฝ๋ ๋ชจ๋์ ์ ์ฝ๋
3. HMR Runtime์ด ์
๋ฐ์ดํธ ์ ์ฉ
โโโ check(): ๋งค๋ํ์คํธ ๋ค์ด๋ก๋ โ ๋ณ๊ฒฝ๋ ์ฒญํฌ ํ์ธ
โโโ apply(): ๋ณ๊ฒฝ ๋ชจ๋ ๊ต์ฒด โ accept ํธ๋ค๋ฌ ์คํ
4. ํด๋น ๋ชจ๋์ HMR ํธ๋ค๋ฌ๊ฐ ์์ผ๋ฉด โ ๋ถ๋ชจ๋ก ๋ฒ๋ธ์
5. ์ํธ๋ฆฌ๊น์ง ํธ๋ค๋ฌ๊ฐ ์์ผ๋ฉด โ ์ ์ฒด ๋ฆฌ๋ก๋๋ก ํด๋ฐฑ
Vite์์์ HMR
Vite์ HMR์ ๊ธฐ์กด webpack HMR๊ณผ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค:
| ํน์ฑ | webpack HMR | Vite HMR |
|---|---|---|
| ๊ธฐ๋ฐ | ๋ฒ๋ค๋ ์ฝ๋ ์์์ ๋์ | Native ESM ์์์ ๋์ |
| ์๋ | ์ฑ์ด ์ปค์ง๋ฉด ๋๋ ค์ง | ์ฑ ํฌ๊ธฐ์ ๋ฌด๊ดํ๊ฒ ๋น ๋ฆ |
| ๋ฒ์ | ๋ณ๊ฒฝ๋ ์ฒญํฌ ์ ์ฒด ์ฌ๋น๋ | ๋ณ๊ฒฝ๋ ๋ชจ๋ ~ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒฝ๊ณ๊น์ง๋ง ๋ฌดํจํ |
| ์บ์ฑ | ๋ณ๋ ์ค์ ํ์ | HTTP 304 + Cache-Control ์๋ ํ์ฉ |
Vite HMR์ ํต์ฌ: ESM ๊ธฐ๋ฐ์ด๋ฏ๋ก ์์ ๋ ํ์ผ๊ณผ ๊ทธ ๊ฒฝ๊ณ ์ฌ์ด์ ๋ชจ๋๋ง ๋ฌดํจํํ๋ค. ์ฑ์ ์์ฒ ๊ฐ์ ๋ชจ๋์ด ์์ด๋ HMR ์ ๋ฐ์ดํธ ์๋๋ ์ผ์ ํ๊ฒ ๋น ๋ฅด๋ค.