Please enable JavaScript.
Coggle requires JavaScript to display documents.
상태관리 도구로 Redux를 사용하는 이유는 무엇인가요? - Coggle Diagram
상태관리 도구로 Redux를 사용하는 이유는 무엇인가요?
왜 상태도구 관리가 필요한가?
React의 한계
props drilling
상위 → 하위로 여러 단계 전달
전역 상태를 효율적으로 관리하고자 상태관리 도구가 필요
전역 상태 공유 어려움
로그인 정보, 테마, 장바구니 등
상태 동기화 어려움
여러 컴포넌트가 같은 상태를 공유해야 할 때 일관성 유지가 힘듦
비교군
Recoil
페이스북 제작, Atom 단위 관리
React 친화적인 API
React의 Hooks와 유사한 API를 제공
최적화된 렌더링
상태(Atom)를 구독하는 컴포넌트만 리렌더링되어 불필요한 렌더링을 방지하고 성능을 최적화
동시성 모드 지원
동시성 모드를 공식적으로 지원하여 더 나은 사용자 경험을 제공
비동기 처리 내장
비동기 작업을 처리하기 위한 별도의 미들웨어 없이 selector를 통해 간편하게 처리할 수 있습니다.
비교적 작은 커뮤니티
Redux에 비해 커뮤니티 규모가 작아 자료나 해결책을 찾기 어려울 수 있습니다.
React에만 의존적
React 환경에서만 동작하는 상태관리 툴
React 친화적인 API를 선호하고, 불필요한 리렌더링을 최소화하여 성능을 최적화하고 싶을 때 좋은 선택
Zustand
Hook 기반, 간단한 API
간결하고 직관적인 API
매우 적은 양의 코드로 상태를 정의하고 사용할 수 있습니다.
가벼운 라이브러리
다른 상태관리 라이브러리에 비해 크기가 매우 작아 프로젝트에 부담을 주지 않습니다.
유연한 상태 관리
Provider로 컴포넌트를 감싸줄 필요가 없어 구조가 단순
가볍고 간결한 상태 관리 라이브러리를 선호하며, 보일러플레이트 코드를 최소화하고 싶을 때 적합
제한된 기능
Redux만큼 다양하고 강력한 미들웨어나 확장 기능을 제공하지는 않습니다.
미성숙한 생태계
Redux에 비해 커뮤니티나 관련 생태계가 상대적으로 작습니다.
Context API
React 기본 제공 전역 상태
매우 가볍고 사용법 쉬움
React에 내장된 기능으로 별도의 라이브러리 설치 없이 간단하게 전역 상태를 공유
소규모 애플리케이션에서 간단한 전역 상태를 관리하거나 Prop Drilling을 피하고 싶을 때 유용
성능 문제
Context를 사용하는 모든 하위 컴포넌트는 상태가 변경될 때마다 불필요하게 리렌더링될 수 있어 성능 저하의 원인
Prop Drilling 해결
깊게 중첩된 컴포넌트에도 props를 일일이 전달할 필요 없이 상태를 직접 전달할 수 있습니다.
복잡한 상태 관리에 부적합
상태가 복잡해지거나 애플리케이션 규모가 커지면 관리가 어려워집니다.
Redux를 사용하는 이유
단일 전역 store로 상태를 관리
상태 변경은 Action → Reducer → Store 흐름으로 이루어짐 (예측 가능)
불변성 유지를 강제하여 디버깅/로깅/타임트래블이 쉬움
미들웨어 활용 가능 (ex. redux-thunk, redux-saga)
중앙관제탑과 같은 역할
React Component는 도시에 흩어져있는 각각의 건물
Redux 장점
중앙 집중식 상태 관리
모든 상태를 하나의 스토어(Store)에서 관리하여 데이터 흐름을 명확하게 파악할 수 있습니다.
강력한 미들웨어 지원
Redux-Saga, Redux-Thunk 등 다양한 미들웨어를 활용하여 비동기 작업을 효율적으로 처리할 수 있습니다
예측 가능한 상태 관리
액션(Action)을 통해 상태를 변경하는 단방향 데이터 흐름은 상태 변화를 예측하고 디버깅하기 쉽게 만듭니다.
풍부한 개발도구와 커뮤니티
Redux DevTools와 같은 강력한 디버깅 도구를 제공하며, 거대한 커뮤니티를 통해 다양한 자료와 지원을 받을 수 있습니다.
Redux 단점
보일러플레이트 코드가 많음
간단한 상태를 추가하더라도 여러 파일을 수정해야 하는 번거로움이 있습니다.
작은 프로젝트에는 오히려 과함
높은 학습 곡선 및 복잡성
Action, Reducer, Store 등 이해해야 할 개념이 많고 초기 설정이 복잡
유지보수성
복잡한 상태를 명확하게 관리
디버깅이 쉬운 구조를 제공