공부하다보니, useState는 거의 이제 이해한 것 같아서 편리한데,
전역으로 상태관리 하려면.. context API가 제일 간단하고 쉬워보여서, 이것만 쓰고 싶은데... (리덕스 싫어..)
그런데 역시나 장단점이 있다. 전부 공부하고 적재적소에 써야 할 듯. ~ .. 야호 ~
우선 제일 좋아하는 context API를 자세히 알아보자.
리액트에서 전역 상태 관리를 할 때 Context API는 가장 기본적이고 간단한 방법 중 하나예요. 특히 앱이 작거나 중간 규모일 때는 굳이 Redux나 Zustand 같은 외부 라이브러리를 쓰지 않아도 되고, Context + useReducer 조합만으로도 충분히 효율적인 구조를 만들 수 있어요.
✓Context API의 장점
- 간단하고 가볍다: 외부 라이브러리 설치 없이 바로 사용 가능.
- 리액트 내장 기능이라 배우기도 쉽고 공식 문서도 잘 되어 있음.
- 작은 프로젝트나 전역 데이터가 많지 않은 경우 적합함.
✓ 단점
- 불필요한 리렌더링 이슈: 하위 컴포넌트들이 전부 다시 렌더링될 수 있음.
- 복잡한 상태 로직 처리에는 한계: 예를 들어 상태가 깊고, 여러 모듈로 나눠야 할 경우 관리가 어려워짐.
- 성능 최적화가 번거로움: 값이 자주 바뀌는 Context는 성능 저하를 일으킬 수 있음.
✨ 팁
- useReducer + Context를 같이 쓰면 더 구조적으로 관리할 수 있어요.
- 여러 context로 나눠서 성능을 분산시키는 것도 좋은 방법이에요.
- 더 복잡해지면 그때 Redux Toolkit, Zustand, Jotai 같은 걸 고려해도 늦지 않아요.
context API에 불필요한 렌더링 이슈가 있었다니..
그러면 리덕스나 주스탄드는 이런 단점이 없어? 왜? 어떤 원리의 차이야 ?
네, Context API는 불필요한 리렌더링 문제가 있을 수 있고,
Redux나 Zustand는 그런 문제를 더 잘 피할 수 있는 구조를 갖고 있어요.
왜 Context는 불필요한 리렌더링이 발생할까?
리액트에서는 Context의 value가 바뀌면
그 Context를 구독하고 있는 모든 하위 컴포넌트가 리렌더링돼요.
예를 들어:
<MyContext.Provider value={count}>
<CompA /> // count랑 관련 없음
<CompB /> // count를 쓰는 컴포넌트
</MyContext.Provider>
count가 바뀌면, CompA, CompB 모두 리렌더링돼요.
CompA는 사실 count랑 관련 없는데도요.
이게 Context의 구조적 한계예요.
Redux, Zustand는 어떻게 다르냐면?
이 라이브러리들은 구독(subscription) 단위가 더 정교해요.
특히:
Redux
- useSelector(state => state.something)으로 필요한 부분만 선택.
- 내부적으로 === 비교(얕은 비교)를 통해 값이 바뀐 경우에만 리렌더링.
- 즉, selector 함수로 직접 리렌더링 범위를 좁힘.
Zustand
- 상태 자체가 proxy처럼 동작해서, 사용한 부분만 자동 추적함.
- 예를 들어 useStore(state => state.count)처럼 쓰면,
count만 바뀌었을 때만 컴포넌트가 리렌더링돼요. - 훨씬 자동화되고 최적화된 구조예요.
그래서, 작은 프로젝트는 Context로 충분하지만,
상태가 자주 바뀌거나 성능이 중요한 경우는 Redux나 Zustand가 좋아요.
상태관리방법 | 설명 | 장점 | 단점 |
useState | 리액트의 기본 훅으로 컴포넌트의 로컬 상태를 관리. | - 간단하고 직관적 | - 컴포넌트 내 상태만 관리 가능- 여러 상태를 다룰 때 코드가 복잡해질 수 있음 |
useReducer | 더 복잡한 상태 로직을 다룰 때 유용. dispatch와 action을 사용하여 상태를 업데이트. | - 상태 업데이트 로직을 더 세밀하게 제어 가능- 상태 업데이트가 많을 때 유용 | - useState보다 다소 복잡할 수 있음- 더 많은 코드 작성 필요 |
Context API | 전역 상태를 관리하는 방법으로, React의 기본 기능. 특정 데이터를 여러 컴포넌트에서 공유할 때 유용. | - 여러 컴포넌트에서 상태 공유가 쉬움- React 내장 기능이라 별도의 라이브러리 필요 없음 | - 상태 업데이트 성능 문제 발생 가능- 컴포넌트 트리 깊어질수록 성능 저하가 있을 수 있음 |
Redux | 전역 상태 관리 라이브러리로, 중앙에서 상태를 관리하고 액션을 통해 상태를 업데이트. | - 복잡한 상태 로직을 깔끔하게 관리 가능- 미들웨어를 통해 비동기 처리 용이- 개발자 도구가 잘 제공됨 | - 코드가 복잡해질 수 있음- 설정 및 사용법이 상대적으로 어렵고, boilerplate 코드가 많음 |
MobX | 상태 관리 및 상태 변경을 자동으로 추적하는 라이브러리. | - 상태 변화가 자동으로 UI에 반영됨- 코드가 간결하고 직관적 | - React와의 통합이 필요하고 설정이 다소 복잡할 수 있음- 상태가 변경되는 방식이 명확하지 않을 때 추적 어려움 |
Recoil | React에서 상태를 관리하기 위한 라이브러리로, 상태를 atom 단위로 나누어 관리. | - 상태 관리가 직관적이고 세밀함- 비동기 상태 및 의존성 관리 용이 | - 아직 새로운 라이브러리여서 커뮤니티나 문서가 부족할 수 있음- 성능에 영향이 있을 수 있음 |
Zustand | 간단하고 직관적인 상태 관리 라이브러리로, 상태를 전역적으로 관리. | - 설정이 간단하고 직관적- React와 쉽게 통합 가능- 성능이 뛰어남 | - 비교적 적은 커스터마이징이 가능하며, 복잡한 상태 관리를 위한 추가 작업이 필요할 수 있음 |
XState | 상태 머신과 상태 차트를 기반으로 상태를 관리하는 라이브러리. | - 상태 머신 패턴을 사용하여 복잡한 상태 흐름을 관리- 예측 가능한 상태 변화를 제공 | - 설정이 복잡할 수 있음- 상태 관리의 단순함을 추구하는 경우 과도하게 느껴질 수 있음 |
위 표는 리액트에서 사용할 수 있는 상태 관리 방법들을 요약한 것입니다. 예를 들어, 간단한 상태 관리는 useState나 useReducer로 충분할 수 있지만, 더 복잡한 상태 관리가 필요한 경우 Redux나 MobX와 같은 라이브러리를 선택하는 것이 좋습니다.
요즘 실무에선 뭐가 제일 많이 쓰여 ? 근데 초보 개발자는 다 공부해야겠지 ?
실무에서 요즘 가장 많이 쓰이는 상태 관리 라이브러리는 Redux와 Zustand 외에도 React Query나 Recoil도 점점 인기를 끌고 있어요.
하지만 가장 널리 사용되는 건 여전히 Redux (특히 Redux Toolkit)이에요.
왜냐하면:
실무에서 많이 쓰이는 라이브러리
- Redux (Redux Toolkit)
- 대규모 프로젝트나 팀 협업이 많은 프로젝트에서 여전히 많이 쓰임.
- 미들웨어를 통한 비동기 처리나 상태 추적에 강점이 있음.
- 자동화된 개발 툴 (DevTools) 덕분에 디버깅이 쉬워요.
- Zustand
- 작은 규모의 프로젝트에서는 Zustand가 점점 인기를 끌고 있음.
- 설정이 간단하고, 훨씬 직관적이라 초보 개발자에게 쉽게 접근할 수 있음.
- 성능이 우수하고, 작고 효율적인 애플리케이션에 적합.
- React Query
- 서버 상태 관리 라이브러리로, API 호출 결과를 자동으로 캐시하고 관리해줘요.
- 데이터 패칭 및 캐싱을 쉽게 처리할 수 있어서, 백엔드 통신이 많은 앱에서 사용.
- Recoil
- 상태 관리의 단순화와 성능 최적화를 목표로 만든 라이브러리.
- 특히 공유된 상태와 파생된 상태를 효율적으로 관리할 수 있음.
👨💻 초보 개발자는 다 공부해야 할까?
초보 개발자라면 모든 걸 다 공부할 필요는 없어요.
초기에는 필요한 것만 먼저 배우고, 점차적으로 깊이를 늘려가는 게 좋아요.
- 기본적인 상태 관리인 useState와 useReducer부터 시작해요.
- 작은 프로젝트나 간단한 상태 관리는 Context API나 Zustand로 충분히 해결 가능해요.
- 대규모 프로젝트나 협업이 많아질수록 Redux를 공부하는 게 중요해져요.
- React Query나 Recoil은 백엔드 통신이나 복잡한 상태 관리가 필요할 때 선택적으로 공부하면 좋겠어요.
🧑🏫 공부 방법
- Context API → 상태 관리의 기본을 이해하고, 컴포넌트 간 데이터 전달을 익히기.
- Zustand → 간단한 전역 상태 관리를 통해, 직관적인 코드 작성법 익히기.
- Redux → 복잡한 애플리케이션에서 상태를 효율적으로 관리하는 방법을 익히기.
- React Query → 서버 상태 관리와 API 통신을 배우기.
결론적으로, 초보자는 간단한 상태 관리부터 시작하고,
필요한 때 Redux나 React Query를 공부하는 방식이 좋아요.
이렇게 하면 효율적으로 실력을 쌓을 수 있어요!
지피티 선생님이 정답은 아니지만 ~
이렇게 공부하면 효율적일 것 같습니다. 다음 글은 zustand 관련 글!
'Studying > React' 카테고리의 다른 글
리액트 공부하기 - debounce, throttle (디바운스, 스로틀) (0) | 2025.05.07 |
---|---|
리덕스 툴킷(전역 상태관리) 공부하기 - 기본적인 예제 코드와 함께 (basic 단계) (0) | 2025.05.05 |
리액트, 자바스크립트 공부하기 - JSON, fetch, 비동기 함수(axios) (1) | 2025.05.05 |
리액트 공부하기 - 오류는 없는데, 화면에는 렌더링이 안될때? (0) | 2025.05.05 |
리액트 공부하기 - 리덕스 툴킷 (0) | 2025.04.29 |