정지용
기술스택 목록
프론트엔드

Redux Toolkit

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

Redux를 더 쉽고 효율적으로 사용하기 위한 공식 도구 모음 라이브러리

Redux Toolkit은 Redux 팀이 만든 공식 라이브러리로, 기존 Redux의 복잡한 설정과 보일러플레이트 코드를 대폭 줄여줍니다. 스토어 설정, 리듀서 작성, 불변성 관리, 비동기 로직 처리 등 Redux 사용 시 반복되는 패턴을 간결한 API로 제공합니다. 현재 Redux 공식 문서에서 권장하는 표준 방식입니다.

이럴 때 사용합니다

  • React 앱에서 여러 컴포넌트가 공유하는 복잡한 전역 상태를 관리할 때
  • 기존 Redux의 보일러플레이트 코드를 줄이고 개발 생산성을 높이고 싶을 때
  • 비동기 데이터 fetching과 상태 관리를 표준화된 패턴으로 처리하고 싶을 때
  • TypeScript와 함께 사용하여 타입 안전성을 확보하고 싶을 때

핵심 개념

Slice
특정 기능 영역의 상태와 리듀서를 하나로 묶은 단위입니다. createSlice 함수로 만들며, 액션 생성자와 리듀서를 자동으로 생성해줍니다.
configureStore
Redux 스토어를 생성하는 함수로, 개발자 도구와 미들웨어를 기본으로 포함하여 별도 설정 없이 바로 사용할 수 있습니다.
createAsyncThunk
비동기 작업(API 호출 등)을 처리하는 thunk를 만드는 함수입니다. pending, fulfilled, rejected 액션을 자동으로 생성합니다.
Immer
Redux Toolkit에 내장된 라이브러리로, 리듀서 안에서 불변성을 신경 쓰지 않고 일반 객체처럼 상태를 수정할 수 있게 해줍니다.
RTK Query
서버 데이터 fetching과 캐싱을 자동화하는 선택적 기능입니다. API 엔드포인트를 정의하면 훅을 자동 생성해줍니다.

간단한 카운터 Slice 생성

createSlice로 상태와 리듀서를 정의하고, configureStore로 스토어를 만드는 가장 기본적인 패턴입니다. 액션 타입과 액션 생성자가 자동으로 만들어집니다.

TypeScript
import { configureStore, createSlice } from '@reduxjs/toolkit';

// Slice 생성 - 상태, 리듀서, 액션을 한 번에 정의
const counterSlice = createSlice({
  name: 'counter',
  initialState: { value: 0 },
  reducers: {
    increment: (state) => {
      state.value += 1; // Immer 덕분에 직접 수정 가능
    },
    decrement: (state) => {
      state.value -= 1;
    },
  },
});

// 스토어 생성
const store = configureStore({
  reducer: {
    counter: counterSlice.reducer,
  },
});

// 자동 생성된 액션 사용
store.dispatch(counterSlice.actions.increment());

처음 쓸 때 흔한 함정

  • Slice 밖에서는 상태를 직접 수정하면 안 됩니다. Immer는 리듀서 내부에서만 동작합니다.
  • createAsyncThunk의 pending/fulfilled/rejected 케이스를 extraReducers에서 처리해야 합니다.
  • RTK Query를 쓸 때 일반 상태 관리와 혼용하면 데이터 흐름이 복잡해질 수 있습니다.

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.