๐Ÿคฟ ๋”ฅ๋‹ค์ด๋ธŒ - react์™€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ ?

์ •ํ˜œ์ธยท2024๋…„ 10์›” 8์ผ
0

๋”ฅ๋‹ค์ด๋ธŒ

๋ชฉ๋ก ๋ณด๊ธฐ
3/4

๐Ÿค” "์™œ ๋‚˜๋Š” ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์„ค์ •ํ•œ ์ ์ด ์—†์ง€?"

์ €๋Š” ํ•ญ์ƒ npx create-react-app ๋ช…๋ น์–ด๋กœ React ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด์™”์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ react์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ฐ”๋‹๋ผ js๋กœ ๋งŒ๋“ค์–ด๋ณด๋ฉฐ webpack์„ ์ฒ˜์Œ ์ ์šฉ์‹œ์ผœ๋ณด์•˜๊ณ , ์ด๋ฒˆ์— ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ํ•™์Šตํ•ด๋ณด๋ฉด์„œ,

"Hot Module Replacement(HMR)๋‚˜ ์ฝ”๋“œ ๋ฒˆ๋“ค๋ง ๊ฐ™์€ ๊ธฐ๋Šฅ๋“ค์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ๋‚˜๋Š” ํ•œ ๋ฒˆ๋„ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ๋”ฐ๋กœ ์„ค์ •ํ•œ ์ ์ด ์—†๋Š”๋ฐ๋„ ์ด ๊ธฐ๋Šฅ๋“ค์ด ์ž˜ ๋™์ž‘ํ–ˆ๋„ค?"๋ผ๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋Š” ํŒŒ์ผ์„ ๋ฌถ๊ณ , ๊ฐœ๋ฐœ ๋„์ค‘ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋„๊ตฌ๋ผ๊ณ  ํ•™์Šตํ–ˆ๋Š”๋ฐ, ์—ฌํƒœ๊ป ์ง์ ‘ ์„ค์ •ํ•œ ์ ์ด ์—†์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๊ฐ€ ์ž˜ ๋Œ์•„๊ฐ€๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ•ด์ ธ์„œ ์•Œ์•„๋ณธ ๋‚ด์šฉ๊ณผ ๊ณผ์ •์„ ์ž‘์„ฑํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.


1. ๐Ÿ˜– ์—ฌํƒœ๊ป ๋ชจ๋ฅด๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋˜ Webpackโ€ฆ.

์—ฌ๋Ÿฌ ํ•™์Šต์„ ํ•ด๋ณด๋ฉฐ, ์ œ๊ฐ€ ์—ฌํƒœ๊ป react ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์„ค์น˜ํ•œ ์ ์ด ์—†์—ˆ๋˜ ์ด์œ ๋Š” npx create-react-app ๋ช…๋ น์–ด๊ฐ€ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ Webpack์„ ์„ค์น˜ํ•ด์ฃผ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ๊ทธ๋™์•ˆ ์ œ๊ฐ€ ๋งŒ๋“œ๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ Webpack ๋•๋ถ„์— ์ž˜ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ๋ชจ๋ฅด๊ณ  ์‚ฌ์šฉํ•ด์˜จ ์…ˆ์ด์—ˆ์Šต๋‹ˆ๋‹คโ€ฆ (์—ฌํƒœ๊ป ๋ชจ๋ฅด๊ณ  ์‚ฌ์šฉํ–ˆ๋‹ค๊ณ  ํ•˜๋‹ˆ.. ๊ต‰์žฅํžˆ ๋ถ€๋„๋Ÿฌ์›Œ์ง€๋”๋ผ๊ณ ์š”โ€ฆโ€ฆ.)

๊ทธ๋ž˜์„œ ์ €๋Š” ์ œ๊ฐ€ ๊ณ„์† ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์˜ค๋˜ npx create-react-app ๋ช…๋ น์–ด๊ฐ€ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€, ์–ด๋–ค ๊ณผ์ •์œผ๋กœ ์–ด๋–ค ๊ฒƒ๋“ค์„ ์„ค์น˜ํ•˜๊ณ , ์–ด๋–ค ํŽธ๋ฆฌํ•จ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์—ˆ๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด๊ณ  ์‹ถ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

2. โš™๏ธnpx create-react-app์ด ๋‚ด๋ถ€์ ์œผ๋กœ ํ•˜๋Š” ์ผ ?

