็„ก์ œ

Redux Toolkit (๋ฆฌ๋•์Šค ํˆดํ‚ท) ๋ณธ๋ฌธ

<React>

Redux Toolkit (๋ฆฌ๋•์Šค ํˆดํ‚ท)

yo-u-loo 2026. 7. 16. 17:50

 

๐ŸŸก Redux Toolkit (RTK)

Redux๋ฅผ ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  Redux ๊ณต์‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.

 

โ—ผ๏ธ ํ•„์š” ์ด์œ 

๊ธฐ์กด Redux๋Š” ์ƒํƒœ ํ•˜๋‚˜๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Store ์„ค์ •, Action ์ƒ์„ฑ, Reducer ์ž‘์„ฑ ๋“ฑ์„ ๊ฐ๊ฐ ์ž‘์„ฑํ•ด์•ผํ•ด ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ๊ณ  ์„ค์ •์ด ๋ณต์žกํ–ˆ๋‹ค.

Redux Toolkit์€ ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ๋” ์ ์€ ์ฝ”๋“œ๋กœ Redux๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

 

โ—ผ๏ธ ์ฃผ์š” ํŠน์ง•

  • ๋ฐ˜๋ณต ์ฝ”๋“œ(Boilerplate) ๊ฐ์†Œ
    • Action, Reducer, Store ์„ค์ • ๋“ฑ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Store ์„ค์ • ๊ฐ„์†Œํ™”
    • configureStore()๋ฅผ ํ†ตํ•ด Store๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Action๊ณผ Reducer ์ž๋™ ์ƒ์„ฑ
    • createSlice() ํ•˜๋‚˜๋กœ State, Action, Reducer๋ฅผ ํ•จ๊ป˜ ์ƒ์„ฑํ•œ๋‹ค.
  • Redux DevTools ๊ธฐ๋ณธ ์ง€์›
    • ๋ณ„๋„์˜ ์„ค์ • ์—†์ด DevTools๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Redux Thunk ๊ธฐ๋ณธ ํฌํ•จ
    • ๋น„๋™๊ธฐ ๋กœ์ง์„ ์ถ”๊ฐ€ ์„ค์ • ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Immer ์ง€์›
    • State๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•ด๋„ ๋ถˆ๋ณ€์„ฑ์ด ์œ ์ง€๋œ๋‹ค.

 

โ—ผ๏ธ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ”น configureStore()

Redux Store๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ Slice๋ฅผ ํ•˜๋‚˜์˜ Store๋กœ ํ•ฉ์ณ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

import { configureStore } from "@reduxjs/toolkit";

const store = configureStore({
  reducer: {
    counter: counterReducer,
    user: userReducer,
  },
});
  • ํ•˜๋‚˜์˜ Store์— ์—ฌ๋Ÿฌ Slice๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

 

๐Ÿ”น createSlice()

Redux Toolkit์—์„œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ API์ด๋‹ค.

ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์—์„œ ๋‹ค์Œ ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ƒ์„ฑํ•œ๋‹ค.

  • State
  • Reducer
  • Action
import { createSlice } from "@reduxjs/toolkit";

const counterSlice = createSlice({
  name: "counter",
  initialState: {
    value: 0,
  },
  reducers: {
    up(state) {
      state.value++;
    },
    down(state) {
      state.value--;
    },
  },
});
  • ์ƒ์„ฑ๋œ Slice์—์„œ๋Š” Action๊ณผ Reducer๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
export const { up, down } = counterSlice.actions;
export default counterSlice.reducer;

 

โ—ผ๏ธ Store์™€ Slice์˜ ๊ด€๊ณ„

Redux Toolkit์—์„œ๋Š” Store ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ Slice๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

Store
 โ”œโ”€ counterSlice
 โ”œโ”€ userSlice
 โ”œโ”€ productSlice
 โ””โ”€ cartSlice
  • ๊ฐ Slice๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์ด๋‚˜ ์ƒํƒœ๋ฅผ ๋‹ด๋‹นํ•˜๋ฉฐ, configureStore()๊ฐ€ ์ด๋ฅผ ํ•˜๋‚˜์˜ Store๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

 

โ—ผ๏ธ Immer ์ง€์›

Redux์—์„œ๋Š” ๊ธฐ์กด State๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.

Redux Toolkit์€ ๋‚ด๋ถ€์ ์œผ๋กœ Immer๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•ด๋„ ์ƒˆ๋กœ์šด State๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ƒ์„ฑํ•œ๋‹ค.

return {
  ...state,
  value: state.value + 1,
};
  • ๊ธฐ์กด Redux

 

state.value++;
  • Redux Toolkit
    • ์‹ค์ œ๋กœ๋Š” Immer๊ฐ€ ์ƒˆ๋กœ์šด State๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ๋ฏ€๋กœ Redux์˜ ๋ถˆ๋ณ€์„ฑ ๊ทœ์น™์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.

 

โ—ผ๏ธ React์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” API

Redux Toolkit์€ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , react-redux๋Š” React์™€ Redux๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.

API ์—ญํ• 
Provider Store๋ฅผ React์— ์—ฐ๊ฒฐ
useSelector() Store์˜ State ์กฐํšŒ
useDispatch() Action์„ dispatch

 

โ—ผ๏ธ Redux์™€ Redux Toolkit ์ฐจ์ด

