리액트란 사용자 인터페이스(UI)를 구축하기 위한 선언적이고 효율적이며 유연한 Javascript 라이브러리이다.
'선언적'이라는 것은 의미는 화면에 "무엇"이 나타나야 하는지에 대한 목표를 명시하는 것을 말한다. (<-> 명령형 : "어떻게" 나타나야 하는지에 대한 알고리즘을 명시하는 것을 말함.)
React는 상호작용이 많은 UI를 만들 때 생기는 어려움을 줄여준다.
각 상태에 대한 간단한 뷰만 설계해 준다면, 데이터가 변경됨에 따라 적절한 컴포넌트만 효율적으로 갱신하고 렌더링하기 때문이다.
컴포넌트란 작고 고립된 코드의 파편을 말하는데 컴포넌트화를 통해 반복 코드를 줄이고, 재사용성을 높이며 유지/보수를 용이하게 할 수 있다.
먼저 프론트엔드 라이브러리가 등장하게 된 이유는 동적인 웹페이지를 보다 효율적으로 유지 보수하고 관리하기 위함이었다.
단순 정보 전달을 위한 정적 페이지의 경우 HTML과 CSS만으로도 충분하지만,
유저의 행동에 따라 페이지의 구성을 달리해야 하는 동적 페이지는 Javascript를 이용해 인터랙션을 구현해야 한다.
이 유저 인터랙션이 많아진만큼 자연스러운 UI를 위해선 프론트엔드 라이브러리 및 프레임워크가 필요하다.
이를 사용함으로써 얻을 수 있는 것은 프로세스의 비효율성을 줄일 수 있다 는 것이다.
유저 인터랙션이 다양해졌다는 것은 그만큼 DOM을 건드리는 일이 많아졌음을 의미한다. DOM을 건드리고나서 일어나는 렌더링 과정은 결국 브라우저에게 부담을 주는 일이고, 이는 곧 전체 프로세스의 비효율성을 야기한다.
결국, 프론트엔드 라이브러리 및 프레임워크는 DOM 관리와 상태 변화 관리를 최소화하고, 개발자가 오직 기능 개발과 사용자 인터페이스에 보다 더 집중할 수 있도록 도와준다.
그 중 리액트는 다음과 같은 장점으로 널리 쓰이고 있다.
- 컴포넌트 단위 개발로 생산성, 재사용성, 유지보수성이 높음
- JSX 문법(Javascript + Xml : 하나의 파일에 자바스크립트와 HTML을 동시에 작성 가능) 사용으로 코드 가독성과 개발 편의성을 높임
- Virtual DOM으로 리렌더링 횟수를 줄여 브라우저 연산 비용을 줄임