npx create-react-app ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, ์ผ์–ด๋‚˜๋Š”(?) ์ผ์€ ํฌ๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • React ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ์ ์ธ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • Webpack์„ ์„ค์น˜ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ๋ฒˆ๋“ค๋ง ๋ฐ HMR ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€๋กœ Babel, ESLint์™€ ๊ฐ™์€ ํ•„์ˆ˜ ๋„๊ตฌ๋“ค๋„ ํ•จ๊ป˜ ์„ค์น˜ํ•ด์ค๋‹ˆ๋‹ค.

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์ด ์ž๋™์œผ๋กœ ์„ค์น˜ ๋˜๊ณ , ์„ธํŒ…๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋•๋ถ„์— ์ €๋Š” ๋ฒˆ๋“ค๋Ÿฌ ์„ค์ •์„ ๋”ฐ๋กœ ํ•˜์ง€ ์•Š์•„๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ์›ํ™œํžˆ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒ๋‹ˆ๋‹ค.

3. ๐Ÿ”จnpx create-react-app ์—†์ด React ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ ?

๊ทธ๋ ‡๋‹ค๋ฉด Webpack ์—†์ด React ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์˜๋ฌธ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์„ค์น˜ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋ผ๋ฉด, โ€˜react, react-dom, babel ๋“ฑ๋งŒ ์„ค์น˜ํ•œ ํ›„์— ๋‚ด๊ฐ€ ๋”ฐ๋กœ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์„ค์น˜ํ•œ ๋’ค ์„ธํŒ…ํ•ด์ฃผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?โ€™ํ•˜๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.. (ํ•˜์ง€๋งŒ ์ด ๋ช…๋ น์–ด๋ฅผ ๋ชจ๋‘๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์—๋Š” ์—ญ์‹œ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹คโ€ฆใ…Žใ…Ž^^)

๊ณผ์ •์ด ๋„ˆ๋ฌด ๊ธธ๊ธฐ ๋•Œ๋ฌธ์—, ์ด ๋ถ€๋ถ„์€ ํŒจ์Šคํ•˜๊ณ  ์•„๋ž˜์˜ ๋ถˆํŽธํ•œ ์ ๋ถ€ํ„ฐ ํ™•์ธํ•˜์…”๋„ ๋  ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค

- ์ง์ ‘ ์„ค์ •ํ•ด์„œ React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ • ์ •๋ฆฌ

  1. ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™”
    ๋จผ์ €, ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  NPM ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ```bash
    mkdir my-react-app
    cd my-react-app
    npm init -y
    ```
  2. React ๋ฐ ReactDOM ์„ค์น˜

    React์™€ ReactDOM์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    npm install react react-dom
  3. 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"]
    }
  4. 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'],
      },
    };
  5. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

    package.json์— Webpack ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๋ช…๋ น์–ด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    "scripts": {
      "start": "webpack serve --mode development --open",
      "build": "webpack --mode production"
    }
  6. ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

    ๊ฐ„๋‹จํ•œ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 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>

4. ๐Ÿฅต npx create-react-app๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋ถˆํŽธํ•œ ์ 

์šฐ์„ โ€ฆ ๋Œ€์ถฉ๋งŒ ์ฝ์–ด๋ณด์…”๋„ ๊ต‰์žฅํžˆ ๋ถˆํŽธํ•˜๊ณ  ๊ท€์ฐฎ์€ ์ž‘์—…์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์œผ์‹ค ๊ฑฐ๋ผ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.

