본문 바로가기
React

[React] Context API vs Redux – 어떤 상태 관리 방법이 더 나을까? 😳

by 다다면체 2024. 12. 31.
728x90
반응형

React 애플리케이션에서 상태 관리는 필수적인 요소입니다. 특히 규모가 커질수록 효과적인 상태 관리가 필요하죠! Context API와 Redux는 상태 관리를 위해 자주 사용되는 두 가지 방법인데요, 이번 글에서는 둘의 차이점과 사용 사례를 알아보고 어떤 상황에서 어떤 방법을 선택해야 할지 고민해보겠습니다. 🚀

반응형

1. Context API란? 🗞️

Context API는 React에서 기본적으로 제공하는 상태 관리 도구입니다. 컴포넌트 트리를 통해 데이터를 쉽게 전달할 수 있도록 도와줍니다.

장점:

  • 외부 라이브러리가 필요 없습니다.
  • 비교적 간단하고 가벼운 상태 관리가 가능합니다.

단점:

  • 상태가 복잡해질수록 관리가 어렵습니다.
  • Context가 업데이트되면 해당 Context를 구독하는 모든 컴포넌트가 리렌더링됩니다.

2. Redux란? 🔄

Redux는 JavaScript 애플리케이션의 상태를 예측 가능하게 관리하기 위한 라이브러리입니다. Flux 아키텍처를 기반으로 동작하며, 전역 상태를 중앙에서 관리할 수 있습니다.

장점:

  • 상태를 중앙에서 일관되게 관리할 수 있습니다.
  • 다양한 플러그인과 미들웨어로 확장성이 뛰어납니다.
  • 상태 변경 기록이 명확합니다 (타임 트래블 디버깅 가능!).

단점:

  • 설정과 코드 작성이 복잡할 수 있습니다.
  • 작은 애플리케이션에는 다소 과할 수 있습니다.

3. Context API와 Redux의 비교 🌟

특징Context APIRedux

설치 필요 여부 React 기본 제공 별도 설치 필요
학습 난이도 쉬움 중간~높음
상태 구조 간단한 상태에 적합 복잡한 상태에 적합
확장성 제한적 뛰어남
성능 최적화 어려울 수 있음 가능 (미들웨어 등 활용)

4. 사용 사례 비교 🔎

Context API 사용하기 🍎

Context API는 간단한 상태 관리가 필요한 경우 유용합니다. 예를 들어, 테마 변경이나 언어 설정 같은 글로벌 상태를 관리할 때 적합합니다.

예제 코드: Context API를 이용한 Todo 앱

import React, { createContext, useContext, useState } from 'react';

const TodoContext = createContext();

function TodoProvider({ children }) {
  const [todos, setTodos] = useState([]);

  const addTodo = (todo) => {
    setTodos([...todos, todo]);
  };

  return (
    <TodoContext.Provider value={{ todos, addTodo }}>
      {children}
    </TodoContext.Provider>
  );
}

function TodoList() {
  const { todos } = useContext(TodoContext);
  return (
    <ul>
      {todos.map((todo, index) => (
        <li key={index}>{todo}</li>
      ))}
    </ul>
  );
}

function AddTodo() {
  const { addTodo } = useContext(TodoContext);
  const [input, setInput] = useState('');

  const handleAdd = () => {
    addTodo(input);
    setInput('');
  };

  return (
    <div>
      <input
        type="text"
        value={input}
        onChange={(e) => setInput(e.target.value)}
      />
      <button onClick={handleAdd}>Add Todo</button>
    </div>
  );
}

function App() {
  return (
    <TodoProvider>
      <h1>Todo App with Context API</h1>
      <AddTodo />
      <TodoList />
    </TodoProvider>
  );
}

export default App;

Redux 사용하기 🌿

Redux는 애플리케이션 상태가 복잡하거나 상태를 여러 컴포넌트에서 공유해야 할 때 적합합니다.

예제 코드: Redux를 이용한 Todo 앱

import React from 'react';
import { createStore } from 'redux';
import { Provider, useSelector, useDispatch } from 'react-redux';

const initialState = {
  todos: []
};

function todoReducer(state = initialState, action) {
  switch (action.type) {
    case 'ADD_TODO':
      return {
        ...state,
        todos: [...state.todos, action.payload]
      };
    default:
      return state;
  }
}

const store = createStore(todoReducer);

function TodoList() {
  const todos = useSelector((state) => state.todos);
  return (
    <ul>
      {todos.map((todo, index) => (
        <li key={index}>{todo}</li>
      ))}
    </ul>
  );
}

function AddTodo() {
  const dispatch = useDispatch();
  const [input, setInput] = React.useState('');

  const handleAdd = () => {
    dispatch({ type: 'ADD_TODO', payload: input });
    setInput('');
  };

  return (
    <div>
      <input
        type="text"
        value={input}
        onChange={(e) => setInput(e.target.value)}
      />
      <button onClick={handleAdd}>Add Todo</button>
    </div>
  );
}

function App() {
  return (
    <Provider store={store}>
      <h1>Todo App with Redux</h1>
      <AddTodo />
      <TodoList />
    </Provider>
  );
}

export default App;

5. 어떤 방법을 선택해야 할까? 🎯

  • Context API: 애플리케이션이 비교적 작고 상태가 단순하다면 Context API가 더 간단하고 직관적입니다.
  • Redux: 상태가 복잡하거나 확장 가능성이 중요한 경우 Redux가 더 나은 선택입니다.

6. 마무리 🎉

Context API와 Redux는 각각의 강점과 약점이 있는 도구입니다. 프로젝트의 크기와 요구사항에 따라 적합한 상태 관리 방법을 선택하세요! 😎

React 애플리케이션에서 상태 관리는 지속적으로 고민해야 하는 부분입니다. 여러분의 프로젝트에 적합한 도구를 선택하고, 효율적인 상태 관리로 더욱 멋진 애플리케이션을 만들어보세요! 🚀

728x90
반응형