0Pricing
Frontend Academy · 강의

Redux Toolkit: createSlice와 configureStore

createSlice로 상태 조각을 정의하고 configureStore에서 결합하며, useDispatch와 useSelector를 사용해 React 컴포넌트에서 액션을 dispatch합니다.

Redux Toolkit: createSlice와 configureStore은(는) CoddyKit의 무료 Frontend Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Frontend Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Frontend Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

Redux Toolkit을 사용하는 이유

Redux Toolkit(RTK)은 Redux 로직을 작성하는 공식적이고 일관된 방식입니다. 일반 Redux의 반복적인 보일러플레이트를 없애므로 수동으로 action type 문자열을 작성하거나, 장황한 리듀서를 만들거나, 복잡한 스토어를 설정할 필요가 없습니다.

Redux Toolkit 설치

RTK와 React 바인딩을 모두 설치하십시오.

npm install @reduxjs/toolkit react-redux

createSlice — 상태 + 리듀서 + 액션

createSlice는 한 번의 호출로 상태의 한 부분과 해당 리듀서 및 액션 생성자를 만듭니다. 내부적으로는 변경 불가능한 업데이트를 위해 Immer를 사용합니다.

import { createSlice } from '@reduxjs/toolkit';

const counterSlice = createSlice({
  name: 'counter',
  initialState: { value: 0 },
  reducers: {
    increment: state => { state.value++; },     // Immer: mutate directly
    decrement: state => { state.value--; },
    reset: state => { state.value = 0; },
    incrementBy: (state, action) => { state.value += action.payload; }
  }
});

export const { increment, decrement, reset, incrementBy } = counterSlice.actions;
export default counterSlice.reducer;

configureStore — 스토어 구성

configureStore는 합리적인 기본값으로 Redux 스토어를 만듭니다. Redux DevTools가 활성화되고 thunk 미들웨어가 포함됩니다.

import { configureStore } from '@reduxjs/toolkit';
import counterReducer from './counterSlice';
import cartReducer from './cartSlice';

export const store = configureStore({
  reducer: {
    counter: counterReducer,
    cart: cartReducer,
  }
});

// TypeScript types:
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;

스토어 제공

react-redux의 <Provider store={store}>로 앱을 감싸십시오.

import { Provider } from 'react-redux';
import { store } from './store';

ReactDOM.createRoot(document.getElementById('root')!).render(
  <Provider store={store}>
    <App />
  </Provider>
);

useSelector — 상태 읽기

useSelector(selector)는 스토어에서 값을 읽습니다. 선택한 상태 부분이 변경되면 구성 요소를 다시 렌더링합니다.

import { useSelector } from 'react-redux';
import type { RootState } from './store';

function Counter() {
  const count = useSelector((state: RootState) => state.counter.value);
  return <p>Count: {count}</p>;
}

useDispatch — 액션 디스패치

useDispatch()는 스토어의 dispatch 함수를 반환합니다. 상태 변경을 일으키려면 액션 생성자와 함께 호출하십시오.

import { useDispatch } from 'react-redux';
import { increment, incrementBy } from './counterSlice';

function Controls() {
  const dispatch = useDispatch();
  return (
    <div>
      <button onClick={() => dispatch(increment())}>+1</button>
      <button onClick={() => dispatch(incrementBy(5))}>+5</button>
    </div>
  );
}

createAsyncThunk — 비동기 액션

RTK의 createAsyncThunk는 비동기 작업(API 호출)을 처리하고 대기 중·성공·실패 액션을 자동으로 디스패치합니다.

import { createAsyncThunk } from '@reduxjs/toolkit';

export const fetchUser = createAsyncThunk(
  'user/fetchById',
  async (userId: string) => {
    const res = await fetch(`/api/users/${userId}`);
    return res.json(); // becomes action.payload on fulfilled
  }
);

// In slice:
extraReducers: (builder) => {
  builder
    .addCase(fetchUser.pending, state => { state.loading = true; })
    .addCase(fetchUser.fulfilled, (state, action) => {
      state.loading = false;
      state.user = action.payload;
    });
}

RTK Query — 내장 데이터 가져오기

RTK의 일부인 RTK Query는 데이터 가져오기, 캐싱, 무효화를 자동으로 제공합니다. API 엔드포인트를 정의하면 생성된 훅을 사용할 수 있습니다.

import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';

export const api = createApi({
  baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
  endpoints: (build) => ({
    getUsers: build.query<User[], void>({ query: () => 'users' }),
  })
});

// Generated hook:
const { data, isLoading, error } = api.useGetUsersQuery();

리듀서에서 Immer 사용

RTK는 내부적으로 Immer를 사용하므로 슬라이스 리듀서에서 상태를 직접 변경할 수 있습니다. Immer는 변경을 감지하여 새로운 불변 상태 객체를 생성하므로, 불변성이 주는 안전성을 유지하면서 변경 방식의 편리함을 얻을 수 있습니다.

Redux DevTools

Redux DevTools 브라우저 확장 프로그램을 사용하면 디스패치된 모든 액션과 그 결과인 상태를 검사할 수 있으며, 시간 여행도 가능합니다. 이전 상태로 이동할 수 있어 복잡한 상태 흐름을 디버깅할 때 매우 유용합니다.

빠른 확인

Redux Toolkit의 createSlice는 무엇을 자동으로 생성합니까?

복습: Redux Toolkit

createSlice는 하나의 정의에서 리듀서와 액션을 결합합니다. Immer를 사용하면 상태를 안전하게 '변경'할 수 있습니다. configureStore는 DevTools와 thunk를 포함하여 리듀서를 구성합니다. useSelector는 상태를 읽습니다. useDispatch는 액션을 디스패치합니다. createAsyncThunk는 비동기 흐름에 사용합니다. RTK Query는 캐싱을 포함한 전체 데이터 가져오기 기능을 제공합니다.

자주 묻는 질문

“Redux Toolkit: createSlice와 configureStore” 강의는 무료인가요?

네 — “Redux Toolkit: createSlice와 configureStore” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Frontend Academy 강의 전체를 잠금 해제할 수 있습니다. Frontend Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Redux Toolkit: createSlice와 configureStore”에서 뭘 배우나요?

createSlice로 상태 조각을 정의하고 configureStore에서 결합하며, useDispatch와 useSelector를 사용해 React 컴포넌트에서 액션을 dispatch합니다. 브라우저에서 직접 실행하는 실습 코드로 Frontend Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Frontend Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Frontend Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“Redux Toolkit: createSlice와 configureStore” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Frontend Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Frontend Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Redux Toolkit: createSlice와 configureStore
  2. 가벼운 React 상태 관리를 위한 Zustand
  3. Vue를 위한 Pinia: defineStore와 storeToRefs
  4. 전역 상태와 로컬 상태를 선택하는 기준
← Frontend Academy(으)로 돌아가기