์ƒ๊ฐ๋ณด๋‹ค npx create-react-app ๋ช…๋ น์–ด๊ฐ€ ๋งŽ์€ ๊ท€์ฐฎ์€ ์ž‘์—…์„ ๋Œ€์‹  ํ•ด์ฃผ๊ณ  ์žˆ์—ˆ๊ตฌ๋‚˜โ€ฆ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€๋ด๋„ ๋ถˆํŽธํ•œ ๊ฒƒ์€ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๋น„๊ตํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ์˜ ๋‹จ์ ์„ ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด ์•„๋ž˜ 3๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ๋ชจ๋‘ ์ง์ ‘ ์„ค์น˜ํ•ด์•ผ ํ•จ:
    create-react-app์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ชจ๋“ˆ(react, react-dom, babel, webpack ๋“ฑ)์„ ์ž๋™์œผ๋กœ ์„ค์น˜ํ•ด์ค๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•  ๊ฒฝ์šฐ, ๊ฐ ๋ชจ๋“ˆ์„ ์ผ์ผ์ด ์„ค์น˜ํ•ด์•ผ ํ•˜๋ฉฐ, ์„ค์น˜ ๊ณผ์ •์—์„œ ํŒจํ‚ค์ง€ ๊ฐ„ ๋ฒ„์ „ ์ถฉ๋Œ ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์„ธํŒ… ํŒŒ์ผ์„ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•จ:
    webpack.config.js๋‚˜ babel.config.json๊ณผ ๊ฐ™์€ ์„ค์ • ํŒŒ์ผ์„ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฒˆ๋“ค๋Ÿฌ ๋ฐ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด๊ฐ€ ์—†์œผ๋ฉด ๋งค์šฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ๊ฐ ์„ค์ •์„ ํ”„๋กœ์ ํŠธ ํŠน์„ฑ์— ๋งž๊ฒŒ ์กฐ์ •ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์€ ์ดˆ๋ณด์ž์—๊ฒŒ ํฐ ์žฅ๋ฒฝ์ด ๋ฉ๋‹ˆ๋‹ค.
  3. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ์„ธํŒ…ํ•ด์•ผ ํ•จ:
    npx create-react-app์€ ์ด๋ฏธ ์ •๋ˆ๋œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ์ˆ˜๋™ ์„ค์ • ์‹œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ์ •๋ฆฌํ•˜๊ณ  ์„ธํŒ…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์ผ๊ด€๋œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ด ์ž‘์—… ์—ญ์‹œ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.
  4. ๊ธฐ๋ณธ ํŒŒ์ผ๋„ ๋ชจ๋‘ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ:
    index.js, App.js, index.html๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ํŒŒ์ผ๋„ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. create-react-app์€ ์ด๋Ÿฌํ•œ ํŒŒ์ผ๋“ค์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ์ง€๋งŒ, ์ˆ˜๋™ ์„ค์ • ์‹œ์—๋Š” ๊ฐ ํŒŒ์ผ์„ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ๊ฒฐ๋ก ์ ์œผ๋กœ npx create-react-app์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ˆ˜๋™์œผ๋กœ React ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ์ ์ด๊ณ , ์ •๋ง ๊ท€์ฐฎ์€ ์ž‘์—…์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

5. ๐Ÿงจ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ ์—†์ด React ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด ?

์ด๋ ‡๊ฒŒ ์ง์ ‘ react ํ”„๋กœ์ ํŠธ๋ฅผ ์„ธํŒ…ํ•˜๋Š” ๊ณผ์ •์„ ์ •๋ฆฌํ•˜๊ณ  ๋‚˜๋‹ˆ, ์ด๋ฒˆ์—๋Š” webpack์ด๋‚˜ vite์™€ ๊ฐ™์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ ์—†์ด react ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

