FE개발을 위한 자바스크립트 오픈소스 라이브러리
html/css/js로 나눠서 적기보다는 하나의 파일에 명시적으로 작성할 수 있게 JSX를 활용한 선언형 프로그래밍을 지향함
하나의 기능 구현을 위해 여러 종류의 코드를 묶어둔 컴포넌트를 기반으로 개발함. 컴포넌트로 분리하면 서로 독립적이고 재사용이 가능하기 때문에 기능 자체에 집중하여 개발 가능
장점:
독립성 => 기능 작동에 집중하여 개발 가능
재사용성 => 유지보수, 유닛테스트 편리
자바스크립트 프로젝트 어디에든 유연하게 적용 가능. Facebook에서 관리되어 안정적이고 가장 유명하며 리액트 네이티브로 모바일 개발도 가능
출처: React Docs: Render and Commit
요청 프로세스와 UI를 뿌려주는 방식은 크게 3가지 프로세스로 동작한다.
1. 렌더링 유발(triggering a render)
2. 컴포넌트 렌더링(rendering the component)
3. DOM에 올리기 (committing to the DOM)
컴포넌트 렌더링이 일어나는 이유는 2가지 이다
렌더링: 리액트가 컴포넌트를 부르는 것
step 1단계 이후 리액트는 컴포넌트를 불러 무엇을 화면에 보여줄 지 파악한다.
컴포넌트 렌더링 이후 리액트는 DOM을 업데이트한다.
appendChild()
DOM API를 이용해 화면에 뿌려준다. 리액트는 렌더링을 마친 후 브라우저를 리페인트 한다. 이를 'painting'이라고 한다.
리액트의 특징 중 하나로, 실제 DOM의 사본 같은 개념. 리액트는 실제 DOM 객체에 접근하는 대신 Virtual DOM에 접근하여 업데이트된 부분을 비교한 후 적용한다.
가상 DOM은 가상의 UI 요소를 메모리에 유지시키고 이를 ReactDOM과 같은 라이브러리를 통해 실제 DOM과 동기화시키는 것. 매 렌더링마다 새로운 Virtual DOM이 만들어짐
=> Virtual DOM에서 실제 DOM에 필요한 부분만 반영할 수 있고, Real DOM처럼 브라우저에 실제로 그리는 것이 아니기 때문에 속도가 훨씬 빠름.
ReactDOM.render()
이 실행되면서 Virtual DOM 트리와 real DOM 트리가 만들어짐 Real DOM | Virtual DOM |
---|---|
DOM manipulation is very expensive | DOM manipulation is very easy |
There is too much memory wastage | No memory wastage |
It updates Slow | It updates fast |
It can directly update HTML | It can’t update HTML directly |
Creates a new DOM if the element updates. | Update the JSX if the element update |
It allows us to directly target any specific node (HTML element) | It can produce about 200,000 Virtual DOM - Nodes per Second. |
It represents the Ul of your application | It is only a virtual representation of the DOM |
리액트는 기본적으로 CSR 기반이다.
- CSR: 화면에 그려주기 위해 필요한 HTML을 웹브라우저가 Javascript를 실행하여 동적으로 만들어 주는 것. 해당 페이지 접속 후 HTML이 비어있음
- SSR: 웹브라우저가 서버로부터 받은 HTML을 화면에 뿌려주는 것. 해당 페이지 접속 후 HTML이 채워져 있는 것 볼 수 있음
CSR은 비어있는 HTML을 다운받은 이후에 JS 파일을 다운받는다. 반면 SSR 방식의 경우 화면에 바로 그릴 수 있는 HTML이 준비되어 있기 때문에 브라우저가 바로 렌더링을 할 수 있다.
초기 로딩 속도는 SSR 방식이 더 유리하다.
SEO(Search Engine Optimization) - 검색엔진최적화 : 검색 엔진에 우리가 만든 페이지가 노출되는 것을 의미. HTML을 가지고 파악함.
CSR은 페이지 로딩 시 빈 HTML이므로 검색엔진봇이 데이터를 수집하기가 어려움. SSR은 각 페이지마다 HTML을 생성하므로 SEO에 유리함.
CSR은 최초 Javascript 파일을 받아 렌더링을 하면 그 이후에 다시 다운로드해서 렌더링할 일이 없다. 페이지가 변경되더라도 이미 최초 Javascript에 필요한 페이지가 다 있으므로 추가로 서버에 요청할 일이 없다.
반면 SSR은 화면이 바뀔 때마다 HTML을 서버로부터 매번 받아와야한다.
서버 부담 측면에서는 CSR 방식이 더 유리하다.
규모가 커질수록 사용자와의 상호작용이 많아지고 속도 저하 문제가 발생함에 따라 이 문제를 해결하기 위해 등장한 SPA
전통적인 웹사이트는 페이지 전체를 로딩하여 시간이 오래걸리는 반면, SPA는 페이지 전환 전후에 중복되는 부분은 새로 불러오지 않음 (ex. header, navigation, footer)
서버로부터 완전히 새로운 페이지를 불러오지 않고 화면 업데이트를 위해 필요한 데이터만 전달받아 브라우저에서 해당하는 부분만 업데이트 하는 방식