개발 방법론 & 아키텍쳐

Redux 단점 보완: 전역 상태 관리

atomicdev 2024. 10. 17. 08:49
728x90

React의 상태관리 중 "전역"과 "원자 단위", 그리고 "전역 및 로컬"의 차이점을 설명해드리겠습니다.

Redux, Zustand, Jotai, Recoil의 상태 관리 방식을 비교

1. Redux (전역 상태 관리)

Redux는 전역 상태 관리 라이브러리입니다. 즉, 애플리케이션의 모든 상태를 하나의 **전역 스토어(store)**에서 관리합니다. 이 방식의 장단점은 다음과 같습니다:

  • 장점:
    • 상태의 중앙 집중화: 애플리케이션 전반에서 상태를 일관되게 관리할 수 있어, 상태가 어디서 어떻게 변경되는지 쉽게 추적할 수 있습니다.
    • 대규모 애플리케이션에서 상태의 일관성과 추적 가능성을 높여줍니다.
    • 미들웨어를 통해 상태 변경과 사이드 이펙트를 제어할 수 있어 복잡한 비즈니스 로직을 처리하기 좋습니다.
  • 단점:
    • 모든 상태를 하나의 스토어에 넣다 보니 상태의 관리가 복잡해질 수 있습니다.
    • 상태의 변경이 전역에서 일어날 때마다 모든 컴포넌트가 리렌더링될 가능성이 커져 성능 저하를 초래할 수 있습니다.
    • 설정이 복잡하고 보일러플레이트 코드가 많습니다(이를 해결하기 위해 Redux Toolkit이 등장).

2. Zustand (전역 및 로컬 상태 관리)

Zustand는 전역 상태와 로컬 상태를 모두 관리할 수 있습니다. 특정 상태는 전역적으로 관리하면서, 필요할 때는 로컬 상태로도 관리할 수 있습니다. 이는 상태를 어디서든 쉽게 불러올 수 있도록 하면서도, 불필요한 리렌더링을 방지할 수 있는 장점이 있습니다.

  • 장점:
    • 상태를 컴포넌트 내부 로컬 상태처럼 관리하면서도 필요할 때는 전역 상태처럼 접근 가능하여 유연성 제공.
    • 특정 상태만 선택적으로 구독(subscribe)할 수 있어, 전역 상태를 변경하더라도 관련된 컴포넌트만 리렌더링됩니다.
    • 초기 설정이 간단하며 보일러플레이트 코드가 적습니다.
  • 단점:
    • 상태 관리의 복잡성이 증가할 수 있습니다. 전역과 로컬을 섞어 쓰는 경우, 어떤 상태가 어느 컨텍스트에서 변경되고 있는지 추적하기가 어려울 수 있습니다.
    • 대규모 애플리케이션에서는 전역 상태 관리 측면에서 복잡해질 수 있습니다.

3. Jotai 및 Recoil (원자 단위 상태 관리)

JotaiRecoil은 상태를 "원자(atomic) 단위"로 관리합니다. 원자 단위 상태란, 상태를 매우 작은 단위로 쪼개어 각각의 상태가 독립적으로 관리되는 방식을 의미합니다.

  • 장점:
    • 세분화된 상태 관리: 각 상태가 독립적으로 관리되기 때문에, 하나의 상태가 변경되더라도 관련된 부분만 리렌더링됩니다. 이는 성능을 향상시킬 수 있습니다.
    • 상태의 독립성: 상태 간의 의존성을 줄일 수 있어, 각각의 상태가 더욱 독립적으로 동작하며 이를 결합해 사용하기도 좋습니다.
    • 비동기 상태 관리에 강력하며, 특히 Recoil은 비동기 데이터를 처리하는 데 있어 매우 직관적입니다.
  • 단점:
    • 상태가 너무 세분화되면 상태 관리의 복잡성이 증가할 수 있습니다. 많은 원자들이 상호작용하게 되면 이를 관리하는 데 어려움이 따를 수 있습니다.
    • 원자 단위 상태의 설계가 제대로 이루어지지 않으면, 상태 변경이 복잡해질 수 있습니다.

비교 요약

  • Redux (전역 상태 관리): 모든 상태를 하나의 전역 스토어에서 관리해 중앙 집중화된 방식으로, 대규모 애플리케이션에 적합하지만 보일러플레이트 코드가 많고 상태가 많을수록 복잡해질 수 있습니다.
  • Zustand (전역 및 로컬): 전역 상태와 로컬 상태를 모두 유연하게 관리할 수 있어, 선택적 구독을 통해 성능을 향상시킬 수 있습니다. 하지만 전역과 로컬 상태가 혼재할 경우 복잡해질 수 있습니다.
  • Jotai 및 Recoil (원자 단위 관리): 상태를 작은 단위로 쪼개어 독립적으로 관리하여 성능 최적화에 뛰어나지만, 상태가 너무 세분화될 경우 관리가 복잡해질 수 있습니다.

따라서, 애플리케이션의 요구사항에 따라 전역 상태 관리가 필요한지, 상태를 더 세밀하게 관리할 필요가 있는지를 고려해 선택하는 것이 중요합니다.

728x90