Redux는 JavaScript 애플리케이션의 상태를 효과적으로 관리하기 위한 상태 관리 라이브러리로,
주요 개념들과 그들 간의 연결 관계는 다음과 같다
- Store:
Redux에서 상태가 저장되는 곳으로, 애플리케이션의 모든 상태를 단일한 객체 트리로 관리한다.
상태를 변경하는 유일한 방법은 액션을 디스패치하여 상태를 수정하는 것.
- Action:
애플리케이션에서 상태 변경을 위해 발생하는 이벤트 또는 동작을 나타내는 객체다.
주로 type 필드를 갖고 있으며, 상태를 변경할 때 사용된다.
- Reducer:
액션을 통해 상태를 변경하는 로직이 작성되는 곳으로,
현재 상태와 액션을 입력으로 받아 새로운 상태를 반환하는 순수한 함수다.
액션의 타입에 따라서 상태를 어떻게 업데이트할지를 결정한다.
- Dispatch:
액션을 스토어에 전달하는 메소드로, 상태를 변경하고 싶을 때 액션을 디스패치하여 상태를 업데이트할 수 있다.
Redux와 Recoil은 모두 상태 관리를 위한 JavaScript 라이브러리로, React 애플리케이션에서 사용된다.
그러나 둘 사이에 몇 가지 차이점이 있다
- 중앙 집중화 vs 분산화:
- Redux는 중앙 집중화된 상태 관리를 사용하여 애플리케이션의 상태를 단일 스토어에 저장하고 관리한다.
- Recoil은 분산화된 상태 관리를 사용하여 각 컴포넌트마다 독립적인 상태를 가질 수 있다.
- 불변성 (Immutability) vs 가변성 (Mutability):
- Redux는 상태의 불변성을 유지하고, 상태를 직접 변경하는 것이 아닌
복사본을 만들어 새로운 상태를 반환하는 방식으로 업데이트한다.
- Recoil은 상태의 가변성을 허용하며, 상태를 직접 변경할 수 있다.
이는 Recoil이 더 자유로운 상태 변경을 허용하지만,
Redux가 상태 변경에 대한 예측 가능성과 디버깅을 향상시키는 데 도움이 된다는 점에서 차이가 있다.
- 보일러 플레이트:
- Redux는 상태, 액션, 리듀서, 디스패치 등의 개념이 있어 초기 설정이 복잡할 수 있다.
- Recoil은 더 간단하고 직관적이기 때문에 초기 설정이 더 간단할 수 있다.
- Time Travel:
- Redux는 Time Travel 기능을 제공하여 상태 변화를 추적하고 디버깅을 도와준다.
- Recoil은 이러한 Time Travel 기능을 제공하지 않는다.