Redux를 알기위해선 먼저 React의 UI Rendering logic을 알아야 한다.
React에서는 App.js라는 최상위 컴포넌트가 모든 Data를 확보 및 전송, UI rendering까지 모든 과정을 진행한다.
즉 하나의 컴포넌트에서 다양한 컴포넌트 및 Data의 흐름을 관장하고 지휘하며,
각 컴포넌트끼리의 접근은 보통은 불허한다.
이러한 흐름에서 Data 저장소의 개념은 사실 존재하지 않고,
코드 상에서 선언한 변수에 담아놓는 개념이다.
더 자세히 보면
이러한 Data흐름이 한 컴포넌트에 의해 관리되고, 그 방향성(Data흐름)이 정해지지 않은 프로젝트의 경우
- App.js 자체의 코드 용량증가
- 이러한 Data 흐름을 관리할 Component의 과부하
- graph처럼 얽힌 node, Data 구조에서 App.js와 Data간의 거리증가
유지보수가 매우 어려워지게 되는 React의 단점을 보완하고자 나온 pattern으로,
Data의 단방향 흐름을 구현하여 코드의 가독성 및 Data흐름, 제어를 가능하도록 해주는 기술이 Redux이다.
간략히 말하면 Redux는 facebook에서 고안한 design pattern으로
Data의 단방향 흐름을 실현하고, 이를 효율적을 구현하기위한 방법론이다.
Redux의 Data 단방향 흐름은 Action - Store(Reducers) - React
이 흐름은 Redux의 기초적인 흐름을 이해하기위한 최소한의 logic이다.
우리는 특정 API나 Command를 통해 Data에 접근하고 수정하는 작업이 필요하다.
기존 NVC Pattern 및 React component 구조에서 Data를 CRUD하기위한 다양한 함수 및 컴포넌트들이 여러 곳에서 정의되고, 이로 인해 Data흐름이 양방향적이고 분산적이었다.
하지만 Redux의 flow Architecture에서는 그러한 CRUD Command가 Action으로 저의되어, Store라는 곳에 Data가 저장된다.
이 Store는 단순히 Data가 저장되는 곳이 아닌, 상태관리가 이루어지는 곳으로
기존 App.js라는 최상위 컴포넌트에서 관리한 Data의 흐름을 한 곳에서 관리해주는 역할을 맡는다.
보통 React에서 Redux를 호출하여 사용하며, Redux controller를 포함한다. 서로 종속적인 관계는 아니다.
위 과정만 보면 아무리 Redux 구조가 잘 구현되었더라도, React자체로 구현된 microservice에서 곳곳에 산발한 controller 등으로 data의 단방향 흐름이 과연 가능할지
의문이 든다.
이러한 microservice의 data흐름과 분산을 단방향화하도록 가능하게 해주는 도구가 Reducer이고, Reducer는 Data를 건드리지 않고 읽기만 한다.
Data가 변화가 필요하다면 상태변화한 Data를 새로운 객체, 새로운 배열로 만들어 반환해준다.
Redux의 flow Architecture에서 중요한 흐름은 Data Store가 외부에 있다는 것이다.
위 기초에서 전체적인 흐름을 이해한 상태로, 세부적인 logic을 살펴보자.
redux 구조
fastcampus 강의자료 발췌
Redux 개념(※Redux 이해를 위해선 필수)
https://velopert.com/3528
https://velopert.com/3533
flow Architecture
https://facebook.github.io/flux/docs/in-depth-overview/