useReducer 또는 Redux Reducer? 어떤 것이 필요한지 판단하는 방법

발행: (2026년 2월 18일 오후 06:10 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

useReducer 또는 Redux Reducer? 어떤 것이 필요한지 판단하는 방법

🎯 핵심 아이디어: 리듀서란?

useReducer와 Redux 리듀서는 동일한 개념을 기반으로 합니다: 리듀서는 단순히 다음과 같은 함수입니다:

  • 현재 상태와 액션을 받는다
  • 다음 상태를 반환한다

순수 JavaScript에서는 다음과 같이 보입니다:

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      return state;
  }
}

부수 효과가 없습니다. 변이가 없습니다. 순수 함수일 뿐입니다.

🪝 React에서 useReducer

useReducer는 단일 컴포넌트(또는 props나 context를 통해 작은 그룹의 컴포넌트)에서 상태를 관리하기 위한 React 훅입니다.

예시

import React, { useReducer } from 'react';

function Counter() {
  const initialState = { count: 0 };

  function reducer(state, action) {
    switch (action.type) {
      case 'increment':
        return { count: state.count + 1 };
      case 'decrement':
        return { count: state.count - 1 };
      default:
        return state;
    }
  }

  const [state, dispatch] = useReducer(reducer, initialState);
  return (
    <>
      
Count: {state.count}

       dispatch({ type: 'increment' })}>+
       dispatch({ type: 'decrement' })}>-
    
  );
}

useReducer에 대한 주요 포인트

  • 상태는 컴포넌트에 로컬합니다(컨텍스트를 통해 수동으로 공유하지 않는 한).
  • 미들웨어, 개발자 도구, 전역 스토어가 없습니다.
  • 복잡한 로컬 상태 업데이트에 적합합니다.

🏪 Redux 리듀서

Redux에서 리듀서는 동일한 방식으로 동작하지만, 로컬 상태 대신 전역 스토어를 업데이트하여 앱 어디서든 접근할 수 있습니다.

리듀서 정의

// reducer.js
function counterReducer(state = { count: 0 }, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      return state;
  }
}
export default counterReducer;

스토어 생성

// store.js
import { createStore } from 'redux';
import counterReducer from './reducer';

const store = createStore(counterReducer);

컴포넌트 사용

// Component.jsx
import { useSelector, useDispatch } from 'react-redux';

function Counter() {
  const count = useSelector(state => state.count);
  const dispatch = useDispatch();

  return (
    <>
      
Count: {count}

       dispatch({ type: 'increment' })}>+
       dispatch({ type: 'decrement' })}>-
    
  );
}

Redux 리듀서에 대한 주요 포인트

  • 상태는 전역적이다
  • 강력한 미들웨어 지원 (예: Redux Thunk, Redux Saga)
  • 디버깅을 위한 개발자 도구와 통합
  • 보통 대규모 복잡한 앱에서 사용된다

🔍 그들이 동일한 점

usereducer and reducer similarities

두 경우 모두 함수형 프로그래밍의 동일한 리듀서 개념을 기반으로 합니다.

🔀 그들은 어떻게 다른가

usereducer와 reducer 차이점

💡 어느 것을 사용해야 할까요?

useReducer를 사용해야 할 때

  • 상태가 복잡하지만, 하나의 컴포넌트 또는 작은 서브트리와만 관련될 때.
  • 전역 상태 공유가 필요하지 않을 때.
  • 작은 경우에 Redux를 도입하는 것을 피하고 싶을 때.

Redux 리듀서를 사용해야 할 때

  • 전역 상태 관리가 필요할 때.
  • 고급 디버깅, 타임‑트래블, 그리고 미들웨어가 필요할 때.
  • 앱이 충분히 커서 추가 설정을 정당화할 수 있을 때.

🏁 최종 요약

useReducer와 Redux 리듀서는 자전거와 버스와 같다 — 둘 다 상태 A에서 상태 B로 이동하게 해 주지만, 하나는 짧고 개인적인 여행(로컬 컴포넌트 상태)을 위한 것이고, 다른 하나는 전체 도시를 운반하는(전역 앱 상태) 용도다. 이들은 같은 함수형 프로그래밍 DNA를 공유하지만, 서로 다른 생태계에 존재한다.

0 조회
Back to Blog

관련 글

더 보기 »

Inertia.js가 조용히 앱을 깨뜨립니다

TL;DR 프로덕션 Laravel 12 + React 19 + Inertia v2 앱에서 몇 주 동안 작업하면서, 진단 비용이 많이 드는 실패 모드에 반복적으로 부딪혔습니다: overlapping visit can...