실행시킬 컴포넌트를 호출하는 경우 render() 를 통해 렌더링이 촉발 됩니다.
쉽게 말해 컴포넌트를 정의하고, 호출하는 부분입니다.
Virtual Dom은 2가지 트리, 즉 더블 버퍼링 구조로 되어 있습니다.
current 트리와 workInProgress 트리로 구성 되어 있습니다.
즉 current트리와(이전) workInProgress트리를(현재) Diffing 알고리즘을 사용하여 어떤 부분이 달라졌는지 파악하여 Real Dom에 변경사항을 Real DOM에 적용하는 과정을 거칩니다.
이것이 React의 핵심 업데이트 메커니즘 중 하나인 "Reconciliation(조정)"입니다.
변경된 부분을 수정하고 workInProgress트리가 Current 트리로 바뀌고, 새로운 workInProgress트리를 복제합니다. 이 과정을 계속 반복합니다.
Virtual Dom에서 수정된 사항을 Real Dom에 반영하고, ref로 Real Dom에 직접 접근하여 수정사항을 반영하는 부분을 Commit 단계에서 진행합니다.
이후 브라우저는 Real Dom을 기준으로 layout을 구성하고, Paint를 진행합니다. 이때 마운트 라고 합니다.
마운트 된 이 시점 이후 생명주기 메소드가 실행됩니다. 함수형 컴포넌트의 경우 useEffect가 실행됩니다.
이후 Render Phase에서 jsx문법을 반환한 react Element를 props, state 등을 포함하여 Fiber Node로 확장하여, Vitual Dom을 생성 합니다.
Vitaul Dom은 더블 버퍼링 구조로 되어있으며, current 트리와 workInProgress를 비교하여 변경사항을 파악 합니다.
위의 과정에서 개발자는 컴포넌트를 생성하고, 호출하는 단계만 진행하고, 나머지 render phase, commit phase에서 진행하는 Virtual Dom, RealDom을 변경 및 생성은 리액트에서 처리를 해줍니다.
단 Real Dom에 직접 접근하고 싶다면 ref를 통해 처리가 가능합니다.