의도: 리액트의 기본 원리와 가상 DOM의 핵심을 이해하고 있는지 확인하는 질문
팁: 가능하면 useState와의 관계성도 설명하면 좋다.
나의 답안
리액트는 가상 DOM(Virtual DOM)을 사용해 실제 DOM 조작의 비효율성을 줄이고, 렌더링 성능을 최적화합니다.
브라우저의 실제 DOM은 조작할 때마다 전체 트리를 다시 계산하고, 레이아웃과 리렌더링 과정을 수행해야 하기 때문에 연산 비용이 큽니다.
반면, 리액트는 메모리 상에 존재하는 가상 DOM을 두고, 상태나 데이터가 변경될 때마다 전체 UI를 가상 DOM 형태로 다시 렌더링합니다.
이후 리액트는 이전 가상 DOM과 새로운 가상 DOM을 비교하는 Diffing 알고리즘을 통해 변경된 부분만 찾아내고, 그 차이만 실제 DOM에 반영합니다.
이렇게 하면 DOM 전체를 매번 갱신하지 않고 필요한 부분만 최소한으로 업데이트할 수 있어, 브라우저 렌더링 비용이 크게 줄어듭니다.
주어진 답안 (모범 답안)
실제 DOM은 html의 요소를 트리로서 가지고 있는 객체 기반의 모델이며, 브라우저는 실제 DOM을 기반으로 화면을 렌더링합니다.
반면에 가상 DOM은 실제 DOM을 경량화한 복사본으로, 리액트의 최적화를 위해 사용됩니다.실제 DOM을 직접 조작하는 것은 성능 비용이 큰 작업이기 때문에, 리액트는 상태가 업데이트될 때마다 우선 빠르고 가벼운 가상 DOM을 업데이트하고, 결과를 실제 DOM과 비교합니다.
이후 변경된 부분만 실제 DOM에 반영함으로써 불필요한 리소스 사용을 최소화하고 성능을 향상시킵니다.이 과정을 가장 쉽게 살펴볼 수 있는 리액트의 메서드는 바로
useState입니다.
이 상태 관리 훅을 통해 상태를 업데이트하면 상태 값이 곧바로 반영되지 않습니다.
왜냐하면 상태 업데이트는 그저 변수에 데이터를 담아내는 것이 아니라, 앞서 설명했던 가상 DOM과 실제 DOM의 비교 과정이 실행되기 때문입니다.
상태 값이 자기 자신을 참조하여 상태를 업데이트할 때 생기는 오류는 대부분 이 때문입니다.
이러한 문제를 해결하기 위해useState훅에 값이 아닌 콜백 함수의 참조를 인자로 전달할 수 있습니다.
리액트에서 가상 DOM(Virtual DOM)을 사용하는 이유는 성능 최적화와 개발 생산성 향상이다.
이를 좀 더 자세히 이해하기 위해, 가상 DOM이 무엇인지, 왜 필요한지, 그리고 어떻게 작동하는지를 알아보자.
리액트의 가상 DOM은 실제 DOM 조작의 복잡성과 비용을 줄이고, 효율적인 UI 업데이트를 가능하게 하여 사용자 경험과 개발 경험을 동시에 향상시키는 핵심 기술이다.
특히, 상태 기반의 선언적 UI와 결합되어, 현대적인 프론트엔드 개발의 주요 패러다임을 가능하게 한다.