본문 바로가기
개발/REACT

ReactJS 입문 with 니꼬쌤 1 - [INTRO]

by 개발자 구리 2022. 3. 18.

사이드 프로젝트 진행을 위해 React를 배워보기로 했다.

사실 둘 중 하나를 고르라면 프론트엔드보다 백엔드를 하고 싶지만, 결국은 웹이 어떻게 굴러가는지 알아야 하기에

니꼬쌤과 함께하는 <ReactJS로 영화 웹 서비스 만들기> on..

Why React?

1. 전세계 상위 1만 개의 웹사이트들 중 44.76%가 React를 사용한다.

ex. 에어비앤비, 인스타그램, 페이스북, 넷플릭스 등등

대세인 이유는,

  • 리렌더링이 잦은 동적인 모던 웹에서 엄청나게 빠른 퍼포먼스 가능
  • 모듈형 개발이 가능하여 생산성도 높음
  • 라이브러리 라는 특성상 다른 프레임워크에 간편하게 붙여서 사용 가능 등등..

당장 페이스북에 접속해서 이런저런 요청을 수행해도 새로고침 없이 빠르게 수행되는 것을 볼 수 있고, 이러한 사용자 경험은 예를 들어 쇼핑몰의 경우 수익 증가에까지 영향을 미친다고 한다.

 

2. 페이스북이 React를 만들었다. (메타가 입에 안 붙는다..)

아직도 React를 사용하고 있고, 더 좋은 방향으로 개선하기 위해 투자하고 있다.

 

3. Javascript와 비슷하며, 아주 큰 커뮤니티를 가지고 있다.

기술에 대한 생태계가 있다는 것은 아주 중요하다. React Native는 iOS나 안드로이드 어플을 React JS 코드로 만들 수 있게 해주며, React를 기반으로 VR 경험을 제작하려는 사람들도 있다고 한다.

 

 

Understanding React

당장 React에 뛰어들고 싶지만, 그 전에 기술에 대해 이해하는 것이 중요하다.

React의 핵심은 바로, interactive UI이다. 애초에 그걸 위해 만들어진 라이브러리이기 때문.

 

React를 사용하지 않고 HTML과 Javascript만 사용해서 버튼의 클릭 수를 보여주는 간단한 웹을 만들어보자.

<!DOCTYPE html>
<html>
    <body>
        <span>Total clicks: 0</span>
        <button id="btn">Click me</button>
    </body>
    <script>
        let counter = 0;
        const button = document.getElementById("btn");
        const span = document.querySelector("span");
        function handleClick() {
            counter = counter + 1;
            span.innerText = `Total clicks: ${counter}`;
        }
        button.addEventListener("click", handleClick);
    </script>
</html>

코드가 어떻게 동작하는가?

  1. HTML을 만들고  // span, button
  2. JavaScript에서 가져와서  // getElementById, querySelector
  3. event를 감지하고  // addEventListener
  4. counter라는 데이터를 수정하고  // handleClick
  5. HTML을 업데이트한다.  // span.innerText

 

React를 사용한 코드를 확인해보자.

<!DOCTYPE html>
<html>
    <body>
        <div id="root"></div>
    </body>
    <script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
    <script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
    <script>
        const root = document.getElementById("root");
        const h3 = React.createElement(
            "h3",
            {
                onMouseEnter: () => console.log("mouse enter"),
            },
            "Hello I'm a h3"
        );
        const btn = React.createElement(
            "button",
            {
                onClick: () => console.log("im clicked"),
                style: {
                    backgroundColor: "tomato",
                },
            },
            "Click me"
        );
        const container = React.createElement("div", null, [h3, btn]);
        ReactDOM.render(container, root);
    </script>
</html>

>>

코드가 어떻게 동작하는가?

  1. Javascript로 element를 만들고  // React.createElement
  2. element에서 event를 감지하도록 하고  // onMouseEnter, onClick 등
  3. React element들을 HTML body에 연결한다.  // ReactDOM.render

React를 사용하지 않은 코드가 HTML로부터 시작했다면, React를 사용한 코드는 반대로 JS에서 시작해서 HTML에서 끝나는 것을 볼 수 있다. React.createElement를 통해 React가 element를 생성한다는 것은, 다시말해 React가 element를 업데이트 할 수 있고, 유저에게 보여지는 내용을 컨트롤 할 수 있다는 것이다.

 

사실 앞으로 createElement를 사용하는 일은 없을 것이다. 하지만 공부하는 과정이므로...

createElement의 첫번째 argument는 root에 들어갈 HTML 태그 / 두번째는 property / 세번째는 content이다.

onClick 혹은 style과 같은 property들이 element와 함께 있기에 React는 초강력해진다.

React 팀은 interactive한 어플리케이션에서 일어나는 작업들 중 많은 부분이 event를 감지하는 일이라는 것을 알고 있었을 것이고, HTML에서 element를 찾아서 addEventListener를 등록하는 대신에, element의 property에 event를 등록할 수 있게 했다.