์ ๋ ํญ์ npx create-react-app
๋ช
๋ น์ด๋ก React ํ๋ก์ ํธ๋ฅผ ์์ฑํด์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ react์ ๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ๋ฐ๋๋ผ js๋ก ๋ง๋ค์ด๋ณด๋ฉฐ webpack์ ์ฒ์ ์ ์ฉ์์ผ๋ณด์๊ณ , ์ด๋ฒ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ฅผ ํ์ตํด๋ณด๋ฉด์,
"Hot Module Replacement(HMR)๋ ์ฝ๋ ๋ฒ๋ค๋ง ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ๋ชจ๋ ๋ฒ๋ค๋ฌ๊ฐ ์ ๊ณตํ๋ค๊ณ ํ๋๋ฐ, ๋๋ ํ ๋ฒ๋ ๋ฒ๋ค๋ฌ๋ฅผ ๋ฐ๋ก ์ค์ ํ ์ ์ด ์๋๋ฐ๋ ์ด ๊ธฐ๋ฅ๋ค์ด ์ ๋์ํ๋ค?"๋ผ๋ ์๋ฌธ์ด ๋ค์์ต๋๋ค.
๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ํ์ผ์ ๋ฌถ๊ณ , ๊ฐ๋ฐ ๋์ค ์ค์๊ฐ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๋ ๋ฐ ํ์ํ ๋๊ตฌ๋ผ๊ณ ํ์ตํ๋๋ฐ, ์ฌํ๊ป ์ง์ ์ค์ ํ ์ ์ด ์์์๋ ๋ถ๊ตฌํ๊ณ ํ๋ก์ ํธ๊ฐ ์ ๋์๊ฐ๋ ์ด์ ๊ฐ ๊ถ๊ธํด์ ธ์ ์์๋ณธ ๋ด์ฉ๊ณผ ๊ณผ์ ์ ์์ฑํด๋ณด๋ ค ํฉ๋๋ค.
์ฌ๋ฌ ํ์ต์ ํด๋ณด๋ฉฐ, ์ ๊ฐ ์ฌํ๊ป react ํ๋ก์ ํธ๋ฅผ ํ๋ฉฐ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์ค์นํ ์ ์ด ์์๋ ์ด์ ๋ npx create-react-app
๋ช
๋ น์ด๊ฐ ํ๋ก์ ํธ ์์ฑ ์ ๊ธฐ๋ณธ์ ์ผ๋ก Webpack์ ์ค์นํด์ฃผ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ผ๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
์ ๋ ๊ทธ๋์ ์ ๊ฐ ๋ง๋๋ ํ๋ก์ ํธ๊ฐ Webpack ๋๋ถ์ ์ ๋์๊ฐ๊ณ ์๋ค๋ ๊ฒ๋ ๋ชจ๋ฅด๊ณ ์ฌ์ฉํด์จ ์
์ด์์ต๋๋คโฆ (์ฌํ๊ป ๋ชจ๋ฅด๊ณ ์ฌ์ฉํ๋ค๊ณ ํ๋.. ๊ต์ฅํ ๋ถ๋๋ฌ์์ง๋๋ผ๊ณ ์โฆโฆ.)
๊ทธ๋์ ์ ๋ ์ ๊ฐ ๊ณ์ ํธํ๊ฒ ์ฌ์ฉํด์ค๋ npx create-react-app
๋ช
๋ น์ด๊ฐ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ป๊ฒ ๋์ํ๋์ง, ์ด๋ค ๊ณผ์ ์ผ๋ก ์ด๋ค ๊ฒ๋ค์ ์ค์นํ๊ณ , ์ด๋ค ํธ๋ฆฌํจ์ ์ ๊ณตํ๊ณ ์์๋์ง๋ฅผ ์์๋ณด๊ณ ์ถ์ด์ก์ต๋๋ค.
npx create-react-app
์ด ๋ด๋ถ์ ์ผ๋ก ํ๋ ์ผ ?npx create-react-app
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ ๋, ์ผ์ด๋๋(?) ์ผ์ ํฌ๊ฒ ์๋์ ๊ฐ์ต๋๋ค.
Webpack์ ๋ฒ๋ค๋ฌ๋ก์, ์ฝ๋์ ๋ชจ๋์ ํ๋์ ํ์ผ๋ก ๋ฌถ์ด ์ฃผ๊ณ , HMR๊ณผ ํธ๋ฆฌ ์์ดํน(Tree Shaking) ๊ฐ์ ์ต์ ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์๋ ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก npx create-react-app
์ ์คํ ์๋ฃํ์ ๋, ์จ๊ฒจ์ง Webpack ์ค์ ํ์ผ์ ์์ ์ฝ๋์
๋๋ค.
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: __dirname + '/dist',
},
devServer: {
contentBase: './dist',
hot: true, // HMR ํ์ฑํ
},
};
์ด๋ ๊ฒ ์จ๊ฒจ์ ธ์๋ ์ค์ ๋๋ถ์, npx create-react-app
๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด Webpack์ด ์๋์ผ๋ก ์ค์น ๋๊ณ , ์ธํ
๋๋ ๊ฒ์
๋๋ค.
๋๋ถ์ ์ ๋ ๋ฒ๋ค๋ฌ ์ค์ ์ ๋ฐ๋ก ํ์ง ์์๋ ํ๋ก์ ํธ๋ฅผ ์ํํ ์งํํ ์ ์์๋ ๊ฒ๋๋ค.
npx create-react-app
์์ด React ํ๋ก์ ํธ ๋ง๋ค๊ธฐ ?๊ทธ๋ ๋ค๋ฉด Webpack ์์ด React ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ์ ์๋์ง ์๋ฌธ์ด ๋ค์์ต๋๋ค. ๋จ์ํ ๋ฒ๋ค๋ฌ๋ฅผ ์ค์นํด์ฃผ๋ ๊ฒ์ด๋ผ๋ฉด, โreact, react-dom, babel ๋ฑ๋ง ์ค์นํ ํ์ ๋ด๊ฐ ๋ฐ๋ก ๋ฒ๋ค๋ฌ๋ฅผ ์ค์นํ ๋ค ์ธํ
ํด์ฃผ๋ฉด ๋์ง ์์๊น?โํ๋ ์๋ฌธ์ด ๋ค์๊ธฐ ๋๋ฌธ์
๋๋ค.. (ํ์ง๋ง ์ด ๋ช
๋ น์ด๋ฅผ ๋ชจ๋๊ฐ ์ฌ์ฉํ๋ ๋ฐ์๋ ์ญ์ ์ด์ ๊ฐ ์์ต๋๋คโฆใ
ใ
^^)
๊ณผ์ ์ด ๋๋ฌด ๊ธธ๊ธฐ ๋๋ฌธ์, ์ด ๋ถ๋ถ์ ํจ์คํ๊ณ ์๋์ ๋ถํธํ ์ ๋ถํฐ ํ์ธํ์ ๋ ๋ ๋ฏ ํฉ๋๋ค
ํ๋ก์ ํธ ์ด๊ธฐํ
๋จผ์ , ํ๋ก์ ํธ ํด๋๋ฅผ ๋ง๋ค๊ณ NPM ์ด๊ธฐํ๋ฅผ ์งํํฉ๋๋ค.
```bash
mkdir my-react-app
cd my-react-app
npm init -y
```
React ๋ฐ ReactDOM ์ค์น
React์ ReactDOM์ ์ค์นํฉ๋๋ค.
npm install react react-dom
Babel ์ค์
Babel์ ์ต์ JavaScript ๋ฌธ๋ฒ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ์ฝ๋๋ก ๋ณํํ๋ ํธ๋์คํ์ผ๋ฌ์ ๋๋ค.
Babel๊ณผ JSX์ ๋ํ ๋ด์ฉ์ ์ฌ๊ธฐ์ ์ฌ๊ธฐ์ ์์ฑํด๋์์ต๋๋ค.
npm install @babel/core @babel/preset-env @babel/preset-react babel-loader --save-dev
babel.config.json
ํ์ผ์ ํ๋ก์ ํธ ๋ฃจํธ์ ์์ฑํ๊ณ , ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํฉ๋๋ค.
{
"presets": ["@babel/preset-env", "@babel/preset-react"]
}
Webpack ์ค์
์ด์ Webpack์ ์ค์นํ์ฌ ๋ชจ๋์ ๋ฒ๋ค๋งํด์ผ ํฉ๋๋ค.
npm install webpack webpack-cli webpack-dev-server --save-dev
npm install html-webpack-plugin clean-webpack-plugin --save-dev
๊ทธ๋ฐ ๋ค์, webpack.config.js
ํ์ผ์ ๋ง๋ค์ด Webpack ์ค์ ์ ์ ์ํฉ๋๋ค.
์๋ ์ฝ๋๋ ์์ ํ์ผ์ ๋๋ค. ์ค์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์, ์ด๋ฐ ์์ผ๋ก (๊ต์ฅํ ๋ง์ด) ์์ฑํ๋ค ์ ๋๋ง ์ฐธ๊ณ ํ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
module: {
rules: [
{
test: /\\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
},
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html',
}),
new CleanWebpackPlugin(),
],
devServer: {
contentBase: './dist',
hot: true,
},
resolve: {
extensions: ['.js', '.jsx'],
},
};
๊ฐ๋ฐ ํ๊ฒฝ ์ค์
package.json
์ Webpack ๊ฐ๋ฐ ์๋ฒ ๋ช
๋ น์ด๋ฅผ ์ถ๊ฐํฉ๋๋ค.
"scripts": {
"start": "webpack serve --mode development --open",
"build": "webpack --mode production"
}
ํ๋ก์ ํธ ๊ตฌ์กฐ
๊ฐ๋จํ ํ์ผ ๊ตฌ์กฐ๋ฅผ ์ง์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. npx create-react-app
๋ช
๋ น์ด๋ฅผ ์คํํ์ ๋ ๋์ค๋ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ ์ ์ฌํ๊ฒ ๋ง๋ค๋ฉด ๋ฉ๋๋ค
my-react-app/
โโโ dist/
โโโ src/
โ โโโ index.js
โ โโโ App.js
โ โโโ index.html
โโโ webpack.config.js
โโโ babel.config.json
โโโ package.json
โโโ node_modules/
src/index.js
ํ์ผ์๋ ๊ธฐ๋ณธ์ ์ธ React ์ปดํฌ๋ํธ๋ฅผ ์ค์ ํฉ๋๋ค.
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
๊ทธ๋ฆฌ๊ณ src/App.js
ํ์ผ์๋ ๊ฐ๋จํ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํฉ๋๋ค.
import React from 'react';
const App = () => {
return <h1>Hello, React!</h1>;
};
export default App;
src/index.html
ํ์ผ์๋ Webpack์ด ๋ฒ๋ค๋ง๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฐ๊ฒฐํ HTML ๊ตฌ์กฐ๋ก ์์ฑํด์ค๋๋ค.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My React App</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
npx create-react-app
๊ณผ ๋น๊ตํ์ ๋ ๋ถํธํ ์ ์ฐ์ โฆ ๋์ถฉ๋ง ์ฝ์ด๋ณด์ ๋ ๊ต์ฅํ ๋ถํธํ๊ณ ๊ท์ฐฎ์ ์์ ์ด๋ผ๋ ๊ฒ์ ์ ์ ์์ผ์ค ๊ฑฐ๋ผ ์๊ฐ๋ฉ๋๋ค.
์๊ฐ๋ณด๋ค npx create-react-app
๋ช
๋ น์ด๊ฐ ๋ง์ ๊ท์ฐฎ์ ์์
์ ๋์ ํด์ฃผ๊ณ ์์๊ตฌ๋โฆ ํ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
๋๊ฐ๋ด๋ ๋ถํธํ ๊ฒ์ ์ ์ ์์ง๋ง, ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ๋์ ๋น๊ตํ์ฌ ์ฌ์ฉํ์ง ์์ ๋์ ๋จ์ ์ ์ ๋ฆฌํด๋ณด์๋ฉด ์๋ 3๊ฐ์ง ํค์๋๋ก ๋๋ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
create-react-app
์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ํ ๋ชจ๋ ๋ชจ๋(react, react-dom, babel, webpack ๋ฑ)์ ์๋์ผ๋ก ์ค์นํด์ค๋๋ค. ํ์ง๋ง ์๋์ผ๋ก ์ค์ ํ ๊ฒฝ์ฐ, ๊ฐ ๋ชจ๋์ ์ผ์ผ์ด ์ค์นํด์ผ ํ๋ฉฐ, ์ค์น ๊ณผ์ ์์ ํจํค์ง ๊ฐ ๋ฒ์ ์ถฉ๋ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.webpack.config.js
๋ babel.config.json
๊ณผ ๊ฐ์ ์ค์ ํ์ผ์ ์ง์ ์์ฑํด์ผ ํฉ๋๋ค. ์ด๋ ๋ฒ๋ค๋ฌ ๋ฐ ํธ๋์คํ์ผ๋ฌ์ ๋ํ ๊น์ ์ดํด๊ฐ ์์ผ๋ฉด ๋งค์ฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ํนํ, ๊ฐ ์ค์ ์ ํ๋ก์ ํธ ํน์ฑ์ ๋ง๊ฒ ์กฐ์ ํด์ผ ํ๋ ์์
์ ์ด๋ณด์์๊ฒ ํฐ ์ฅ๋ฒฝ์ด ๋ฉ๋๋ค.npx create-react-app
์ ์ด๋ฏธ ์ ๋๋ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ์ง๋ง, ์๋ ์ค์ ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ง์ ์ ๋ฆฌํ๊ณ ์ธํ
ํด์ผ ํฉ๋๋ค. ํ๋ก์ ํธ์ ํจ์จ์ ์ธ ๊ด๋ฆฌ๋ฅผ ์ํด์๋ ์ด๊ธฐ๋ถํฐ ์ผ๊ด๋ ๊ตฌ์กฐ๋ฅผ ์ ์งํด์ผ ํ๋ฏ๋ก, ์ด ์์
์ญ์ ์๊ฐ์ด ์์๋ฉ๋๋ค.index.js
, App.js
, index.html
๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ํ์ผ๋ ์๋์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค. create-react-app
์ ์ด๋ฌํ ํ์ผ๋ค์ ์๋์ผ๋ก ์์ฑํด์ฃผ์ง๋ง, ์๋ ์ค์ ์์๋ ๊ฐ ํ์ผ์ ์ง์ ์์ฑํ๊ณ ์ด๊ธฐ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.์ด์จ๋ ๊ฒฐ๋ก ์ ์ผ๋ก npx create-react-app
์ ์ฌ์ฉํ์ง ์๊ณ ์๋์ผ๋ก React ํ๋ก์ ํธ๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๊ต์ฅํ ๋นํจ์จ์ ์ด๊ณ , ์ ๋ง ๊ท์ฐฎ์ ์์
์ด๋ผ๋ ๊ฒ์ ์ ์ ์์์ต๋๋ค.
์ด๋ ๊ฒ ์ง์ react ํ๋ก์ ํธ๋ฅผ ์ธํ ํ๋ ๊ณผ์ ์ ์ ๋ฆฌํ๊ณ ๋๋, ์ด๋ฒ์๋ webpack์ด๋ vite์ ๊ฐ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ ์์ด react ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ๊ถ๊ธํด์ก์ต๋๋ค.
์ฐ์ webpack์ ์์ ๋ฒ๋ฆฌ๋ฉด ์ ๊ฐ ํ์์ ๋ง๋ค์ด์ค๋ react ํ๋ก์ ํธ์๋ ์ ํ ๋ค๋ฅด๊ฒ ๊ฐ๋ฐํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
ES6 ๋ชจ๋์ ๋ธ๋ผ์ฐ์ ๊ฐ ํด์ ๋ถ๊ฐ
React๋ ๋๋ถ๋ถ ES6 ๋ชจ๋๋ก ์์ฑ๋ฉ๋๋ค. ํ์ง๋ง, ๋ธ๋ผ์ฐ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฌํ ๋ชจ๋์ ํด์ํ ์ ์์ต๋๋ค. (๋ฌผ๋ก ์ต๊ทผ์๋ ๊ฑฐ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ๊ธด ํฉ๋๋ค.)
๊ทธ๋์ ๋ชจ๋ ๋ฒ๋ค๋ฌ ์์ด React ํ๋ก์ ํธ๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ์คํํ๋ ค๊ณ ํ๋ฉด ๋ชจ๋ ๊ฐ์ ์์กด์ฑ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๊ณ , ์ผ๋ถ ๋ธ๋ผ์ฐ์ ์์๋ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
์๋ฅผ ๋ค์๋ฉด ์๋์ ๊ฐ์ด import
๊ฐ ์ฌ์ฉ๋ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ์ดํดํ์ง ๋ชปํฉ๋๋ค.
import React from 'react';
import ReactDOM from 'react-dom';
ReactDOM.render(<App />, document.getElementById('root'));
ES6 ๋ชจ๋์ ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ๋ import
ํค์๋๋ฅผ ๋ฐ๋ก ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฒ๋ค๋ง ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ๋ธ๋ผ์ฐ์ ์์ ์ ์์ ์ผ๋ก ์๋ํฉ๋๋ค.
์ฝ๋ ์ต์ ํ์ ์ฑ๋ฅ ๋ฌธ์
๋ฒ๋ค๋ฌ๋ ์ฌ๋ฌ ํ์ผ๋ก ๋๋์ด ์๋ ๋ชจ๋์ ํ๋์ ๋ฒ๋ค๋ก ๋ฌถ์ด์ฃผ๊ณ , ์ฝ๋์ ์ค๋ณต์ ์ต์ํํด ์ฑ๋ฅ์ ์ต์ ํํฉ๋๋ค. ํ์ง๋ง ๋ฒ๋ค๋ฌ ์์ด ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด, ๊ฐ ๋ชจ๋ ํ์ผ์ด ๋ฐ๋ก๋ฐ๋ก ๋ก๋๋๋ฉด์ ๋คํธ์ํฌ ์์ฒญ์ด ์ฆ๊ฐํ๊ณ ํ์ด์ง ๋ก๋ฉ ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค. ํนํ ๋ํ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋๋๋ฌ์ง๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
Hot Module Replacement (HMR) ๊ฐ์ ๊ฐ๋ฐ ํธ์ ๊ธฐ๋ฅ ๋ถ์ฌ
๊ฐ์ธ์ ์ผ๋ก ๋ชจ๋ ๋ฒ๋ค๋ฌ๊ฐ ํ์ํ ๊ฐ์ฅ ํฐ ์ด์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. npx create-react-app
์ผ๋ก ๋ง๋ค์ด์ง react ํ๋ก์ ํธ๋ก ๊ฐ๋ฐ์ ํ๊ฒ ๋๋ฉด, ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ก๊ณ ์นจํ์ง ์์๋ ์ฝ๋๋ฅผ ์ ์ฅ๋ง ํ๋ฉด ์ค์๊ฐ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํด์ค๋๋ค.
์ด๋ ๊ฒ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ HMR ๊ธฐ๋ฅ์ ์ ๊ณตํด ์ฝ๋ ์์ ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ก๊ณ ์นจํ์ง ์๊ณ ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ค์๊ฐ์ผ๋ก ๋ฐ์๋๋๋ก ๋์ต๋๋ค. ํ์ง๋ง ๋ฒ๋ค๋ฌ๊ฐ ์์ผ๋ฉด ๋งค๋ฒ ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋์ผ๋ก ์๋ก๊ณ ์นจํด์ผ ํ๋ฉฐ, ์์ฐ์ฑ์ด ๋จ์ด์ง๋๋ค.
์ฝ๋ ์์ถ, ํธ๋ฆฌ ์์ดํน(๋ถํ์ํ ์ฝ๋ ์ ๊ฑฐ)
๋ฒ๋ค๋ฌ๋ ์ต์ข ์ ์ผ๋ก ๋ฐฐํฌํ ์ฝ๋๋ฅผ ์์ถํ๊ณ , ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ํธ๋ฆฌ ์์ดํน(tree shaking) ๊ธฐ๋ฅ์ ํตํด ์ต์ ํ๋ ํ์ผ์ ์์ฑํฉ๋๋ค. ๋ฒ๋ค๋ฌ ์์ด ์์ ํ๋ฉด ์ด๋ฌํ ์ต์ ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, ํ์ผ ํฌ๊ธฐ๊ฐ ์ปค์ง๊ณ ๋ถํ์ํ ์ฝ๋๊ฐ ํฌํจ๋ ์ํ๋ก ๋ฐฐํฌ๋ฉ๋๋ค.
์ด์ ๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ๊ฐ react ํ๋ก์ ํธ์ ๊ผญ ํ์ํ๋ค๋ ๊ฒ์ ์ดํดํ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ, ๊ทธ๋ ๋ค๋ฉด npx create-react-app
๋ช
๋ น์ด๋ ์ vite๋ ๋ค๋ฅธ ๋ชจ๋ ๋ฒ๋ค๋ฌ๊ฐ ์๋, Webpack์ธ ๊ฒ์ธ์ง๊ฐ ๊ถ๊ธํด์ก์ต๋๋ค.
์ฐ์ ์ ์ผ๋ก ์ด npx create-react-app
๋ช
๋ น์ด๋ฅผ ๊ฐ์ธ์ด ๋ง๋ ๊ฒ์ธ์ง, react๋ฅผ ๋ง๋ Meta์์ ๊ณต์์ ์ผ๋ก ๋ง๋ค๊ณ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ์ธ์ง๋ถํฐ ํ์คํ ์์์ผ๊ฒ ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก
npx create-react-app
๋ช ๋ น์ด๋ ๊ฐ์ธ์ด ๋ง๋ ๊ฒ์ด ์๋, Facebook(ํ์ฌ๋ Meta)์์ React ๊ฐ๋ฐ์ ์์ํ ํ์ด ๊ณต์์ ์ผ๋ก ๋ฐฐํฌํ ๋๊ตฌ๋ผ๊ณ ํฉ๋๋ค.
์ค์ ๋ก ์๋ ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋ฉด npx create-react-app
๋ช
๋ น์ด๋ฅผ ๊ณต์์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
https://react.dev/learn/start-a-new-react-project
https://create-react-app.dev/docs/getting-started/
๊ทธ๋ ๋ค๋ฉด ์ react๋ ๊ณต์์ ์ผ๋ก Vite
์ ๊ฐ์ ๋ค๋ฅธ ๋ฒ๋ค๋ฌ๊ฐ ์๋, Webpack์ ์๋์ผ๋ก ์ค์นํ๋๋ก ๋ง๋ค์ด๋ ๊ฒ์ผ๊น์?
์ด ๋ด์ฉ์ ๊ณต์์ ์ผ๋ก๋ ์ฐพ์ ์ ์์์ง๋ง, Webpack๊ณผ Vite์ ์ฐจ์ด๋ฅผ ํตํด ๋๋ต์ ์ผ๋ก ์ Webpack์ ์ฌ์ฉํ๋์ง๋ ์ถ์ธกํ ์ ์์ต๋๋ค.
๊ด๋ฒ์ํ ์ํ๊ณ์ ํ์ฅ์ฑ
Webpack์ ๋ค์ํ ํ๋ฌ๊ทธ์ธ๊ณผ ๋ก๋๋ฅผ ์ ๊ณตํ๋ฉฐ, React ์ํ๊ณ์์ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ํนํ CSS, ์ด๋ฏธ์ง, ํฐํธ ๋ฑ ๋ค์ํ ์์ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ๋ฆฌํ๋ฉฐ, JavaScript๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ง ํ์ผ ํฌ๋งท์ ํ ๋ฒ์ ๊ด๋ฆฌํ๊ณ ์ต์ ํํ ์ ์์ต๋๋ค.
๊ฐ๋ ฅํ ์ปค๋ฎค๋ํฐ์ ์์ ์ฑ
Webpack์ ์ค๋ ์๊ฐ ๋์ ๊ฐ๋ฐ๋์ด ์์ผ๋ฉฐ, ํฐ ์ปค๋ฎค๋ํฐ์ ๋ง์ ๋ฌธ์๋ฅผ ๋ณด์ ํ๊ณ ์์ด ์์ ์ฑ์ด ๋์ต๋๋ค. ๋ํ React ํ๋ก์ ํธ์์ ๋งค์ฐ ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ์๋ค์ด Webpack์ ์ตํ๊ณ ํ๋ก์ ํธ์ ์ ์ฉํ๋ ๋ฐ ์ต์ํฉ๋๋ค.
์ฌ์ค ์ด ์ด์ ๋ ํฌ๊ฒ ์ค์ํ์ง ์์ ๋ถ๋ถ์ธ๊ฒ, ์ค์ ๊ณต์ ๋ฌธ์์์ ๊ตณ์ด Webpack๋ง์ ์ฌ์ฉํด์ผ ํ๋ค๋ ๋ฑ์ ์ธ๊ธ์ ์ ํ ์์ต๋๋ค.
์ค์ ๋ก ์๋์ ๊ฐ์ด ๊ณต์ ๋ฌธ์์์ ํ์ํ๋ค๋ฉด Vite
๋ Parcel
๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ๋ฅผ ํ์ฉํ๋ผ๊ณ ๋ ๋์ด์์ต๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋จ์ง Webpack์ ์ด ์ด์ ๋ ๊ด๋ฒ์ํ ์ํ๊ณ์ ํ์ฅ์ฑ ๋๋ฌธ์ด๋ผ๊ณ ์ถ์ธกํด๋ณผ ์ ์๊ณ , Vite
๋ ๋ค๋ฅธ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํด๋ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ ๋ํ ํ์ธํ ์ ์์์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ React์ ๊ฐ์ ํ๋ ์์ํฌ์์ ํ์์ ์ธ ๋๊ตฌ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ react ํ๋ก์ ํธ์์๋ npx create-react-app
๋ช
๋ น์ด๋ฅผ ํตํด ๊ฐํธํ๊ฒ ๊ธฐ๋ณธ ์ธํ
์ ์๋ฃํด์ค ์ ์๊ณ , ์๋์ผ๋ก webpack์ ์ค์นํ๊ณ ์ธํ
ํด์ค๋๋ค. webpack
์ด ์๋ ๋ค๋ฅธ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ๊ณต์์ ์ผ๋ก ์ผ๋ง๋ ์ํ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ํด๋ ๋๋ค๊ณ ์ธ๊ธํ๋ ๊ฒ๋ ํ์ธํ ์ ์์์ต๋๋ค.
๋ฌผ๋ก ์ ๋ ์ ๊ฐ ์ฌ์ฉํ๋ react๊ฐ ๋ฒ๋ค๋ฌ๊ฐ ์ด๋ฏธ ์ค์น๋์ด ์์๋ ๊ฑด์ง๋ ๋ชจ๋ฅด๊ณ ์ฌํ๊ป react๋ฅผ ์ฌ์ฉํด์์ง๋งโฆ ์ด์ ๋ ํ์คํ๊ฒ npx create-react-app
๋ช
๋ น์ด๊ฐ ํด์ฃผ๋ ์ญํ ๊ณผ ๋ฒ๋ค๋ฌ๊ฐ ํ๋ก์ ํธ์์ ํ์ํ ์ด์ ๋ฅผ ์๊ณ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
ํนํ, ์ ๋ง ๋ถ๋๋ฝ์ง๋งโฆ ํญ์ ์๋ฌด ์์ฌ ์์ด npx create-react-app
๋ช
๋ น์ผ๋ก react ํ๋ก์ ํธ๋ฅผ ์์ฑํด์๊ณ , ๋ฐ๋ก ๊ตฌํ์ ์ง์คํ๋๋ผ ํ๋ฒ๋ ์ด๋ป๊ฒ ํ๋ก์ ํธ๊ฐ ์์ฑ๋๋์ง์ ๋ํด ์๊ฐํด๋ณธ ์ ์์๋๋ฐ, ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋ํด ๊ณต๋ถํด๋ณด๋ฉด์ ์ด์ ๋ผ๋ ์ด๋ฐ ์๋ฌธ๊น์ง ํด๊ฒฐํ ์ ์์ด ๋๋ฌด ๋คํ์ด๋ผ๋ ์๊ฐ์ด ๋ญ๋๋ค.
https://react.dev/learn/start-a-new-react-project
https://create-react-app.dev/docs/getting-started/
https://create-react-app.dev/docs/getting-started#get-started-immediately