라이브러리
이다.음..리엑트는 페이스북과 인스타그램에서 사용자 경험을 향상하기 위해 만든 라이브러리이다.
그래서
React를 사용하기 위해서 기존 코드를 모두 바꿀 필요 없이 필요한 부분부터 조금씩모델 변경 -> 뷰 변경
이 아니라페이스북은 MVC는 확장이 어렵고 거대한 시스템에 어울리지 않는다고 결론을 내렸다.
너무 빠르고 복잡해진다.
(새로운 기능 추가시 시스템의 복잡도 증가)
그래서 코드 예측이나 테스트(테스트 코드)의 어려움
유지보수 비용 증가 등 문제 발생
ex) 페이스북의 안 읽은 글 갯수 표시 사례,
-> 사용자가 아직 읽지 않은 글을 읽으면 그만큼 갯수를 빼는 단순한 기능이지만,
이를 MVC로 구현하게 되었을 때 모델별로 데이터를 가지고 있는게 달라서 싱크하거나 업데이트 해야 하므로 매우 불편했다.
모델과 뷰의 수가 커지고 데이터의 흐름이 양방향으로 이루어질 수록
복잡도는 더욱 증가하고 디버깅 및 코드를 이해하기 어려워진다.
좀 더 예측 가능하도록 코드 구조화에 대한 목표로
데이터 흐름이 단방향인 시스템 아키텍쳐 Flux를 제안한다.
*여기서 말하는 뷰는 단순히 화면에 보여지는 것을 넘어 자식 뷰로 전달도 하는 컨트롤러 역할도 병행한다. 그래서 뷰 또는 컨트롤러 뷰 라고 부른다.
이러한 흐름의 장점은 데이터를 직접 수정할 수 없고 반드시 액션을 통해서만 수정이 일어나기 때문에 교통정리가 가능해진다.
- Dispatcher: Flux 애플리케이션의 모든 데이터 흐름을 관리하는 허브 역할.
액션이 발생하면 디스패처로 메세지나 액션 객체가 전달되고 디스패처에서는 등록된 콜백함수를 통해 이 메세지를 스토어에 전달한다.
다른 구성요소와 달리 디스패처는 전체 애플리케이션에서 한 개의 인스턴스만 사용한다.
- Store: 스토어는 애플리케이션 상태를 저장한다.
MVC패턴과 유사하지만 애플리케이션의 특정 도메인에 해당하는 상태를 다룬다.
Flux의 스토어는 상태를 다루기 때문에 무엇이든 저장할 수 있고 단순한 Object로 구성되어 있다. 모든 상태변경은 스토어에 의해 결정되어야만 한다.
- View(뷰, 컨트롤러 뷰): 상태를 가져와서 보여주고 입력받을 화면을 보여주는 역할.
Store가 변경된 경우 같이 변경된다.
- Action(액션): 디스패처 특징 메소드를 실행하면 스토어에 변화를 일으킬 수 있다.
이때 이 데이터 묶음을 액션이라 한다.
전달할 액션 객체는 액션 생성자라는 함수를 통해 만들어진다.
뷰에서 액션생성자를 실행하여 전달할 메시지를 생성하고, 디스패처에 전달하여 스토어에 저장되어 있는 상태를 변경한다.
Flux 아키텍처의 큰 특징은 단방향 데이터 흐름(*undirectional data flow)이다.
참고
https://blog.gaerae.com/2016/04/hello-react.html
https://lemontia.tistory.com/637
https://brunch.co.kr/@eight-two-five/14
https://react.vlpt.us/basic/04-jsx.html