# [[React State Management]] ## ๐Ÿ“Œ Brief Summary React ์ƒํƒœ ๊ด€๋ฆฌ(State Management)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ UI ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ์–ดํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. ๊ณผ๊ฑฐ์˜ ๋‹จ์ผ ์Šคํ† ์–ด ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜, ์ตœ๊ทผ์—๋Š” ์ƒํƒœ์˜ ์„ฑ๊ฒฉ(๋กœ์ปฌ, ์ „์—ญ, ์„œ๋ฒ„ ์บ์‹œ ๋“ฑ)์— ๋”ฐ๋ผ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋„๊ตฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ํŒŒํŽธํ™”(Fragmentation) ์ ‘๊ทผ๋ฒ•์ด ํ‘œ์ค€์œผ๋กœ ์ž๋ฆฌ ์žก์•˜๋‹ค [1, 2]. ๊ฐœ๋ฐœ์ž๋Š” ์•ฑ์˜ ๊ทœ๋ชจ, ํŒ€์˜ ํฌ๊ธฐ, ์ƒํƒœ ๋ณ€๊ฒฝ์˜ ๋นˆ๋„์— ๋งž์ถฐ Context API, Zustand, Redux, TanStack Query ๋“ฑ์„ ์ „๋žต์ ์œผ๋กœ ์„ ํƒํ•˜์—ฌ ํ™•์žฅ์„ฑ์„ ๋†’์ด๊ณ  ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•ด์•ผ ํ•œ๋‹ค [1, 3]. ## ๐Ÿ“– Core ์†Œ์Šค Content * **์ƒํƒœ์˜ ๋ถ„๋ฅ˜์™€ ํŒŒํŽธํ™” (Fragmentation of State)** * ํ˜„์žฌ ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ์ƒํƒœ๋ฅผ ๋กœ์ปฌ ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ, ์ „์—ญ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ, ์„œ๋ฒ„ ์บ์‹œ ์ƒํƒœ, URL ์ƒํƒœ๋กœ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•œ๋‹ค [1]. * **๋กœ์ปฌ ์ƒํƒœ:** React ๋‚ด์žฅ ํ›…์ธ `useState`์™€ `useReducer`๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•œ ์ƒํƒœ๋ฅผ `useState`๋กœ๋งŒ ๊ด€๋ฆฌํ•˜๋ ค๋Š” ์ž˜๋ชป๋œ ํŒจํ„ด์€ ํ”ผํ•ด์•ผ ํ•œ๋‹ค [1, 4]. * **์„œ๋ฒ„ ์ƒํƒœ:** API ๊ณ„์ธต์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋Š” ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ์™€ ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅด๋ฏ€๋กœ ์บ์‹ฑ, ๋™๊ธฐํ™”, ๋กœ๋”ฉ ๋ฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค [2]. ์ด๋ฅผ ์œ„ํ•ด TanStack Query(React Query)์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—…๊ณ„ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ค‘๋ณต ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ค„์ด๊ณ  ๋ฌดํ•œ ์Šคํฌ๋กค ๋“ฑ์„ ๋‹จ์ˆœํ™”ํ•œ๋‹ค [2, 5]. RTK Query ๋˜ํ•œ ์บ์‹ฑ, ์ค‘๋ณต ์ œ๊ฑฐ, ์ž๋™ ๋ฆฌํŒจ์นญ ๋“ฑ์„ ์ œ๊ณตํ•ด ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๋ณต์žก์„ฑ์„ ํฌ๊ฒŒ ์ค„์—ฌ์ค€๋‹ค [6]. * **Context API์˜ ํ•œ๊ณ„์™€ ์ ํ•ฉ์„ฑ** * **์ ํ•ฉํ•œ ์‚ฌ๋ก€:** ์ข…์†์„ฑ ์ถ”๊ฐ€ ์—†์ด(Zero dependencies) ํ…Œ๋งˆ ๋ณ€๊ฒฝ(๋‹คํฌ/๋ผ์ดํŠธ ๋ชจ๋“œ), ๋‹ค๊ตญ์–ด ์„ค์ •, ํ”ผ์ฒ˜ ํ”Œ๋ž˜๊ทธ ๋“ฑ ๋ณ€๊ฒฝ์ด ๋“œ๋ฌผ๊ณ  ์ •์ ์ธ ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜๋‹ค [7, 8]. * **ํ•œ๊ณ„:** ํŠน์ • ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค Context๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฆฌ๋ Œ๋”๋ง๋˜๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ(Re-render storm)๋ฅผ ์œ ๋ฐœํ•œ๋‹ค [9, 10]. ๋˜ํ•œ, Redux์™€ ๋‹ฌ๋ฆฌ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ธฐ๋ก์„ ์ถ”์ ํ•˜๋Š” Time-Travel ๋””๋ฒ„๊น… ๋„๊ตฌ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค [11]. * **Zustand๋ฅผ ํ™œ์šฉํ•œ ์ตœ์ ํ™”** * **์ž‘๋™ ๋ฐฉ์‹:** Context API์˜ ๋ฆฌ๋ Œ๋”๋ง ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ๊ฒฝ๋Ÿ‰ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ์Šคํ† ์–ด๊ฐ€ React์˜ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ์™ธ๋ถ€์— ์œ„์น˜ํ•˜๋ฉฐ, '์„ ํƒ์ž(Selector pattern)'๋ฅผ ์‚ฌ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์˜์กดํ•˜๋Š” ํŠน์ • ์ƒํƒœ(Slice)๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ๋ฆฌ๋ Œ๋”๋ง์„ ํŠธ๋ฆฌ๊ฑฐํ•œ๋‹ค [2, 12, 13]. * **์žฅ๋‹จ์ :** ์„ค์ •์ด ๋‹จ์ˆœํ•˜๊ณ  ์†๋„๊ฐ€ ๋นจ๋ผ 5~15๋ช… ๊ทœ๋ชจ์˜ ํŒ€๊ณผ ์ค‘๊ฐ„ ๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋งค์šฐ ์ ํ•ฉํ•˜๋‹ค [14]. ๋‹จ, ๊ตฌ์กฐ๊ฐ€ ๋„ˆ๋ฌด ์œ ์—ฐํ•˜์—ฌ ์—„๊ฒฉํ•œ ๊ทœ์œจ์ด ์—†์„ ๊ฒฝ์šฐ ํŒ€์›๋งˆ๋‹ค ๋น„๋™๊ธฐ ํ˜ธ์ถœ์ด๋‚˜ ์ƒํƒœ ๊ด€๋ฆฌ ํŒจํ„ด์ด ์ผ๊ด€์„ฑ ์—†์ด ํŒŒํŽธํ™”๋  ์œ„ํ—˜์ด ์žˆ๋‹ค [15, 16]. * **Redux (Redux Toolkit)์™€ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜** * Redux๋Š” ๋ถˆ๋ณ€์„ฑ ์—…๋ฐ์ดํŠธ์™€ ์•ก์…˜ ๋””์ŠคํŒจ์น˜, ๋ฆฌ๋“€์„œ๋ฅผ ํ†ตํ•ด ์ผ๊ด€๋˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‚ฐ์—… ํ‘œ์ค€์ด๋‹ค [17]. * ๋ณต์žกํ•œ ํŒŒ์ƒ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ณ  500๊ฐœ ์ด์ƒ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค๋ฃจ๊ฑฐ๋‚˜, 10๋ช… ์ด์ƒ์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ˜‘์—…ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜๋‹ค [18]. ๊ฐ•๋ ฅํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ•์ œํ•˜์—ฌ ๋ฒ„๊ทธ๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜๋ฉฐ, Redux DevTools๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ์ƒํƒœ ์—๋Ÿฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ถ”์ ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋‹ค [19, 20]. * **์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ์˜ ์ƒํƒœ ์œ„์น˜ (Feature-Sliced Design)** * Feature-Sliced Design (FSD) ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ข…๋ฅ˜์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ƒํƒœ์˜ ์†Œ์œ ๊ถŒ์„ ๋ช…ํ™•ํžˆ ์ œํ•œํ•œ๋‹ค. ์—”ํ‹ฐํ‹ฐ ์ƒํƒœ๋Š” `entities` ๋ ˆ์ด์–ด์—, ํŠน์ • ์œ ์ € ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ์ƒํƒœ๋Š” `features` ๋ ˆ์ด์–ด์—, ๊ธ€๋กœ๋ฒŒ ์ธํ”„๋ผ ์ƒํƒœ๋Š” `app` ๋ ˆ์ด์–ด์— ๋‘์–ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฐ์•ผ ํ•œ๋‹ค [21, 22]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Frontend Performance Optimization]], [[Feature-Sliced Design]], [[React Hooks]], [[Clean Code Principles]] - **Projects/Contexts:** [[Redux Toolkit]], [[Zustand]], [[TanStack Query]], [[React Context API]] - **Contradictions/Notes:** ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•  ๋•Œ ๋‹จ์ˆœํžˆ ๋ฒˆ๋“ค ํฌ๊ธฐ(Context 0KB, Zustand 2.2KB, Redux 4.3KB)๋งŒ์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์€ ์ž˜๋ชป๋œ ์ ‘๊ทผ์ด๋ผ๊ณ  ์ง€์ ๋œ๋‹ค. ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ์ž‘๋”๋ผ๋„ Context API๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋””๋ฒ„๊น…๊ณผ ๋ฆฌ๋ Œ๋”๋ง ์ตœ์ ํ™”์— ๋ง‰๋Œ€ํ•œ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์ด ๋‚ญ๋น„๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํŒ€ ๊ทœ๋ชจ์™€ ๊ธฐ๋Šฅ์˜ ๋ณต์žก์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค [7, 9, 23]. --- *Last updated: 2026-04-26*