과거에는 자바스크립트로 화면을 업데이트할 때, 문서 객체 모델(DOM)을 직접 찾아서 수정하는 명령형(Imperative) 방식을 사용했습니다. 이는 애플리케이션 규모가 커질수록 관리하기 어렵고 성능이 저하되는 원인이 되었습니다.
리액트(React)는 가상 DOM(Virtual DOM)과 선언적(Declarative) 프로그래밍이라는 두 가지 핵심 무기를 통해 이 문제를 해결했습니다. 개발자는 '화면이 어떻게 보여야 하는지' 상태(State)만 선언하면, 리액트가 가장 효율적인 방법으로 화면을 그려줍니다.
명령형 프로그래밍(기존 JS): "벽돌을 10cm 올리고, 시멘트를 2번 발라라"처럼 건축 과정을 일일이 지시하는 방식입니다.
선언적 프로그래밍(리액트): "나는 이런 모양의 2층 집(설계도)을 원해"라고 선언만 하면, 뛰어난 건축가(Virtual DOM 알고리즘)가 알아서 가장 빠르고 안전하게 집을 지어주는 방식입니다.
| 특징 | Real DOM | Virtual DOM |
|---|---|---|
| 업데이트 방식 | 느림 (매번 화면을 처음부터 다시 그림) | 빠름 (메모리에서 변경점만 찾고 한 번에 반영) |
| 성능 제어 | 개발자가 직접 최적화 코드를 짜야 함 | 리액트 엔진이 알아서 최적화 (Batching) |
| 메모리 소모 | 상대적으로 적음 | 가상 돔 트리를 메모리에 유지해야 하므로 더 높음 |