리액트로 프로젝트 3개를 했지만, 리액트가 어떻게 동작하는 지 설명하라고 물어보면 말문이 막히는 경험을 했다. 수능 만점자들이 흔히 하는 "교과서만 보고 공부했어요"라는 대답에서 힌트를 얻어, 리액트 공식문서를 다시 살펴보기로 했다. 리액트 공식문서를 살펴보며, 그간 익힌 내용들을 접목시켜 리액트가 무엇이고 어떻게 작동하는지에 대해 설명을 해보고자 한다.
리액트는 페이스북이 만든 JavaScript기반의 라이브러리이다. 페이스북은 “지속해서 데이터가 변화하는 대규모 애플리케이션을 구축하기” 위하여 React를 만들었다고 밝혔다.
리액트 공식문서는 리액트를 다음과 같이 설명하고 있다.
React는 사용자 인터페이스를 구축하기 위한(for building composable UI) 선언적이고 효율적이며 유연한 JavaScript 라이브러리입니다. “컴포넌트”라고 불리는 작고 고립된 코드의 파편을 이용하여 복잡한 UI를 구성하도록 돕습니다.
리액트는 클라이언트(프론트엔드)에서 사용하는 라이브러리로, 프레임워크인 뷰
나 앵귤러
와 다르게 MVC(Model, View, Controller)모델 중에 View
만을 관리한다.
왜 View
만을 관리하는 라이브러리를 만들었을까? 생각해보자. 리액트는 페이스북
이 만든 라이브러리다. 페이스북은 거대한 서비스로, 유저들의 엄청난 데이터가 생성되고 삭제되고 수정되고 읽혀진다(C.R.U.D). 이러한 거대한 데이터들의 상태를 쉽게 관리하기 위해, 그리고 사용자가 서비스를 만나는 표면인 UI(유저 인터페이스)에 집중하기 위해 리액트를 만든 것이다. 즉, 사용자 경험을 향상시키기 위해 리액트를 만든 것이다.
페이스북은 PHP 언어를 사용하는데, PHP의 단점을 보안하기 위해 HHVM, Hack, XHP를 만들었다.
이를 통해 Back-end에서는 자체적으로 개선하여 개발 효율성을 높이고 있지만, Front-end의 한계를 극복하기 위한 대안이 필요했을 수 있다.(이 글의 추측에 따르면 그렇다)
root
로 취급되는 DOM Element가 있으면 어디에서나 적용할 수 있다.참고자료
- 배민의 선택이 더 궁금하다면, 이 영상을 참고하면 좋다.
- MVC패턴이 왜 생겨났는지 알고 싶다면 이 자료를 참고하면 좋다.
- 리액트의 Flux 패턴에 대해 더 알고 싶다면 이 자료와 영상또는 Flux로의 카툰 안내서를 참고하면 좋다.
MVC 패턴에 대해 더 알아보자
- MVC 패턴은 매우 효율적인 방식이지만. 규모가 커지면 '컨트롤러 (정보를 만들어내는 방식 (필터링 / 알고리즘))' 부분이 계속 커져서 속도가 느려지는 단점이 있다.
- MVC 패턴은 대부분
Blocking I/O
(인풋, 아웃풋) 방식을 사용하기 때문이다.Blocking I/O
방식은 자신의 일이 끝날때까지 대기하다가 모든 일이 끝나면 그제서야 다음 일을 받는 방식이다.
우리는 컴포넌트를 사용하여 React에게 화면에 표현하고 싶은 것이 무엇인지 알려줍니다. 데이터가 변경될 때 React는 컴포넌트를 효율적으로 업데이트하고 다시 렌더링합니다.
컴포넌트
라는 재사용가능한 UI 블럭조각을 통해 복잡한 앱을 효율적으로 만들 수 있다.컴포넌트
는 재활용 가능한 UI 구성 단위이다. 캡슐화를 컴포넌트별로 시켜주기 때문에, UI가 재활용 가능한 것이 큰 장점이며 유지보수 측면에서 뛰어나고 페이지의 구성을 한눈에 파악할 수 있다.React는 Reactive 한 단방향의 데이터 흐름을 가지고 있다. Reactive하다는 것은 상태(state)가 바뀌면 상태에 의존하는 뷰도 함께 업데이트된다는 것이며, 단방향 데이터 흐름이라는 것은 한 방향으로 데이터가 흐른다는 것이다. 데이터는 상위 컴포넌트(Parent)에서 하위 컴포넌트(Children)로 흐르게 되어 있는데, 이 데이터는 React에서 prop이라고 지칭되며, JSX에서는 HTML의 attribute처럼 작성된다.
데이터 바인딩에 대해서 더 궁금하다면, 이전 글을 참고하면 좋다.