๐Ÿง  39. React Native ์ƒํƒœ๊ด€๋ฆฌ ์™„์ „ ์ •๋ฆฌ โ€” Context vs Zustand vs Redux ๋น„๊ต์™€ ์„ ํƒ ๊ธฐ์ค€

JM_Devยท2025๋…„ 5์›” 16์ผ
0
post-thumbnail

React Native ์•ฑ์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด
ํ™”๋ฉด ์ „ํ™˜์ด ๋งŽ๊ณ , ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์ƒํƒœ ๊ณต์œ ๋„ ์žฆ๊ณ , ๋น„๋™๊ธฐ ํ†ต์‹ ๋„ ํ”ํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿด์ˆ˜๋ก ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ์ฝ”๋“œ์˜ ๋ผˆ๋Œ€์ฒ˜๋Ÿผ ์ค‘์š”ํ•ด์ง„๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋ชจ๋ฐ”์ผ ์•ฑ์—์„œ ์‹ค์ œ๋กœ ์ž์ฃผ ์“ฐ์ด๋Š”
Context, Zustand, Redux Toolkit์„ ๋น„๊ตํ•˜๊ณ ,
๊ฐ ๋ฐฉ์‹์˜ ํŠน์ง•, ์žฅ๋‹จ์ , ์‹ค์ „ ์‚ฌ์šฉ ์˜ˆ์ œ๋ฅผ ์ •๋ฆฌํ•ด๋ดค๋‹ค.


โœ… 1. Context API

React ๊ธฐ๋ณธ ์ œ๊ณต, ๊ฐ€๋ณ๊ณ  ๊ฐ„๋‹จํ•œ ์ „์—ญ ์ƒํƒœ ๊ณต์œ  ๋ฐฉ์‹

const ThemeContext = createContext();

export function ThemeProvider({ children }) {
  const [isDark, setIsDark] = useState(false);

  return (
    <ThemeContext.Provider value={{ isDark, setIsDark }}>
      {children}
    </ThemeContext.Provider>
  );
}

export function useTheme() {
  return useContext(ThemeContext);
}

โœ… ๊ฐ„๋‹จํ•œ ํ† ๊ธ€, ๋‹คํฌ๋ชจ๋“œ, ์‚ฌ์šฉ์ž ์ •๋ณด ๋“ฑ์— ์ ํ•ฉ
โŒ ๊นŠ์€ ํŠธ๋ฆฌ์—์„œ ์„ฑ๋Šฅ ์ด์Šˆ ๊ฐ€๋Šฅ
โŒ ์ƒํƒœ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ตฌ์กฐ ๋ณต์žก


โœ… 2. Zustand (๐Ÿป)

๊ฐ„๊ฒฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (์›น์—์„œ๋„ ์ธ๊ธฐ)

npm install zustand
import { create } from 'zustand';

export const useUserStore = create((set) => ({
  user: null,
  setUser: (user) => set({ user }),
}));
  • ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ์—์„œ๋“  useUserStore()๋กœ ์ƒํƒœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • subscribe, persist(๋กœ์ปฌ ์ €์žฅ), middleware ๋“ฑ๋„ ์‰ฝ๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅ
  • ํ›… ๊ธฐ๋ฐ˜์ด๋ผ React์— ์•„์ฃผ ์ž˜ ๋…น์•„๋“ฆ

โœ… ์ƒํƒœ ๋ถ„๋ฆฌ, ๊ตฌ์กฐํ™” ์‰ฌ์›€
โœ… persist๋กœ ๋กœ์ปฌ ์ €์žฅ ๊ฐ€๋Šฅ (ํ† ํฐ, ํ…Œ๋งˆ ๋“ฑ์— ์œ ์šฉ)
โŒ ์•„์ง ๊ณต์‹ devtools๋Š” ์•ฝํ•จ


โœ… 3. Redux Toolkit

์ƒํƒœ๊ด€๋ฆฌ์˜ ์ •์„, ๋Œ€๊ทœ๋ชจ ์•ฑ์ด๋‚˜ ๋ณต์žกํ•œ ์ƒํƒœ ์ฒ˜๋ฆฌ์— ์ ํ•ฉ

