리액트 프로젝트 만들기

in #react7 years ago (edited)

리액트를 제대로 사용하기 위해서는 babel과 webpack을 설정해서 사용해야 합니다.
바벨로는 문법을 변환해주고 webpack으로는 파일을 하나로 패키징 해줌으로써 수십개가 넘는 파일을 일일이 html에 넣을 필요가 없어집니다.

바벨과 웹팩에 대해 잘 모르시는 분들은 바벨이란?웹팩이란? 글을 읽고서 오시는 것을 추천해드립니다.

jsx에 대한 이해

jsx는 리액트에서 가장 핵심적인 역할을 합니다. jsx는 javascript + XML의미하는 단어로 javascript에 <태그></태그>, <태그 />와 같은 문법을 함께 사용할 수 있게 해줍니다.

가장 기본적인 코드입니다.

import React from 'react';
import { render } from 'react-dom';

render(
<div>Hello World</div>,
document.getElementById("root")
);

보시는 것처럼 html 문법 같은 코드를 같이 사용할 수 있습니다.

리액트 시작하기

위에 보셨던 것처럼 리액트를 시작하기 위해서는 jsx라는 문법을 사용해야 되는데 이 jsx는 브라우저에서 즉시 실행하지는 못하고 babel을 이용한 트랜스파일을 해주셔야지만 실행할 수 있습니다.

이 과정에서는 babel만 이용해도 무관하지만, 나중에 자바스크립트 파일이 여러개 생겼을 때와 npm으로 설치한 각종 파일을 웹에서 좀 더 쉽게 사용하기 위해 webpack과 같이 사용하겠습니다.

npm i -D react react-dom babel-loader babel-core babel-preset-es2015 babel-preset-react babel-preset-stage-2 webpack webpack-dev-server webpack-merge 
  • react: react 컴포넌트를 만들기 위해서 가장 많이 사용됩니다.
  • react-dom: react컴포넌트를 가공해주는 라이브러리 입니다.(화면에 그리거나, 문자열로 뽑아내는 함수가 있습니다.)
  • babel-loader: webpack에서 babel을 사용하기 위해서 사용합니다.
  • babel-core: babel-loader에서 내부적으로 babel api를 사용하기 때문에 필요합니다.
  • babel-preset-es2015: 구버전의 브라우저를 지원하기 위해서 사용합니다.
  • babel-preset-react: jsx를 자바스크립트 문법으로 변환하기 위해서 사용합니다.
  • babel-preset-stage-2: 설치하지 않아도 무관하지만, 리액트에서 있으면 좋은 최신문법을 추가적으로 사용할 수 있습니다.
  • webpack: 리액트를 하다보면 여러개의 파일이 만들어지는데 하나로 묶어줍니다.
  • webpack-dev-server: 컴포넌트 수정시 화면에 즉시 반영을 해줘서 개발 생산성을 높여줍니다.
  • webpack-merge: 개발환경과 배포환경을 분리하기 위해서 사용합니다.

프로젝트를 시작할때는 가장 먼저 webpack을 설정해주는게 좋습니다.

//webpack.config.base.js
const path = require('path');

module.exports = {
    entry: path.resolve(__dirname, '..', 'src', 'index.js'),
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, '..', 'dist')
    },
    module: {
        rules: [{
            test: /\.js$/,
            loader: 'babel-loader'
        }]
    }
}
//.babelrc
{
    "presets": [
        "es2015", 
        "stage-2",
        "react"
    ]
}

src

  • index.js
    config
  • webpack.config.base.js
    .babelrc

과 같은 디렉토리 구조로 만드신다음에 위에 설정을 해주세요 그리고 npx webpack --config ./config/webpack.config.base.js 를 적어주시면 index.js에 만든 jsx가 빌드되서 dist폴더에 생성이 됩니다.

//빌드전 
import React from 'react';
import {render } from 'react-dom';

render(
    <div>테스트</div>, 
    document.getElementById("root")
);

// 빌드 후 


"use strict";


var _react = __webpack_require__(4);

var _react2 = _interopRequireDefault(_react);

var _reactDom = __webpack_require__(18);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

(0, _reactDom.render)(_react2.default.createElement(
    'div',
    null,
    '\uD14C\uC2A4\uD2B8'
), document.getElementById("root"));

이 외에도 babel과 webpack이 자동으로 생성한 소스코드가 있지만, 변환된 부분만 보면 react에 createElement라는 메소드를 사용하고 있고 한글도 유니코드로 변환이 된 것을 확인할 수 있습니다.

index.html 파일을 만들고 빌드된 bundle.js 파일을 script 파일로 가지고 오면 구 브라우저에서도 돌아가는 리액트 앱을 확인할 수 있습니다.