์šฐ์„  webpack์„ ์—†์• ๋ฒ„๋ฆฌ๋ฉด ์ œ๊ฐ€ ํ‰์†Œ์— ๋งŒ๋“ค์–ด์˜ค๋˜ react ํ”„๋กœ์ ํŠธ์™€๋Š” ์ „ํ˜€ ๋‹ค๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ES6 ๋ชจ๋“ˆ์„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ด์„ ๋ถˆ๊ฐ€

    React๋Š” ๋Œ€๋ถ€๋ถ„ ES6 ๋ชจ๋“ˆ๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ์„ ํ•ด์„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (๋ฌผ๋ก  ์ตœ๊ทผ์—๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•˜๊ธด ํ•ฉ๋‹ˆ๋‹ค.)

    ๊ทธ๋ž˜์„œ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ ์—†์ด React ํ”„๋กœ์ ํŠธ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๊ณ , ์ผ๋ถ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด import ๊ฐ€ ์‚ฌ์šฉ๋œ ์ฝ”๋“œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง์ ‘ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

    import React from 'react';
    import ReactDOM from 'react-dom';
    
    ReactDOM.render(<App />, document.getElementById('root'));

    ES6 ๋ชจ๋“ˆ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๋Š” import ํ‚ค์›Œ๋“œ๋ฅผ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋ฒˆ๋“ค๋ง ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ์ฝ”๋“œ ์ตœ์ ํ™”์™€ ์„ฑ๋Šฅ ๋ฌธ์ œ

    ๋ฒˆ๋“ค๋Ÿฌ๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ๋‚˜๋‰˜์–ด ์žˆ๋Š” ๋ชจ๋“ˆ์„ ํ•˜๋‚˜์˜ ๋ฒˆ๋“ค๋กœ ๋ฌถ์–ด์ฃผ๊ณ , ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•ด ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฒˆ๋“ค๋Ÿฌ ์—†์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด, ๊ฐ ๋ชจ๋“ˆ ํŒŒ์ผ์ด ๋”ฐ๋กœ๋”ฐ๋กœ ๋กœ๋“œ๋˜๋ฉด์„œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด ์ฆ๊ฐ€ํ•˜๊ณ  ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋‘๋“œ๋Ÿฌ์ง„๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. Hot Module Replacement (HMR) ๊ฐ™์€ ๊ฐœ๋ฐœ ํŽธ์˜ ๊ธฐ๋Šฅ ๋ถ€์žฌ

    ๊ฐœ์ธ์ ์œผ๋กœ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฐ€์žฅ ํฐ ์ด์œ ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. npx create-react-app์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ react ํ”„๋กœ์ ํŠธ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๊ฒŒ ๋˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜์ง€ ์•Š์•„๋„ ์ฝ”๋“œ๋ฅผ ์ €์žฅ๋งŒ ํ•˜๋ฉด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•ด์ค๋‹ˆ๋‹ค.

    ์ด๋ ‡๊ฒŒ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋Š” HMR ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด ์ฝ”๋“œ ์ˆ˜์ • ์‹œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜์ง€ ์•Š๊ณ ๋„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜๋˜๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์—†์œผ๋ฉด ๋งค๋ฒˆ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ƒˆ๋กœ๊ณ ์นจํ•ด์•ผ ํ•˜๋ฉฐ, ์ƒ์‚ฐ์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

  4. ์ฝ”๋“œ ์••์ถ•, ํŠธ๋ฆฌ ์‰์ดํ‚น(๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์ œ๊ฑฐ)

    ๋ฒˆ๋“ค๋Ÿฌ๋Š” ์ตœ์ข…์ ์œผ๋กœ ๋ฐฐํฌํ•  ์ฝ”๋“œ๋ฅผ ์••์ถ•ํ•˜๊ณ , ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํŠธ๋ฆฌ ์‰์ดํ‚น(tree shaking) ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ตœ์ ํ™”๋œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฒˆ๋“ค๋Ÿฌ ์—†์ด ์ž‘์—…ํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์ตœ์ ํ™” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ณ  ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ์ƒํƒœ๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

6. ๐ŸŽ‡ ์™œ ํ•˜ํ•„ Webpack ?

์ด์ œ๋Š” ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ 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์„ ์‚ฌ์šฉํ–ˆ๋Š”์ง€๋Š” ์ถ”์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ด‘๋ฒ”์œ„ํ•œ ์ƒํƒœ๊ณ„์™€ ํ™•์žฅ์„ฑ

    Webpack์€ ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋กœ๋”๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, React ์ƒํƒœ๊ณ„์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ CSS, ์ด๋ฏธ์ง€, ํฐํŠธ ๋“ฑ ๋‹ค์–‘ํ•œ ์ž์‚ฐ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์œ ๋ฆฌํ•˜๋ฉฐ, JavaScript๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํŒŒ์ผ ํฌ๋งท์„ ํ•œ ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๊ณ  ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ๊ฐ•๋ ฅํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์•ˆ์ •์„ฑ

    Webpack์€ ์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ๊ฐœ๋ฐœ๋˜์–ด ์™”์œผ๋ฉฐ, ํฐ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ๋งŽ์€ ๋ฌธ์„œ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์–ด ์•ˆ์ •์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ React ํ”„๋กœ์ ํŠธ์—์„œ ๋งค์šฐ ๋ณดํŽธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ์ž๋“ค์ด Webpack์„ ์ตํžˆ๊ณ  ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๋Š” ๋ฐ ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค ์ด ์ด์œ ๋Š” ํฌ๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„์ธ๊ฒŒ, ์‹ค์ œ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ๊ตณ์ด Webpack๋งŒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋“ฑ์˜ ์–ธ๊ธ‰์€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ณต์‹ ๋ฌธ์„œ์—์„œ ํ•„์š”ํ•˜๋‹ค๋ฉด Vite ๋‚˜ Parcel ๊ณผ ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ํ™œ์šฉํ•˜๋ผ๊ณ ๋„ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ง€ Webpack์„ ์“ด ์ด์œ ๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ์ƒํƒœ๊ณ„์™€ ํ™•์žฅ์„ฑ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ถ”์ธกํ•ด๋ณผ ์ˆ˜ ์žˆ๊ณ , Vite๋‚˜ ๋‹ค๋ฅธ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ ๋˜ํ•œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

7. ๐Ÿ ๊ฒฐ๋ก 

๊ฒฐ๋ก ์ ์œผ๋กœ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋Š” 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

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด