๐๋น๋๋?
์น ๊ฐ๋ฐ์์ ์์ค ์ฝ๋๋ฅผ ์ต์ ํํ๊ณ ๋ณํํ์ฌ ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์๋ ํํ๋ก ๋ง๋๋ ๊ฒ์ ๋งํ๋ค. ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋น๋ ๋๊ตฌ๋ก๋ Webpack, Vite ๋ฑ์ด ์๋ค.
โ๐ Webpack
๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฒ๋ค๋ฌ ์ค ํ๋๋ค. Webpack์ CommonJS์ ES ๋ชจ๋์ ๋ชจ๋ ์ง์ํ๋ฉฐ, ๋ณ๋์ ๋ณํ ์์ด๋ require์ module.exports๋ฅผ ์ธ์ํ๊ณ ์ฒ๋ฆฌํ ์ ์๋ค. ๋ฐ๋ฉด ๋ชจ๋ ๋ชจ๋์ ๋ถ์ํ๊ณ ์์กด์ฑ์ ํ์ ํ๋ฉฐ ์ด๋ก์ธํด ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ๋น๋ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์๋ค.
โ๐ Vite
Vite๋ ๋น ๋ฅธ ๋น๋ ์๋์ ์ฆ๊ฐ์ ์ธ ๋ชจ๋ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๋ค. ES ๋ชจ๋์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ES๋ชจ๋์ ์ง์ ํด์ํ ์ ์๋ค. ์ด๋ก ์ธํด ์ด๊ธฐ ๋น๋ ์์ด ํ์ํ ๋ชจ๋๋ง ๋ก๋ํ์ฌ ๊ฐ๋ฐ ์๋ฒ ์์์ด ๋งค์ฐ ๋น ๋ฅด๋ฉฐ, ๋ณ๊ฒฝ๋ ๋ชจ๋๋ง ๊ฐฑ์ ํ๋ HMR์ ํตํด ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ค. ํ์ง๋ง ์ด๋ก์ธํด ๊ฐ๋ฐํ๊ฒฝ๊ณผ ํ๋ก๋์ ํ๊ฒฝ์ด ๋ค๋ฅผ ์ ์๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
1. ์ฌ์ ๋ฒ๋ค๋ง - ๊ฐ๋ฐ ์๋ฒ ๊ตฌ๋์ด ๋น ๋ฅด๋ค!
๊ธฐ์กด ๋๊ตฌ๋ค์ ๋จผ์ ๋ฒ๋ค๋ง ๋ ํ์์ผ ์๋ฒ๋ฅผ ๊ตฌ๋ํ ์ ์์๊ธฐ ๋๋ฌธ์ ๋ชจ๋์ด ์ปค์ง์๋ก ๋ฎ์ ์๋ฒ ๊ตฌ๋ ์๋๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค. Vite๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กด์ฑ ๋ฑ์ ์ฌ์ ๋ฒ๋ค๋ง์ ํจ์ผ๋ก์จ Webpack๊ณผ ๊ฐ์ ๊ธฐ์กด์ ๋ฒ๋ค๋ฌ ๋๋น 10~100๋ฐฐ ๋น ๋ฅธ ์๋๋ฅผ ์ ๊ณตํ๋ค.
2. ๋ด๋ถ์ ์ผ๋ก ES Module์ ์ฌ์ฉ - ๋ธ๋ผ์ฐ์ ๊ฐ ํด์ํ ์ ์๋ค!
Vite๋ ES Module์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ผ๋ถ ๋ฒ๋ค๋ฆฌ์ ๊ธฐ๋ฅ์ ์ฐจ์งํ ์ ์๊ฒ ํ๋ค.
์ฆ, Vite๋ ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋งค์ฐ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์๋ค!
*๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ํ๋ก๋์ ํ๊ฒฝ
Vite๋ ๊ฐ๋ฐํ๊ฒฝ๊ณผ ํ๋ก๋์ ํ๊ฒฝ์์ ๋ค๋ฅด๊ฒ ๋์ํ๋ค.
- ๊ฐ๋ฐ ํ๊ฒฝ:
- ๊ฐ๋ฐ ์๋ฒ์์๋ Hot Module Replacement (HMR)์ ํ์ฉํ์ฌ ๋น ๋ฅธ ๋ฐ๋ณต ๊ฐ๋ฐ์ ์ง์ํฉ๋๋ค.
- ์ฝ๋๋ ํ์ํ ๋๋ง๋ค ๋ธ๋ผ์ฐ์ ์์ ๋์ ์ผ๋ก ์ปดํ์ผ๋๊ณ ์ ๊ณต๋๋ฏ๋ก ๋น ๋ฅธ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญํ๋ ํ์ผ์ด๋ ๋ชจ๋์ด ๋ณ๊ฒฝ๋ ๋, ํ์ํ ๋ถ๋ถ๋ง ๋ค์ ์ปดํ์ผ๋๊ณ ๊ฐฑ์ ๋ฉ๋๋ค.
- ํ๋ก๋์
ํ๊ฒฝ:
- ํ๋ก๋์ ๋น๋์์๋ Vite๋ ํธ๋ฆฌ์์ดํน(Tree-Shaking)๊ณผ ๊ฐ์ ์ต์ ํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๊ณ ์ต์ข ๋ฒ๋ค์ ์ต์ ํํฉ๋๋ค.
- ์ฝ๋ ๋ถํ (Splitting)์ ํตํด ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ ๋ฒ๋ค์ ํฌํจ๋์ง ์๋๋ก ํฉ๋๋ค.
- ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ ํ๋ก๋์ ํ๊ฒฝ์ ์ต์ ํ๋ ์์ ๋ฒ๋ค๋ก ์์ฑ๋ฉ๋๋ค.
๐๊ธฐํ: ์ปดํ์ผ๊ณผ ๋น๋
โ๐ ์ปดํ์ผ
์ปดํ์ผ์ React ์ฝ๋(ํนํ JSX ๋ฌธ๋ฒ)๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ JavaScript ์ฝ๋๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค. Babel๊ณผ ๊ฐ์ ์ปดํ์ผ๋ฌ๊ฐ JSX๋ฅผ ์์ JavaScript๋ก ๋ณํํ๋ ์ญํ ์ ํ๋ค. ์ปดํ์ผ ๋จ๊ณ์์์ ์ฃผ์ ๋ชฉ์ ์ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ๊ณ ์์ค์ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
์ดํ, Polyfill์ด ํ์ํ ๊ฒฝ์ฐ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ์ต์ JavaScript ๊ธฐ๋ฅ์ ์ง์ํ๋๋ก ๋ณด์ ์์ ์ด ์ถ๊ฐ๋ ์ ์๋ค. ์ด๋ Babel์ @babel/preset-env๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์ ํ์ํ Polyfill๋ง ์ ํ์ ์ผ๋ก ํฌํจํ๊ฑฐ๋ ์ ์ฒด Polyfill์ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์ค์ ํ ์ ์๋ค. Polyfill์ ์ถ๊ฐํ๋ฉด Promise๋ Array.prototype.includes์ ๊ฐ์ ์ต์ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ์์๋ React ์ฝ๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋ ์ ์๊ฒ ๋๋ค.
โ๐ ๋น๋
๋น๋๋ ์ปดํ์ผ๋ ์ฝ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์์์ ์ต์ ํํ๊ณ ํจํค์งํ์ฌ ๋ฐฐํฌํ ์ ์๋ ํํ๋ก ๋ง๋๋ ๊ณผ์ ์ด๋ค. Webpack์ด๋ Vite๊ฐ์ ๋น๋ ๋๊ตฌ๊ฐ ์ด ๊ณผ์ ์ ์ํํ๋ฉฐ, ์ฝ๋ ์์ถ, ํธ๋ฆฌ ์์ดํน(Tree Shaking), ์ฝ๋ ์คํ๋ฆฌํ (Code Splitting) ๋ฑ ์ต์ ํ ์์ ์ ํฌํจํ๋ค.
https://f-lab.kr/insight/web-development-build-tools-comparison
'๐ป์น(Web) > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React hook: useEffect, useState, useMemo, useCallback (0) | 2024.11.10 |
---|---|
[TypeScript]TypeScript ์ดํดํ๊ธฐ(1) - ํ์ ์งํฉ / ์ถ๋ก / ๋จ์ธ (0) | 2024.09.04 |
[TypeScript]TypeScript์ ๊ฐ์ ๋ฐ ๊ธฐ์ด (3) | 2024.09.03 |
ํ๋ก ํธ์๋ ์ฝ๋ฉ์ปจ๋ฒค์ (0) | 2024.07.13 |
[React]Custom Hook (0) | 2024.06.28 |