본문 바로가기
Front end/React

[React] 상태 관리 라이브러리

by 더 이프 2024. 5. 2.
728x90

목차

    상태 관리 라이브러리: Redux와 Context API 비교 🔄🔍

    안녕하세요, 현대 웹 애플리케이션 개발에서 중요한 요소 중 하나인 상태 관리에 대해 알아보는 시간을 가지겠습니다. React 생태계에서는 다양한 상태 관리 방법이 있지만, 가장 널리 사용되는 두 가지 방법은 Redux와 Context API입니다. 이 블로그 포스트에서는 Redux와 Context API의 특징과 장단점을 비교해보고, 각각 어떤 상황에서 사용하는 것이 적합한지 알아보겠습니다.


    Redux란?

    Redux는 JavaScript 애플리케이션을 위한 예측 가능한 상태 컨테이너입니다. 모든 상태 변경은 중앙 집중식 스토어(store)를 통해 관리되며, 액션(action)과 리듀서(reducer)를 사용하여 상태를 업데이트합니다. Redux는 크게 세 가지 원칙에 따라 설계되었습니다:

    1. 단일 원본 (Single source of truth): 애플리케이션의 모든 상태는 하나의 스토어 안에 저장됩니다.
    2. 상태는 읽기 전용 (State is read-only): 상태를 변경하기 위해서는 액션을 발생시켜야 합니다.
    3. 변화는 순수 함수로 작성 (Changes are made with pure functions): 액션에 의해 상태를 변화시키는 로직은 순수 함수인 리듀서로 작성됩니다.

     

    Context API란?

    Context API는 React 16.3에서 도입된 내장 API로, 컴포넌트 트리 전체에 걸쳐 데이터를 전역적으로 공유할 수 있는 방법을 제공합니다. Props 드릴링이 필요 없이 컴포넌트에 직접 데이터를 제공할 수 있어, 중간 단계의 컴포넌트에서 불필요한 props를 전달할 필요가 없습니다.

    import React, { createContext, useContext } from 'react';
    
    const ThemeContext = createContext('light');
    
    function App() {
      return (
        <ThemeContext.Provider value="dark">
          <Toolbar />
        </ThemeContext.Provider>
      );
    }
    
    function Toolbar() {
      const theme = useContext(ThemeContext);
      return <div className={theme}>...</div>;
    }

     

    Redux vs. Context API: 사용 시나리오와 선택 기준

    Redux의 장점:

    • 대규모 애플리케이션: 복잡한 상태 로직과 다수의 상태가 서로 연결되어 있을 때 Redux를 사용하면 상태 관리가 수월합니다.
    • 개발 도구와 미들웨어: Redux 개발자 도구는 시간 여행 디버깅과 상태 변경 모니터링을 용이하게 합니다.
    • 커뮤니티와 생태계: 수많은 라이브러리와 자료가 지원되어 문제 해결이 용이합니다.

    Context API의 장점:

    • 간단한 애플리케이션: 상태 로직이 비교적 간단하거나 중간 규모의 애플리케이션에 적합합니다.
    • 추가 라이브러리 불필요: 별도의 상태 관리 라이브러리 없이 React만으로 상태 관리가 가능합니다.
    • 성능 최적화: 필요한 컴포넌트에만 상태를 전달할 수 있어 성능 최적화에 유리합니다.

     

    마무리하며...

    상태 관리는 애플리케이션의 복잡성과 개발자의 선호에 따라 다른 접근 방식이 필요할 수 있습니다. Redux와 Context API는 각각의 장단점이 있으며, 애플리케이션의 요구사항에 맞게 적절히 선택하는 것이 중요합니다.


    Reference:

     

    Redux - A JS library for predictable and maintainable global state management | Redux

    A JS library for predictable and maintainable global state management

    redux.js.org

     

    Context – React

    A JavaScript library for building user interfaces

    legacy.reactjs.org