# [[State Management Libraries]] ## ๐Ÿ“Œ Brief Summary ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ๋กœ์ปฌ UI, ๊ธฐ๋Šฅ(Feature), ์—”ํ‹ฐํ‹ฐ ์ƒํƒœ ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋‹ค [1, 2]. ๊ณผ๊ฑฐ์˜ ๋‹จ์ผ Redux ์Šคํ† ์–ด ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜, ํ˜„์žฌ๋Š” ๋ชฉ์ ๊ณผ ๋ฐ์ดํ„ฐ ์œ ํ˜•์— ๋”ฐ๋ผ Zustand, Jotai, TanStack Query์™€ ๊ฐ™์ด ํŠนํ™”๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ํŒŒํŽธํ™”๋œ ์ ‘๊ทผ๋ฒ•์ด ํ‘œ์ค€์œผ๋กœ ์ž๋ฆฌ ์žก๊ณ  ์žˆ๋‹ค [2-4]. ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํŒ€์˜ ํฌ๊ธฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณต์žก๋„, ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ช…ํ™•ํ•œ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ๊ฐ€์ง„๋‹ค [5, 6]. ## ๐Ÿ“– Core Content * **Context API (๋‚ด์žฅ ์ƒํƒœ ๊ณต์œ )** * React์˜ ๋‚ด์žฅ ์†”๋ฃจ์…˜์œผ๋กœ ์ข…์†์„ฑ์ด ์—†๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋ฉฐ, 'Prop Drilling' ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋˜์—ˆ๋‹ค [7, 8]. * ์ฃผ๋กœ ํ…Œ๋งˆ(๋ผ์ดํŠธ/๋‹คํฌ ๋ชจ๋“œ), ๋กœ์ผ€์ผ, ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ ๋“ฑ ์—…๋ฐ์ดํŠธ ๋นˆ๋„๊ฐ€ ๋‚ฎ๊ณ  ์ •์ ์ธ ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜๋‹ค [9, 10]. * '๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์‹œ์Šคํ…œ'์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜์—ฌ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜๋ฏ€๋กœ, ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ์ƒํƒœ ๊ด€๋ฆฌ์—๋Š” ๋ถ€์ ํ•ฉํ•˜๋‹ค [3, 7, 11]. * **Zustand (๊ฒฝ๋Ÿ‰ ์Šคํ† ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)** * Redux์˜ ์žฅ์ ์„ ๊ฐ€์ ธ์˜ค๋ฉด์„œ๋„ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์ค„์ธ ๊ฒฝ๋Ÿ‰ํ™”๋œ ์Šคํ† ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค [12, 13]. * ์Šคํ† ์–ด๊ฐ€ React ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ์™ธ๋ถ€์— ๋…๋ฆฝ๋œ ๋ชจ๋“ˆ๋กœ ์กด์žฌํ•˜๋ฉฐ, '์„ ํƒ์ž(Selector) ํŒจํ„ด'์„ ์‚ฌ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ด€์‹ฌ ์žˆ๋Š” ํŠน์ • ์ƒํƒœ ์กฐ๊ฐ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ๋ฆฌ๋ Œ๋”๋ง๋˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค [3, 14, 15]. * ์ปดํฌ๋„ŒํŠธ 50~500๊ฐœ, ๊ฐœ๋ฐœ์ž 5~15๋ช… ๊ทœ๋ชจ์˜ ์ค‘๊ฐ„ ํฌ๊ธฐ ํ”„๋กœ์ ํŠธ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋„๊ตฌ๋กœ ํ‰๊ฐ€๋ฐ›๋Š”๋‹ค [16]. * **Redux (์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์ƒํƒœ ์ปจํ…Œ์ด๋„ˆ)** * ๋ถˆ๋ณ€์„ฑ ์—…๋ฐ์ดํŠธ, ์•ก์…˜ ๋””์ŠคํŒจ์น˜, ๋ฆฌ๋“€์„œ๋ฅผ ๊ฐ–์ถ˜ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ์ปจํ…Œ์ด๋„ˆ๋กœ, 500๊ฐœ ์ด์ƒ์˜ ์ปดํฌ๋„ŒํŠธ๋‚˜ 10๋ช… ์ด์ƒ์˜ ํŒ€์ด ์ž‘์—…ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์ˆ˜์ ์ด๋‹ค [17, 18]. * ๊ณผ๊ฑฐ์—๋Š” ๋ง‰๋Œ€ํ•œ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๊ฐ€ ๋‹จ์ ์ด์—ˆ์œผ๋‚˜, RTK Query๋ฅผ ํ†ตํ•œ ๊ฐ•๋ ฅํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋„์ž…๊ณผ ํ•จ๊ป˜ ์ผ๊ด€๋œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ๊ฐ•์ œํ•จ์œผ๋กœ์จ ํŒ€ ๋‚ด ํ˜ผ๋ž€์„ ๋ฐฉ์ง€ํ•œ๋‹ค [19, 20]. * ์ƒํƒœ ์ด๋ ฅ์„ ์ถ”์ ํ•˜๊ณ  ์žฌ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„ ์—ฌํ–‰ ๋””๋ฒ„๊น…(Time-travel debugging)์„ ์ง€์›ํ•˜๋Š” ๋“ฑ DevTools ์ƒํƒœ๊ณ„๊ฐ€ ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๋‹ค [19, 21]. * **์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ (TanStack Query)** * ์ตœ์‹  ์ƒํƒœ ๊ด€๋ฆฌ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ์™€ API์—์„œ ๊ฐ€์ ธ์˜ค๋Š” '์„œ๋ฒ„ ์ƒํƒœ'๋ฅผ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•œ๋‹ค [3]. * TanStack Query(React Query)๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ์˜ ์บ์‹ฑ, ๋™๊ธฐํ™”, ๋ฌดํ•œ ์Šคํฌ๋กค, ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ(Optimistic updates) ๋ฐ ๋กœ๋”ฉ/์—๋Ÿฌ ์‚ฌ์ดํด ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜์—ฌ ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค [3, 4, 22]. ## โš–๏ธ Trade-offs & Caveats * **Context API์˜ ํ•œ๊ณ„์™€ ๋ฆฌ๋ Œ๋”๋ง ํญํ’ (Re-render Storm)** * ์ดˆ๊ธฐ ์„ค์ •์ด ์‰ฝ๊ณ  ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ 0KB๋ผ๋Š” ์ด์ ์ด ์žˆ์œผ๋‚˜, ์ƒํƒœ ๊ฐ์ฒด ๋‚ด์˜ ๋‹จ์ผ ์†์„ฑ๋งŒ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์ด๋ฅผ ๊ตฌ๋…ํ•˜๋Š” **๋ชจ๋“ ** ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฆฌ๋ Œ๋”๋ง๋˜๋Š” ์น˜๋ช…์ ์ธ ๋ถ€์ž‘์šฉ์ด ์žˆ๋‹ค [7, 11, 23]. ์ด๋กœ ์ธํ•ด ์‹ค์ œ ์ƒ์šฉ ๋Œ€์‹œ๋ณด๋“œ ํ™˜๊ฒฝ์—์„œ ์‹ฌ๊ฐํ•œ ํ™”๋ฉด ๋ฉˆ์ถค ํ˜„์ƒ ๋“ฑ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค [7]. ๋˜ํ•œ ์‹œ๊ฐ„ ์—ฌํ–‰ ๋””๋ฒ„๊น… ๋„๊ตฌ๊ฐ€ ์—†๊ณ  ๋น„๋™๊ธฐ ์ž‘์—… ์‹œ ํด๋กœ์ €(Closure)๊ฐ€ ์˜ค๋ž˜๋œ ์ƒํƒœ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [21, 24]. * **Zustand์˜ ์œ ์—ฐ์„ฑ์ด ์ดˆ๋ž˜ํ•˜๋Š” ํŒŒํŽธํ™”** * ์‚ฌ์šฉ์ด ๋งค์šฐ ์ž์œ ๋กญ๊ณ  ๊ฐ€๋ณ์ง€๋งŒ, Redux์ฒ˜๋Ÿผ ์—„๊ฒฉํ•˜๊ฒŒ ๊ฐ•์ œํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด ํŒจํ„ด์ด๋‚˜ ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™์ด ์—†๋‹ค [25, 26]. ํŒ€ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋‚˜ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹์„ ๊ฐœ๋ฐœ์ž๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ์ž‘์„ฑํ•˜๋Š” 'Store Soup' ํ˜„์ƒ๊ณผ ์ผ๊ด€์„ฑ ๋ถ•๊ดด(Integration Chaos)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [25-27]. * **Redux์˜ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง** * ์—„๊ฒฉํ•œ ๊ตฌ์กฐ ๋•๋ถ„์— ๋Œ€๊ทœ๋ชจ ํŒ€์—์„œ ๋ฒ„๊ทธ๋ฅผ ์˜ˆ๋ฐฉํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ดˆ๊ธฐ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ์™€ ํ•™์Šต ๊ณก์„ ์ด ๋งค์šฐ ๊ฐ€ํŒŒ๋ฅด๋‹ค [17, 23, 28]. ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋‚˜ ๋น ๋ฅธ MVP ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ์ฑ„ํƒํ•  ๊ฒฝ์šฐ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์ €ํ•˜์‹œํ‚ค๋Š” ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์ด ๋œ๋‹ค [23]. * **๋ฒˆ๋“ค ํฌ๊ธฐ์— ๋Œ€ํ•œ ์˜คํ•ด** * ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ํƒ ์‹œ ๋‹จ์ˆœํžˆ ๋ฒˆ๋“ค ํฌ๊ธฐ(Context 0KB, Zustand 2.2KB, Redux 4.3KB)๋งŒ์„ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๋Š” ๊ฒƒ์€ ์ž˜๋ชป๋œ ์ง€ํ‘œ ์ตœ์ ํ™”์ด๋‹ค [5, 9]. ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์•„๋ผ๋ ค๋‹ค ๋ถ€์ ์ ˆํ•œ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๋ฉด(์˜ˆ: Context๋กœ ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ), ์ดํ›„ ๋ฆฌ๋ Œ๋”๋ง ์ตœ์ ํ™”์™€ ๋””๋ฒ„๊น…์— ์ˆ˜์ฃผ์˜ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋˜๋Š” ์—ญํšจ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค [7, 9]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜• A (์ƒํƒœ ๋ฐ ๋ฐ์ดํ„ฐ ์•„ํ‚คํ…์ฒ˜)] - [[Server State]] - ์—ฐ๊ฒฐ ์ด์œ : ํ˜„๋Œ€ ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ์ „์—ญ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ์™€ ์™ธ๋ถ€ API์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑ, ๋™๊ธฐํ™”, ๋ฌดํšจํ™”ํ•˜๋Š” ๊ณผ์ •์ด ์ˆœ์ˆ˜ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ์–ด๋–ป๊ฒŒ ๋ณธ์งˆ์ ์œผ๋กœ ๋‹ค๋ฅธ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [3, 22]. - [[Local State]] - ์—ฐ๊ฒฐ ์ด์œ : ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋„์ž…ํ•˜๋”๋ผ๋„, ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ๊ตญํ•œ๋œ ์ƒํƒœ(์˜ˆ: UI ํ† ๊ธ€, ํผ ์ž…๋ ฅ๊ฐ’ ๋“ฑ)๋Š” ์—ฌ์ „ํžˆ `useState` ๋“ฑ์œผ๋กœ ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [1, 2]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ „์—ญ ์Šคํ† ์–ด์— ๋„ฃ๊ณ  ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ์ปฌ์— ๋‚จ๊ฒจ๋‘์–ด์•ผ ํ•˜๋Š”์ง€(์ƒํƒœ ์†Œ์œ ๊ถŒ ๊ฒฝ๊ณ„)๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋Šฅ๋ ฅ [1, 29]. #### [๊ด€๊ณ„ ์œ ํ˜• B (์„ฑ๋Šฅ ๋ฐ ์ตœ์ ํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜)] - [[Selector Pattern]] - ์—ฐ๊ฒฐ ์ด์œ : Zustand์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ Context API์˜ ๋ฆฌ๋ Œ๋”๋ง ํญํ’ ๋ฌธ์ œ๋ฅผ ๊ทน๋ณตํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ ์  ์›๋ฆฌ์ด๋‹ค [3, 15]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ด ํ•„์š”๋กœ ํ•˜๋Š” ํŠน์ • ์ƒํƒœ ์กฐ๊ฐ(Slice)๋งŒ์„ ๋ช…์‹œ์ ์œผ๋กœ ๊ตฌ๋…ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜ [11, 15]. - [[Prop Drilling]] - ์—ฐ๊ฒฐ ์ด์œ : ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ Context API๊ฐ€ ํ”„๋ก ํŠธ์—”๋“œ ์ƒํƒœ๊ณ„์— ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ ์ƒํ™ฉ์ด๋‹ค [8]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ƒํƒœ๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ์ค‘๊ฐ„ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๊ฑฐ์ณ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฐํ•ฉ๋„ ์ฆ๊ฐ€ ๋ฌธ์ œ์™€ ์œ ์ง€๋ณด์ˆ˜์˜ ์–ด๋ ค์›€ [8]. ### Deeper Research Questions - Zustand์˜ ์„ ํƒ์ž(Selector) ํŒจํ„ด์€ ๋‚ด๋ถ€์ ์œผ๋กœ React์˜ ๋ Œ๋”๋ง ์‚ฌ์ดํด๊ณผ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌ๋˜์–ด ๋™์ž‘ํ•˜๋ฉฐ, ์ •ํ™•ํžˆ ์–ด๋–ค ์›๋ฆฌ๋กœ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜๋Š”๊ฐ€? - TanStack Query(์„œ๋ฒ„ ์ƒํƒœ)์™€ Zustand/Redux(ํด๋ผ์ด์–ธํŠธ ์ „์—ญ ์ƒํƒœ)๋ฅผ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ๋•Œ, ๋‘ ์ƒํƒœ ์˜์—ญ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋Š” ์–ด๋–ค ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - ๋Œ€๊ทœ๋ชจ ํŒ€์—์„œ Redux์˜ ์—„๊ฒฉํ•œ ๊ตฌ์กฐ(Action, Reducer, RTK Query)๊ฐ€ ๋น„๋™๊ธฐ ๋กœ์ง์˜ ์ผ๊ด€์„ฑ์„ ์–ด๋–ป๊ฒŒ ๊ฐ•์ œํ•˜๋ฉฐ, ์ด๊ฒƒ์ด Zustand์˜ ์ž์œ ๋„์™€ ๋น„๊ตํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ธก๋ฉด์—์„œ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์ด์ ์„ ์ œ๊ณตํ•˜๋Š”๊ฐ€? - Context API์™€ Zustand๋ฅผ ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ๊ฒฐํ•ฉํ•˜์—ฌ(์˜ˆ: ์ •์  ํ…Œ๋งˆ๋Š” Context, ๋™์  ๋ฐ์ดํ„ฐ๋Š” Zustand) ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ตœ์ ํ™” ๋ฐ ๊ตฌ์กฐ์  ํ•œ๊ณ„๋Š” ๋ฌด์—‡์ธ๊ฐ€? - ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜๋ก (์˜ˆ: Feature-Sliced Design)์„ ์ ์šฉํ•  ๋•Œ, ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์Šคํ† ์–ด(Store) ์ฝ”๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์–ด๋А ๊ณ„์ธต(Layer)์— ๋ฐฐ์น˜ํ•ด์•ผ ๊ธฐ๋Šฅ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** ์ •์ ์ธ ์„ค์ •(ํ…Œ๋งˆ, ๋‹ค๊ตญ์–ด ์„ค์ •)์€ ๋ณ„๋„์˜ ์ข…์†์„ฑ์ด ์—†๋Š” Context API๋กœ ๊ตฌํ˜„ํ•˜๊ณ , ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋‚˜ ์•Œ๋ฆผ ์‹œ์Šคํ…œ์ฒ˜๋Ÿผ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๋™์  ๋ฐ์ดํ„ฐ๋Š” ์„ฑ๋Šฅ์„ ์œ„ํ•ด Zustand๋‚˜ Redux๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๋ถ„๋ฆฌ ์ ์šฉํ•œ๋‹ค [30, 31]. - **System Design:** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋กœ์ปฌ UI ์ƒํƒœ, ๊ธฐ๋Šฅ(Feature) ์ƒํƒœ, ์ „์—ญ ์ธํ”„๋ผ ์ƒํƒœ๋กœ ๋ช…ํ™•ํžˆ ๋ถ„๋ฅ˜ํ•˜๊ณ , ๊ฐ ๋ฐ์ดํ„ฐ์˜ ์„ฑ๊ฒฉ์— ๋งž๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฑ„ํƒํ•˜๋„๋ก ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค [1, 32]. - **Operation / Maintenance:** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ค‘๊ฐ„ ๊ทœ๋ชจ์ผ ๋•Œ๋Š” Zustand๋กœ ๋น ๋ฅด๊ฒŒ ๊ธฐ๋Šฅ์„ ๋ฐฐํฌ(MVP)ํ•˜๋˜, ํ”„๋กœ์ ํŠธ๊ฐ€ ๋Œ€๊ทœ๋ชจ๋กœ ์„ฑ์žฅํ•˜๊ณ  ๋น„๋™๊ธฐ ์ƒํƒœ๊ฐ€ ๋ณต์žกํ•ด์ ธ ํ•œ๊ณ„์— ๋ถ€๋”ชํžˆ๋ฉด ์œ ์ง€๋ณด์ˆ˜์™€ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด Redux๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ํƒ€์ด๋ฐ์„ ์šด์˜ ์ธก๋ฉด์—์„œ ๊ณ„ํšํ•œ๋‹ค [27, 33]. - **Learning Path:** React์˜ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € Context API๋ฅผ ํ•™์Šตํ•˜๊ณ  ์ง์ ‘์ ์ธ ํ•œ๊ณ„(๋ฆฌ๋ Œ๋”๋ง ๋ฌธ์ œ)๋ฅผ ๊ฒช์–ด๋ณธ ํ›„, ์™ธ๋ถ€ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ์ธ Zustand๋‚˜ Redux๋กœ ๋‚˜์•„๊ฐ€๋Š” ์ˆœ์ฐจ์  ํ•™์Šต์ด ๊ฐœ๋… ํŒŒ์•…์— ํšจ๊ณผ์ ์ด๋‹ค [34]. - **My Project Relevance:** ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ, ์„œ๋ฒ„ ํ†ต์‹  ๋ฐ์ดํ„ฐ๋Š” TanStack Query๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋กœ๋”ฉ/์—๋Ÿฌ/์บ์‹ฑ์„ ์œ„์ž„ํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋Š” ๋ถˆํ•„์š”ํ•œ Context ๋Œ€์‹  Zustand๋ฅผ ๋„์ž…ํ•ด ๋ Œ๋”๋ง ์„ฑ๋Šฅ๊ณผ ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค [4, 35]. ### Adjacent Topics - [[Feature-Sliced Design]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ „์—ญ ์ƒํƒœ์˜ ์˜์กด์„ฑ์„ ์ค„์ด๊ณ , ๊ธฐ๋Šฅ(Feature)๊ณผ ๋„๋ฉ”์ธ๋ณ„๋กœ ์ฝ”๋“œ์™€ ์ƒํƒœ ๋กœ์ง์„ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์ „์šฉ ์•„ํ‚คํ…์ฒ˜ ๋ฐฉ๋ฒ•๋ก  ํƒ๊ตฌ [36, 37]. - [[React Performance Profiling]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ต์ฒด ์ „ํ›„์˜ ๋ฆฌ๋ Œ๋”๋ง ํšŸ์ˆ˜์™€ ๋ Œ๋”๋ง ์‹œ๊ฐ„์„ React DevTools Profiler๋‚˜ why-did-you-render ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ์ˆ˜์น˜์ ์œผ๋กœ ์‹œ๊ฐํ™”ํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ๊ธฐ๋ฒ• ํ•™์Šต [7, 38, 39]. --- *Last updated: 2026-04-30*