웹
React, Angular, Vue.js
Volc
2022. 1. 8. 00:45
React
- 리액트는 자바스크립트 라이브러리의 하나로서 사용자 인터페이스를 만들기 위해 사용된다.
- 싱글 페이지 어플리케이션이나 모바일 어플리케이션 개발에 사용될 수 있다.
- 대규모 또는 복잡한 리액트 어플리케이션 개발에는 보통 라우팅, API통신 등의 기능이 요구되는데 리액트에는 기본적으로 제공되지 않기 때문에 추가 라이브러리를 사용해야 한다.
- 쉽게 사용자와 상호작용할 수 있는 동적인 UI를 쉽게 만들 수 있다.
- 특징
- Data Flow
- React는 데이터의 흐름이 한 방향으로만 흐르는 단방향 데이터 흐름을 갖는다.
- Angular.js와 같은 양방향 데이터 바인딩은 규모가 커질수록 데이터의 흐름을 추적하기 힘들고 복잡해지는 경향이 있어, 복잡한 앱에서도 데이터 흐름에서 일어나는 변화를 보다 예측 가능할 수 있도록 단방향 흐름을 가지도록 했다고 한다.
- Component 기반 구조
- Component는 독립적인 단위의 소프트웨어 모듈을 말한다.
- React는 UI(View)를 여러 컴포넌트로 쪼개서 만든다.
- 캡슐화시켜 코드를 관리하기 때문에 재사용성이 높다. 그러므로 유지보수 관리가 용이해진다.
- Virtual DOM
- DOM은 Document Object Model의 약자로 html, xml, CSS 등을 트리 구조로 인식하고 데이터를 객체로 간주하고 관리한다.
- Virtual DOM은 가상의 Document Object Model을 말한다.
- 이벤트가 발생할 때마다 Virtual DOM을 만들고 다시 그릴 때마다 실제 DOM과 비교하고 전후 상태를 비교해 변경이 필요한 최소한의 변경사항만 실제 DOM에 반영해, 앱의 효율성과 속도를 개선할 수 있다고 한다.
- Props and State
- Props
- 부모 컴포넌트에서 자식 컴포넌트로 전달해 주는 데이터를 말한다.
- 자식 컴포넌트에서 전달받은 props는 변경이 불가능하고 props는 전달해준 최상위 부모 컴포넌트만 props를 변경할 수 있다.
- State
- 컴포넌트 내부에서 선언하며 내부에서 값을 변경할 수 있다.
- State는 동적인 데이터를 다룰 때 사용하며 사용자와의 상호작용을 통해 데이터를 동적으로 변경할 때 사용한다.
- 클래스형 컴포넌트에서만 사용할 수 있고, 각각의 state는 독립적이다.
- Props
- Data Flow
AngularJS
- 단일 페이지 어플리케이션 방식의 프론트엔드 개발을 위한 자바스크립트 프레임 워크 (또는 라이브러리)이다.
- 자바스크립트에서 처리하던 부분의 많은 부분을 HTML 템플릿 내로 가져오면서 자바스크립트는 단순화 되고, 데이터의 바인딩도 자유로워서 많은 편리함을 가져다 주었다.
- 특징
- 완전한 프레임 워크로, 프로젝트의 생성, 테스트, 빌드, 배포를 위한 모든 기능을 제공한다.
- TypeScript를 사용한다.
- 모듈과 컴포넌트 기반으로 동작한다.
- 웬만한 기능의 라이브러리는 모두 포함시켜서 자체적으로 제공한다.(라우팅, HTTP, Form 등)
Vue.js
- 웹 페이지 화면을 개발하기 위한 프론트엔드 프레임워크
- 뷰 코어 라이브러리는 화면단 데이터 표현에 관한 기능들을 중점적으로 지원
- 프레임워크의 기능인 라우터, 상태 관리, 테스팅 등을 쉽게 결합할 수 있는 형태로 제공
- Angular의 데이터 바인딩 특성과 리액트의 가상 돔(Virtual DOM) 기반 렌더링 특징을 모두 갖고 있음
- 특징
- 문법이 간편하고 작성하기 쉬움
- 기존 HTML 템플릿을 그대로 활용
- 다양한 라이브러리와 프레임워크를 사용하여 확장 가능
- Virtual DOM 사용
- MVVM 패턴
- Model-View-ViewModel의 약자로 프로그래밍 로직과 화면에 해당하는 View를 분리해서 개발하기 위해 설계된 패턴
- 일반적으로 웹은 HTML DOM이 View, 자바스크립트가 Model의 역할을 하게 되는데, MVVM 패턴은 View와 Model 중간에 ViewModel을 둠으로써 데이터 바인딩 처리 및 가상 DOM을 통한 성능 및 개발의 편의성을 제공하기 위해 만들어졌다.
- DOM
- HTML 문서에 들어가는 요소(태그, 클래스, 속성, ..)의 정보를 담고 있는 데이터 트리
- DOM Listener
- 돔의 변경 내역에 대해 즉각적으로 반응하여 특정 로직을 수행하는 장치
- Model
- 데이터를 담는 용기
- 보통 서버에서 가져온 데이터를 자바스크립트 객체 형태로 저장
- Data Binding
- 뷰에 표시되는 내용과 모데르이 데이터를 동기화
- View Model
- 뷰와 모델의 중간 영역.
- Dom Listener와 Data Binding을 제공하는 영역
- Component
- 화면에 비춰지는 뷰의 단위를 쪼개어 재활용이 가능한 형태로 관리하는 것으로 미리 정의된 옵션을 가진 Vue 인스턴스
차이점 및 정리
- Angular
- Angular는 app 개발에 필요한 모든 것을 제공하기 때문에 Learning Curve가 상당히 높다. TypeScript, MVC 외에도 Angular 내부의 동작 메커니즘, 제공하는 기술들도 알아야 한다.
- Vue
- Vue는 Angular나 React보다 상대적으로 배우기 쉽고 두 프레임워크로부터 Component와 같은 기능들을 채택하여 사용하고 있기 때문에, 두 프레임워크로부터 Vue로 변경이 쉬운 편이다. 그러나 Vue의 단순성과 유연성은 안 좋은 코드나 테스트와 디버깅을 힘들게 하는 양날의 검이 될 수 있다.
- React
- Guide 문서가 상당히 잘 되어 있으며, 대부분의 문제도 Stackoverflow에 올라와 있다. React는 Angular와 달리 완전한 프레임워크가 아니라서 추가적인 기능들에 대해 third-party 라이브러리가 필요하다.