Redux Redux Toolkit
์„ค์ •์ด ๋ณต์žกํ•จ ์„ค์ •์ด ๊ฐ„๋‹จํ•จ
๋ฐ˜๋ณต ์ฝ”๋“œ๊ฐ€ ๋งŽ์Œ ๋ฐ˜๋ณต ์ฝ”๋“œ๊ฐ€ ์ ์Œ
Action์„ ์ง์ ‘ ์ž‘์„ฑ Action ์ž๋™ ์ƒ์„ฑ
Reducer๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌ createSlice๋กœ ํ•œ ๋ฒˆ์— ๊ด€๋ฆฌ
Store ์„ค์ •์ด ๋ณต์žก configureStore๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ์„ฑ
๋ถˆ๋ณ€์„ฑ์„ ์ง์ ‘ ๊ด€๋ฆฌ Immer๋กœ ์ž๋™ ๊ด€๋ฆฌ

 

 

๐Ÿ“ POINT ๐Ÿ“

โœ”๏ธ Redux Toolkit์€ Store ์ƒ์„ฑ, Reducer ์ž‘์„ฑ, Action ์ƒ์„ฑ ๋“ฑ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Redux ๊ณต์‹ ๊ถŒ์žฅ ๋ฐฉ์‹์ด๋‹ค. โœ”๏ธ

โœ”๏ธ ๋Œ€ํ‘œ์ ์ธ API๋Š” configureStore() ์™€ createSlice() ์ด๋‹ค.โœ”๏ธ

 


 

๐Ÿ”— Redux Toolkit ์„ค์น˜ ๐Ÿ”—

1๏ธโƒฃ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๋ฉด์„œ Redux Toolkit ๊ฐ™์ด ์„ค์น˜

npx create-react-app my-app --template redux

 

2๏ธโƒฃ React ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“  ํ›„ Redux Toolkit๊ณผ React-Redux ๊ฐ™์ด ์„ค์น˜

npm install @reduxjs/toolkit react-redux

 

3๏ธโƒฃ Redux์™€ React-Redux ์„ค์น˜ ํ›„ Toolkit ๋งŒ ์ถ”๊ฐ€

npm install @reduxjs/toolkit

 

๐ŸŒŸ ํŒ: React ๋ฒ„์ „์ด ๋‚ฎ์•„์„œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜

Redux Toolkit ์„ค์น˜ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋จผ์ € package.json์„ ํ™•์ธํ•  ๊ฒƒ.

"react": "^18.1.x",
"react-dom": "^18.1.x"
  • ์‹ค๋ฌด์—์„œ ์˜ค๋ž˜๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ ์ง€๋ณด์ˆ˜ํ•  ๋•Œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋กœ  React์™€ react-dom ๋ฒ„์ „์ด ๋„ˆ๋ฌด ๋‚ฎ์œผ๋ฉด ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋กœ ์„ค์น˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ React ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ํ•ด๊ฒฐ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. (ํ•ญ๋ชฉ์˜ ๋ฒ„์ „์ด 18.1.x ์ด์ƒ์ด์–ด์•ผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.)

 

โ— Redux Toolkit์„ ์„ค์น˜ํ•˜๋ฉด redux๋Š” ๋”ฐ๋กœ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. โ—

  • Redux Toolkit (@reduxjs/toolkit): Redux ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋กœ์ง(์•ก์…˜, ๋ฆฌ๋“€์„œ, ์Šคํ† ์–ด ์„ค์ •)์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋„๊ตฌ๋“ค์˜ ๋ชจ์Œ์ด๋‹ค. Redux ์ฝ”์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ redux ํŒจํ‚ค์ง€๋ฅผ ๋”ฐ๋กœ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • React-Redux (react-redux): React ์ปดํฌ๋„ŒํŠธ์™€ Redux ์Šคํ† ์–ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. Redux ์Šคํ† ์–ด์˜ ์ƒํƒœ๋ฅผ React ์ปดํฌ๋„ŒํŠธ์— ์ฃผ์ž…ํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ์—์„œ ์•ก์…˜์„ ๋””์ŠคํŒจ์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” Provider, useSelector, useDispatch ๊ฐ™์€ ํ›…๋“ค์„ ์ œ๊ณตํ•œ๋‹ค. Redux Toolkit๊ณผ๋Š” ๋ณ„๊ฐœ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

 


 

๐Ÿ”— ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ๐Ÿ”—

https://velog.io/@sweet_pumpkin/%EB%AC%B4%EC%9E%91%EC%A0%95%EB%94%B0%EB%9D%BC%ED%95%98%EA%B8%B0-%EC%B5%9C%EA%B3%A0-%EB%A6%AC%EB%8D%95%EC%8A%A4%EC%95%BC-%EA%B3%A0%EB%A7%99%EB%8B%A4-Redux-Redux-Toolkit-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

 

์ตœ๊ณ  ๋ฆฌ๋•์Šค์•ผ ๊ณ ๋ง™๋‹ค! Redux & Redux Toolkit ์•Œ์•„๋ณด๊ธฐ

๋ฆฌ๋•์Šค๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋กœ, ํ˜„์žฌ๊นŒ์ง€ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๊ณ  ์žˆ๋‹ค. ์ƒํƒœ ๊ด€๋ฆฌ๋ž€ UI์™€ UX์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜, ์„œ๋ฒ„์™€ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.๊ฐ„๋‹จํ•œ ํ”„๋กœ์ 

velog.io

 

'<React>' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

reducer / Redux / Redux Toolkit  (0) 2026.07.20
reducer์™€ reducers  (0) 2026.07.20
Redux (๋ฆฌ๋•์Šค)  (0) 2026.07.16
useReducer (์œ ์ฆˆ๋ฆฌ๋“€์„œ)  (0) 2026.07.15
Context API (์ฝ˜ํ…์ŠคํŠธ ์—์ดํ”ผ์•„์ด)  (0) 2026.07.15