npm install @reduxjs/toolkit react-redux
  • ์ค‘์•™ ์ง‘์ค‘ํ˜• ์Šคํ† ์–ด
  • ์•ก์…˜ โ†’ ๋ฆฌ๋“€์„œ โ†’ ๋””์ŠคํŒจ์น˜ โ†’ ๊ตฌ๋… ๊ตฌ์กฐ
  • ๋ณต์žกํ•˜์ง€๋งŒ ๊ตฌ์กฐ ๋ช…ํ™•ํ•˜๊ณ  ํƒ€์ž… ์•ˆ์ •์„ฑ ๋†’์Œ

โœ… ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
โœ… ์„œ๋ฒ„ ์ƒํƒœ์™€์˜ ํ†ตํ•ฉ (RTK Query)
โŒ ์„ค์ • ๋ณต์žก, ์ฝ”๋“œ ๋งŽ์Œ


๐Ÿ“Š ์„ธ ๊ฐ€์ง€ ๋น„๊ต

ํ•ญ๋ชฉContextZustandRedux Toolkit
๋‚œ์ด๋„์‰ฌ์›€์ค‘๊ฐ„๋†’์Œ
์‚ฌ์šฉ ๊ทœ๋ชจ์†Œ๊ทœ๋ชจ์ค‘~๋Œ€๊ทœ๋ชจ๋Œ€๊ทœ๋ชจ
์ƒํƒœ ๊ตฌ์กฐํ™”์ œํ•œ์ ๋งค์šฐ ์œ ์—ฐ๊ฐ•๋ ฅํ•จ
์„ฑ๋Šฅ ์ตœ์ ํ™”์ˆ˜๋™ ํ•„์š”์ž๋™ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ๊ณ ์„ฑ๋Šฅ (with slice)
๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์ง์ ‘ ๊ตฌํ˜„์ž์œ ๋กญ๊ฒŒThunk, RTK Query
๋กœ์ปฌ์ €์žฅ ์—ฐ๋™์ˆ˜๋™persist๋กœ ์‰ฌ์›€์ˆ˜๋™ or middleware

๐Ÿง  ์–ด๋–ค ์ƒํ™ฉ์— ์–ด๋–ค ๊ฑธ ์„ ํƒํ• ๊นŒ?

์ƒํ™ฉ์ถ”์ฒœ ๋„๊ตฌ
๋‹คํฌ๋ชจ๋“œ, ์–ธ์–ด ์ „์—ญ ์„ค์ •Context
๋กœ๊ทธ์ธ ์ƒํƒœ, ํ† ํฐ ์ €์žฅZustand (persist)
API ์ƒํƒœ ์บ์‹ฑ, ๋ทฐ ๊ฐ„ ๊ณต์œ Zustand or Redux
๋Œ€๊ทœ๋ชจ ํ˜‘์—…, ๋ณต์žกํ•œ ๋กœ์งRedux Toolkit

๐Ÿ“ ๋‚ด๊ฐ€ ๋А๋‚€ ์ 

์ฒ˜์Œ์—๋Š” Context๋งŒ์œผ๋กœ ๋‹ค ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ,
๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ์“ฐ๋‹ค ๋ณด๋‹ˆ
๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง, ํŠธ๋ฆฌ ๊นŠ์ด, prop drilling ํšŒํ”ผ ๋“ฑ์œผ๋กœ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์กŒ๋‹ค.

์ง€๊ธˆ์€ ๋Œ€๋ถ€๋ถ„ Zustand๋กœ ์ƒํƒœ๋ฅผ ๋‚˜๋ˆ„๊ณ ,
API ์บ์‹ฑ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ React Query,
์ง„์งœ ๋ณต์žกํ•œ ์•ฑ์€ Redux๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์“ฐ๊ณ  ์žˆ๋‹ค.


๐Ÿง  โ€œ์•ฑ์˜ ๋ณต์žก๋„๊ฐ€ ์˜ฌ๋ผ๊ฐˆ์ˆ˜๋ก ์ƒํƒœ๊ด€๋ฆฌ๋Š” ๊ตฌ์กฐ ์„ค๊ณ„๊ฐ€ ๋œ๋‹ค.โ€


profile
๊ฐœ๋ฐœ์ž๋กœ ์ทจ์—…์„ ์ค€๋น„ ์ค‘ ์ด๋ฉฐ, ์—ด์‹ฌํžˆ ๊ณต๋ถ€ ์ค‘ ์ž…๋‹ˆ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€