React의 렌더링 구조와 최적화
React의 렌더링 흐름과 성능 최적화 기법을 살펴보고, 코드 효율성을 높이는 방법을 알아봅니다.
1. React의 렌더링 원리
React는 컴포넌트 기반 라이브러리로, 데이터가 변경되면 화면을 효율적으로 업데이트하는 Virtual DOM 구조를 사용합니다.
Virtual DOM
Virtual DOM은 React의 핵심 개념 중 하나로, 실제 DOM에 접근하는 것을 최소화하여 성능을 최적화하는 방식입니다. React는 상태가 변경되었을 때, 직접 DOM을 업데이트하지 않고 메모리 내의 가상 DOM을 먼저 업데이트합니다. 이후 실제 DOM과의 차이를 계산하여 변경된 부분만 반영하는 방식으로 최적화합니다. 이로 인해 불필요한 연산과 DOM 조작을 줄여 성능을 크게 향상시킵니다.
Virtual DOM의 주요 동작 방식
- 변경사항 발생: 상태나 데이터가 변경되면, React는 변경된 상태를 바탕으로 새로운 Virtual DOM을 생성합니다.
- 차이 계산 (Diffing): React는 기존 Virtual DOM과 새로운 Virtual DOM 간의 차이점을 비교하며, 이를 diffing 알고리즘이라고 합니다.
- DOM 업데이트: 실제 DOM은 차이점이 있는 부분만 선택적으로 업데이트하여 불필요한 재렌더링을 줄입니다. 이 단계는 Reconciliation 단계라고도 부릅니다.
Virtual DOM을 통해 React는 DOM 조작 비용을 최소화하고, 애플리케이션의 렌더링 성능을 극대화할 수 있습니다.
2. 렌더링 과정
Virtual DOM과 Reconciliation
React는 변경된 부분만 업데이트하기 위해 Virtual DOM을 사용하며, 실제 DOM을 직접 조작하는 대신 가상의 DOM에서 차이를 계산합니다. 이 과정은 Reconciliation이라고 부르며, 최적의 업데이트 성능을 제공합니다.
const App = () => ( <div> <h1>Hello, React!</h1> </div> );
렌더링 단계
React의 렌더링 과정은 크게 렌더 단계와 커밋 단계로 나뉩니다.
- 렌더 단계: 각 컴포넌트의 변경 사항을 계산합니다. 이 단계에서는 DOM이 실제로 업데이트되지 않습니다.
- 커밋 단계: 변경된 내용을 실제 DOM에 반영합니다.
3. React 성능 최적화 기법
Memoization
반복 렌더링을 줄이기 위해 React.memo와 useMemo 훅을 사용할 수 있습니다. 이를 통해 **컴포넌트의 불필요한 재렌더링**을 방지할 수 있습니다.
Tip: useCallback을 사용하여 함수를 메모이제이션하면, 자식 컴포넌트에 전달할 때 참조가 고정되어 불필요한 렌더링을 방지할 수 있습니다.
데이터 구조 최적화
상태 관리를 효율적으로 하기 위해 **불변성 유지**가 중요합니다. React는 상태가 변경되었는지 확인할 때 객체나 배열의 참조를 비교하므로, 불변성을 유지하면 최적화에 도움이 됩니다.
4. React 렌더링 최적화 체크리스트
- **컴포넌트 분리:** 작은 단위로 컴포넌트를 나눠 관리하기 쉽게 합니다.
- **불필요한 렌더링 방지:** React.memo, useCallback, useMemo를 활용합니다.
- **상태 관리 최적화:** Context API와 전역 상태 관리 라이브러리 사용을 검토합니다.
- **의존성 관리:** 효과적인 의존성 배열 설정으로 불필요한 리렌더링 방지
'Frontend > React' 카테고리의 다른 글
React에서 React.Fragment를 사용하는 이유 (0) | 2024.11.14 |
---|---|
[troubleshooting] pnpm version mismatch (0) | 2024.11.14 |
프론트엔드 React 개발자가 알아야 할 기본 개념 (0) | 2024.11.10 |
React 가상 스크롤 & 무한 스크롤 라이브러리 비교 (0) | 2024.11.09 |
2024 React UI 라이브러리 비교(mui/antd/chakra/bootstrap/mantine) (0) | 2024.11.08 |