| title | JS 상태관리 도구 개론 |
|---|---|
| date | 2020-11-19 11:00:00 -0800 |
| author | wooooooood |
| category | S2_Round1 |
- 상태(데이터)가 언제, 어디서, 왜, 어떻게 변화했는지 알기 어렵다.
- 다수의, 흩어진 Component가 같은 상태를 공유할 때 이를 관리하는 것이 복잡하다.
- Component 단위에서는 props를 통해 하위 component로 상태를 전달한다. Component가 증가한다면 비효율적인 작업이 생길 수 있다.
=> 이를 개선하기 위해 상태관리 도구 Redux, MobX, Recoil(React) 등이 나타났다.
=> 이 글에서는 FW에 구애받지 않는 JS 상태관리 도구인 Redux, MobX에 대해 간단하게 설명한다.
A Predictable State Container for JS Apps
- Functional Programming
- Subscribe하는 모든 Component가 접근 가능한 Centralized global store로 상태를 관리한다.
Immutability를 유지하기 위해 원본 객체를 수정하는 것이 아닌, 객체의 복사본을 만들어 복사된 객체를 갱신한다.
ex.
const arr = ['a', 'b']
const arrCopy = arr.concat('c')- View: 보여주기만 하는 순수 컴포넌트
- Action:
Type을 가진 JS객체로, User input, Trigger 등의Event라고 생각할 수 있다. - Reducer: 현재 State와 Action을 감지하여 State를 갱신(바꿔치기)한다.
EventListener와 유사하다. - Store: 현재 Redux의 State, 읽기 전용
- Middleware: Action을 통해서 State를 바꾸기 전에 API호출 등 데이터가 변경되는 로직이 있을 때 비동기 작업 등을 처리할 수 있다.
- 애플리케이션이 복잡해질수록
redux-saga,redux-thunk,redux-pack등의 라이브러리를 추가로 알아보는 것에 대한 부담?
Simple, scalable state management
- Object-Oriented Programming and Reactive Programming
- Application state: Objects, arrays, primitives 등의 model이며 이러한 값들을
data cell이라고 한다. - Derivation: Application에서 자동으로 계산되는 모든 값.
- Reaction:Derivation과 비슷하다. 차이점은, 값을 생성하지 않는 함수이며 Task를 수행하기 위해 자동으로 수행되며 주로 I/O 작업과 연관된다. (ex. DOM update, Network ..)
- Action: State를 변경할 수 있는 모든 것을 의미하며 동기적으로 처리된다.
- 쉬운 편이다!
- 문서가 부실하다..
- 개발자 도구가 불편하다!
- 애플리케이션이 커질수록 복잡해진다 (Store가 여러개이기 떄문에)


