Angular vs. React vs. Vue
배경
모바일의 시대가 도래하면서, 모바일 환경에 맞춰진 웹 페이지 즉 모바일 웹에 대한 니즈가 폭발적으로 증가하였고 그에 따른 성능 이슈도 함께 거론되었다. 데스크탑에 비해 성능이 낮은 모바일, 스마트폰을 통해 웹 페이지를 출력하기 위해서는 기존에 있었던 방식과는 다른 접근이 필요했고 그에 따라서 Single Page Web Application 기법(SPA)이 등장하게 되었다.
SPA는 브라우저에 로드되고 난 뒤에 페이지 전체를 서버에 요청하는 것이 아니라 최초 한번 페이지 전체를 로딩한 이후 부터는 데이터만 변경하여 사용할 수 있는 웹 애플리케이션을 의미한다. 전통적인 웹 방식(서버 사이드 렌더링)은 이 SPA 방식에 비해 성능 문제를 보였다. 요청 시 마다 새로고침이 일어나며 페이지를 로딩할 때 마다 서버로부터 리소스를 전달받아 해석하고 화면에 렌더링 하는 방식이었기 때문이다.
SPA는 트래픽을 감소시키고 사용자에게 더 나은 경험을 제공했다. 서버는 단지 JSON 파일만 보내주는 역할을 했고, HTML을 그리는 역할은 클라이언트 측에서 자바스크립트가 수행하게 된 것이다. 바로 이것이 클라이언트 사이드 렌더링(Client-side rendering)이다.
Angular
MVC 구조 덕분에 Angular는 작업을 논리적 청크로 분할하여 웹 페이지의 초기 로드 시간을 줄일 수 있다. 클라이언트 측에서 View 부분이 표시되어 백그라운드에서 쿼리를 크게 줄이고 이는 비동기 모드에서 작동하므로 서버에 대한 호출이 더 적게 수행된다.
특징
- 양방향 데이터 바인딩(Two-way data binding) : Angular는 쉽고 효율적이며 직관적인 방식으로 모델에 대한 변경 사항을 즉식 뷰에 복제한다.
단점
- Heavier applications : React 와 Vue에 비해 무겁고 초기 구동 속도가 느리다.
- 지속적인 업데이트Constantly updating
- 어렵다(Steep learning curve) : React 와 Vue에 비해 학습하기가 어렵다.
React
React 는 상태 저장 및 재사용 가능한 UI 구성 요소를 만드는 데 사용되는 Front-end Library이다. 이를 통해 개발자는 페이지를 다시 로드 하지 않고도 데이터를 변경할 수 있는 대규모 웹 응용 프로그램을 만들 수 있다.
MVC templete을 모두 구현하지 않고, View 부분만을 다룬다. 간단하고 확장 가능하며 빠르다는 특성이 있다.
특징
- 성능(performance) : gzip 파일로 43KB 밖에 되지 않는 크기와 빠른 속도, 많은 기능
- 가상 DOM 사용(Using a virtual DOM) : 필요한 node만을 re-rendering 한다.
- 번들링, 트리 쉐이킹 지원(Support for bundling and tree-shaking) : User resource load 를 최소화
- 서버 사이드 렌더링(Server-side rendering)
- 단방향 데이터 바인딩(One-way data binding)
- 쉽게 테스트 가능(Easily testable) : 작업의 출력을 모니터링하고 전체 개발 프로세스를 개선하는 것이 쉬워진다.
단점
- MVC를 모두 구현하지 않음(Doesn’t implement MVC) : 상태(state) 및 모델(model)을 구현하기 위해 추가적으로 Library를 사용해야 한다.
- Poor documentation : 꾸준한 업데이트와 이를 지원하기위해 생성되는 Library들로 인해 빠르게 변화하여 적절한 지침을 작성할 시간이 없다.
- Always changing : 위에서 언급한 것처럼 지속적으로 변경되므로 개발자도 새로운 작업 방식에 적응해야한다.