Flux 이란
- 단방향 데이터 흐름을 통해 보다 예측가능하게 상태를 관리할 수 있는 클라이언트 사이드 웹 어플리케이션 아키텍쳐
기존의 방식은 MVC 패턴
![](https://velog.velcdn.com/images/jm4293/post/5a0e498a-7d2c-4078-8221-6c14daca3fa2/image.png)
- Model, View, Controller 를 사용하여 유연성과 재사용성을 증가시킨 디자인패턴이다.
- Cotroller가 Model를 조작하고 Model이 View를 업데이트하며 View도 Model를 직접 업데이트한다.
- Model과 View가 서로 직접 업데이트하는 것을 양방향 데이터바인딩이라고 한다.
하지만 MVC가 클라이언트 사이드로 넘어오면서 MVC는 이러한 방법으로 변경되었다
![](https://velog.velcdn.com/images/jm4293/post/6982da31-d77b-4c42-be64-f859537d7e99/image.png)
- 차이점은 View가 Model를 가르키는 화살표가 사라진것이다.
- MCV 패턴이 클라이언트 사이드로 넘어오면서 많은 프레임워크로 인하여 실제적으로 양방향 바인딩으로 구현이 되어버렸다
결국 이러한 결과로 나타나게 된다 나만 알 수 있는 코드상태로
![](https://velog.velcdn.com/images/jm4293/post/167e3713-c9e1-41ce-a094-eebcac3cfee3/image.png)
다시 Flux로
![](https://velog.velcdn.com/images/jm4293/post/0402e2bf-9dc3-4db9-8eea-ce8fb040eeac/image.png)
-
Action
![](https://velog.velcdn.com/images/jm4293/post/e27d4d22-dcc0-45d3-bba9-f4d42eb1561e/image.png)
-
Dispatcher
- View로부터 Action을 받아 모든 Store들에게 전송
- 내붑에 상태 변경 로직이 존재하지 않음
- Store 간 의존성 관리
- Store A의 상태 변경 순서를 Store B 다음으로 미룰 수 있음
-
Store
- Dispatcher에서 전달된 Action을 통해서만 상태 변경
- 상태가 변경되면 View에게 통지
-
View
- Controller-View(React)
- Store가 통지하는 상태 변경을 수신
- 받은 상태에 따라 View를 새로 렌더링
- Dispatcher에게 Action 전달
- 정리하면
![](https://velog.velcdn.com/images/jm4293/post/253440ff-4173-4b83-adb9-607800a6464f/image.png)
Flux 장점
- 데이터 흐름을 구조화하여 전체 흐름을 파악하고이는 개발자에게 의존하는 것이 아니라 팀원 누구나 각각의 액션을 따라가 어떤 변경이 발생하는지 알 수 있어 코드의 흐름을 파악하기 쉬워진다
- 결국 코드를 유지보수하기에 쉽게 만들고 새로운 기능확장에 보다 더 유연하다
- 또한 유닛테스트도 쉬워진다.
Flux 단점
- 초기에 작은 기능을 정리하기에 많은 코드가 필요하다.
- 러닝커브가 높다.
https://youtu.be/wQFBgKl1PYw?si=5UzgSx9_fh_gvqHx