TIL

[React] 리액트 패키지 구성 요소와 용어 정의

기절초뿡 2023. 11. 13. 16:46

※ 해당 내용은 유투브 채널 '가장 쉬운 웹개발 with Boaz' 의 React 까보기 시리즈를 듣고 정리한 내용입니다. 

 

🍏 0. Intro

리액트 아키텍쳐의 변화가 있었다. 

16v 이전에는 stack 아키텍쳐를 사용하다가 fiber로 변경되었고, 18v에서 본격적으로 사용하게 되었다. 

stack은 후입선출의 자료구조이지만, fiber는 들어간 순서와는 무관하게 꺼낼 수 있다는 점이 가장 큰 차이점이다.

 

React에서 '꺼낸다'라는 의미는 'DOM 에 변화를 적용한다'라고 이해할 수 있는데, stack을 사용하면 순서가 고정되게 되고, 이렇게 되면 렌더링 할 때의 순서를 유연하게 가져갈 수 없다. 그래서 보다 렌더링 순서를 조정하기 위해서 fiber라는 아키텍쳐로 변화했다. 

 

 

🍎 1. 패키지 구성 요소

react

- react 코어.

- 컴포넌트 정의와 관련된 패키지.

- 다른 패키지에 의존도를 갖고 있지 않기 때문에 여러 플랫폼(브라우저, 모바일)에 올려서 사용할 수 있다.

 

renderer

- react-dom, react-native-dom 등 호스트 렌더링 환경에 의존적인 패키지.

- 호스트와 react를 연결하는 역할.

- reconciler 와 legacy-event 패키지에 의존도를 가지고 있다.

 

event(legacy-event)

- SyntheticEvent라는 명칭으로, 내부적으로 개발된 이벤트 시스템.

- 기본 웹에서의 event를 wrapping 하여 추가적인 기능 수행을 할 수 있게 한다.

- 이벤트 풀링, 이벤트 위임 등을 사용하여 구현됨.

 

scheduler

- react는 task를 비동기로 실행

- 이 task의 실행 타이밍을 알고 있는 것이 schedular이며 비동기 실행을 담당

- 호스트 환경에 의존적

 

reconciler

- 리액트의 핵심 패키지

- v15이전에는 스택 기반의 구현이었지만 v16 이후부터 fiber 아키텍쳐를 도입

- fiber 아키텍쳐에서 VDOM 재조정을 수행

- 컴포넌트를 호출하는 곳

 

🍊 2. 용어

렌더링

- reconciler에서 컴포넌트를 호출하면 react element을 return 한다. 이 react element를  VDOM에 적용(재조정)하는 것까지를 렌더링이라고 한다. 

 

cf) 전체 과정

- 컴포넌트 호출로 return된 react element를 VDOM에 재조정 (: 렌더링)

- renderer가 컴포넌트 정보를 DOM에 삽입 (: mount)

- 브라우저가 DOM 을 paint (: paint)

 

react element

- 컴포넌트 호출 시 return 하는 것

(return 된 JSX 는 babel을 통해 react.createElement()를 호출하여 이로부터 return 받는 것이 react element)

- 컴포넌트의 정보 (DOM 에 삽입 될 내용)을 담은 객체

- type, key, props, ref 등의 정보를 가지고 있음.

{
  type: 'button',
  props: {
    className: 'button button-blue',
    children: {
      type: 'b',
      props: {
        children: 'OK!'
      }
    }
  }
}
<button class='button button-blue'>
  <b>
    OK!
  </b>
</button>

 

 

fiber

- VDOM의 노드 객체. (아키텍쳐의 이름과 동일하지만 다른 의미)

- React element가 DOM에 반영되기 위해서는 먼저 VDOM에 추가되어야하는데 이를 위해 확장한 객체임.

- 컴포넌트의 상태, 훅, 라이프 사이클 등이 추가된 JS 객체.