본문 바로가기

React

React 살펴보기 - (React 특징, 장단점)

반응형

오늘은 React 살펴보기편!입니다.

 

목차는 다음과 같습니다.

1. React란 무엇인가?

2. React의 장점

3. React의 단점 

4. 일반적인 SPA 아키텍처  

5. hello world 띄우기

 

1. React란 무엇인가?

- React란 무엇인지 정의해보겠습니다.

- React는 프레임워크가 아닌 UI 컴포넌트 라이브러리입니다.

- 여러 컴포넌트로 UI를 구성하는 방식은 React의 핵심 철학입니다. 

- 컴포넌트 기반 아키텍처는  React 이전에도 존재했지만 순수한 자바스크립트 언어로 구현해냈다는데서 의미가 큽니다.

 

2. React의 장점 

- 1. 단순한 앱 개발 : 선언형 스타일이며, 강력하고 개발자 친화적인 DOM 추상화를 제공합니다. 

- 2. 빠른 UI : 뛰어난 성능을 제공합니다. 이는 가상 DOM 채택과 DOM의 변경 사항을 비교할 때 사용하는 훌륭한 알고리즘 덕분입니다. 

- 3. 코드량 감소 : React 커뮤니티와 개발 생태계를 통해 수많은 라이브러리와 컴포넌트를 접할 수 있습니다.

- 4. 간결성 : 소프트웨어 엔지니어의 웹 개발 경험을 극적으로 개선

    - 4.1. 선언형 스타일 채택 : 실행 결과가 어떻게 되어야 할지를 코드로 작성합니다.

         - 명령형으로 작성하게 되면 코드의 복잡도가 높아져서 제대로 작동하지 않을 수 있습니다.

var arr = [1,2,3,4,5];,
    arr2 = []
for(var i=0; i<arr.length; i++){
	arr2[i] = arr[i]*2;
}
console.log('a', arr2);

             

       - 하지만 map과 같은 선언형 프로그래밍으로 진행할 경우, 보다 간편하게 작성할 수 있습니다.

     

var arr = [1,2,3,4,5];
arr2 = arr.map(function(v,i){return v*2});
console.log('b', arr2);

      - React도 마찬가지로 UI를 구성할 때 선언형 스타일로 작성합니다. 개발자가 UI 요소를 선언형 스타일로 작성한 후 뷰에 변경이 발생하는 경우 React가 알아서 갱신합니다. 

      - React는 내부적으로 가상 DOM을 사용하여 브라우저에 이미 반영된 뷰새로운 뷰의 차이점을 찾아냅니다. 

      - jQuery의 경우는 개발자가 직접 뷰의 갱신 과정을 하나하나 작성해야 합니다. 이것은 UI가 간단할 때는 문제가 없지만 DOM 트리의 많은 부분을 다루게 되면 한계에 봉착합니다. 

 

  - 4.2. 컴포넌트 기반 아키텍처

      - React는 코드재사용이 쉬워서 코드를 줄일 수 있다는 것이 큰 장점입니다. 

 

- 5. 속도와 테스트 용이성

      - 프레임워크에서 불필요한 갱신을 일으키는 경우가 있습니다. UI가 복잡할 때는 성능이 더 저하됩니다. 

      - 하지만 React의 가상 DOM은 자바스크립트 메모리에만 존재합니다. 데이터를 변경하면 React는 가상 DOM을 먼저 비교하고, 렌더링 변경이 필요한 경우에만 실제 DOM에 렌더링합니다.

 

3. React의 단점 

      - 모든 기능을 갖춘 프레임워크는 아닙니다. React나 Redux Router 같은 라이브러리를 함께 사용해야 합니다. 

      - 단방향 데이터 바인딩을 제공합니다. 단방향 데이터 바인딩은 복잡한 앱에서 복잡도를 줄이는 데 도움을 줍니다. 

 

4. 일반적인 SPA 아키텍처

      1. 브라우저에 URL을 입력합니다.

      2. 브라우저가 URL 요청을 서버로 전송합니다.

      3. 서버는 응답으로 HTML, CSS, 자바스크립트 파일 같은 정적 자원을 보냅니다. 

      4. 자바스크립트는 로드 후 추가로 ajax나 xhr 요청을 보내 서버에서 데이터를 불러옵니다.

      5. 데이터는 json, xml 등의 포맷으로 전달받습니다.

      6. 데이터를 전달받으면 html을 렌더링합니다. 

 

 

5. hello world 띄우기

- 먼저 저는 react.js와 react-dom.js 파일을 cdn 방식을 이용해서 import 해줍니다. 

 <script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
 <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>

 

- html 파일은 다음과 같습니다.

 

<!DOCTYPE html>
<html>
    <head>
        <script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
        <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
    </head>
    <body>
        <div id="content"></div>
        <script type="text/javascript">
         const h1 = React.createElement('h1', null, 'Hello world!');
         ReactDOM.render(
             h1, 
             document.getElementById('content')
         )
        </script>
    </body>
</html>

 

- 그리고 React와 ReactDOM 객체를 이용해서 접근이 가능합니다. 

- React 엘리먼트를 생성하는 목적 = React, 실제로 돔에 추가하는 목적 = React-dom

- React 엘리먼트를 생성하려면 React.createElement(elementName, data, child)를 호출합니다. 

React.createElement('h1', null, 'Hello world'); -- h1 요소를 React 엘리먼트로 생성하여 변수에 담습니다.

elementName : HTML 태그명을 'h1'처럼 문자열로 작성하거나 직접 만든 컴포넌트 클래스 객체를 넘겨줄 수 있습니다. 
data : 속성이나 상위 컴포넌트에 받는 값 
child : 자식 엘리먼트나 태그 내부에 작성하는 텍스트 

 

- ReactDOM.render를 이용해서 실제 DOM에 렌더링합니다.

ReactDOM.render(
 h1,
 document.getElementById('content')
)

반응형