명시적인 상태 변경
리액트는 단방향 바인딩만 지원함
단방향 바인딩: 데이터 흐름이 한쪽으로만 간다.
JSX
HTML에 자바스크립트 문법을 더한 JSX를 사용하여 손쉽게 코드 구현 가능
2000년대까지만해도 웹 생태계는 LAMP 스택(리눅스, 아파치 웹서버, MySQL, PHP)
을 활용한 웹 개발이 주를 이루던 시기였음
⇒ 데이터베이스에서 필요한 데이터를 불러온 다음, 웹 서버에서 HTML 페이지를 만들어 클라이언트에 제공하는 방식으로, JS는 폼 처리와 같은 부수적인 역할만 하는 방식이었음
2010년대에 제이쿼리 등장
2011년에 웹소켓, 캔버스, SVG, Geolocation 등 다양한 기능을 브라우저에서 지원, HTML5 표준 스펙으로 선정 ⇒ JS는 DOM을 수정해 다양한 인터렉션 보여주고, AJAX를 활용해 서버뿐만 아니라 클라이언트에서도 서버와 통신해 데이터 불러옴(코드가 복잡해짐)
2010년, Angular JS(MVVM 패턴)와 Backbone.js(MVC 패턴) 등장
페이스북은 최대한 서버에서 렌더링하는 기술 사용했고, 자바스크립트 번들의 크기 줄이는 데 오랜 시간 투자함
⇒ 대부분의 동작을 서버 렌더링으로 작동할 경우, 사용자가 게시글 작성할 때마다 서버에서 렌더링한 후 브라우저 전체가 다시 로딩되어 전체 화면이 깜빡이거나 느리게 작동하는 것처럼 보여주는 단점으로 인해 자바스크립트 의존을 피할 수 없었음
BoltJS의 등장과 한계
Fbolt의 등장
함수형을 지향하는 새로운 버전의 BoltJS
API의 변화에 따라 무언가 변경되면 단순히 UI를 초기화하고 새로 렌더링하자는 아이디어 나옴
⇒ 모델이 뷰를 변경하는 단방향 방식으로, 모델의 데이터가 변경되어 뷰가 변경되어야 하면 이전 DOM을 버리고 새롭게 렌더링하는 방식 제안
⇒ JSX 문법
과 Flux 패턴
등장
기존 프론트엔드 프로젝트와 리액트는 관심사 분리의 원칙 아래에 다른 방식 채택