# [[Context API to Zustand Migration]] ## ๐Ÿ“Œ Brief Summary Context API์—์„œ Zustand๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์ƒํƒœ ๊ด€๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰๋˜๋Š” ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์„  ์ž‘์—…์ž…๋‹ˆ๋‹ค [1-3]. ์ „์—ญ ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ ์ด๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์žฌ๋ Œ๋”๋ง๋˜๋Š” Context API์˜ ํƒœ์ƒ์  ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค [1, 2]. ์ƒํƒœ์˜ ํŠน์ • ์กฐ๊ฐ(slice)๋งŒ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๋Š” ์„ ํƒ์ž(Selector) ํŒจํ„ด์„ ์ œ๊ณตํ•˜๋Š” Zustand๋ฅผ ๋„์ž…ํ•จ์œผ๋กœ์จ, ์ ์ง„์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ์˜ ํ™•์žฅ์„ฑ๊ณผ ์ตœ์ ํ™”๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3-5]. ## ๐Ÿ“– Core Content * **Context API์˜ ์„ฑ๋Šฅ์  ํ•œ๊ณ„ (Re-render ๋ฌธ์ œ)**: Context API๋Š” ๊ทผ๋ณธ์ ์œผ๋กœ '๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์‹œ์Šคํ…œ'์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค [1, 6]. Context๊ฐ€ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ์ƒํƒœ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋งŒ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„, `useContext`๋ฅผ ํ†ตํ•ด ํ•ด๋‹น Context๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žฌ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค [2, 3]. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋‚˜ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ณผ ๊ฐ™์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ์ƒํƒœ(Dynamic state)๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ์ €ํ•˜๋˜๋Š” ์ผ๋ช… '์žฌ๋ Œ๋”๋ง ํญํ’(Re-render storm)'์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7-9]. * **Zustand๋ฅผ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™” (Selector Pattern)**: Zustand๋Š” ์ƒํƒœ์™€ ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ React ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ์™ธ๋ถ€์— ์กด์žฌํ•˜๋Š” ํ‰๋ฒ”ํ•œ JavaScript ๊ฐ์ฒด(store)๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค [10]. Zustand์˜ ํ•ต์‹ฌ์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ „์ฒด ์Šคํ† ์–ด๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์„ ํƒ์ž(Selector) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ํŠน์ • ์ƒํƒœ ์กฐ๊ฐ(slice)์—๋งŒ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค [1, 3]. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. * **ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ƒํƒœ ๊ด€๋ฆฌ ์•„ํ‚คํ…์ฒ˜**: ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณผ์ •์—์„œ ๋ชจ๋“  Context๋ฅผ Zustand๋กœ ๊ต์ฒดํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค [11]. ํ…Œ๋งˆ(๋‹คํฌ/๋ผ์ดํŠธ ๋ชจ๋“œ)๋‚˜ ๋‹ค๊ตญ์–ด ์„ค์ •(Locale), ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature flag)์ฒ˜๋Ÿผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๋“œ ์‹œ ํ•œ ๋ฒˆ ์„ค์ •๋˜๊ณ  ๊ฑฐ์˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ์ •์ ์ธ ์„ค์ • ๊ฐ’์—๋Š” ์—ฌ์ „ํžˆ Context API๊ฐ€ ํ›Œ๋ฅญํ•œ ์„ ํƒ์ง€์ž…๋‹ˆ๋‹ค [11, 12]. ๋ฐ˜๋ฉด ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ์•Œ๋ฆผ ์‹œ์Šคํ…œ, UI ์ƒํƒœ ๋“ฑ ๋™์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋Š” Zustand ์Šคํ† ์–ด์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ธ ๋ชจ๋ฒ” ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค [11, 13]. * **์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(Incremental Migration) ์ „๋žต**: ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ „์ฒด ์ƒํƒœ๋ฅผ ํ•œ ๋ฒˆ์— ์žฌ์ž‘์„ฑ(Rewrite)ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค [4]. ๋Œ€์‹ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ์•Œ๋ฆผ ๊ธฐ๋Šฅ์ฒ˜๋Ÿผ ๋‹จ์ˆœํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ฒฐ์ œ ํ๋ฆ„๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๋„๋ฉ”์ธ์œผ๋กœ ์Šคํ† ์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ฒœ์ฒœํžˆ ์ด์ „ํ•˜๋Š” ์ ์ง„์  ์ ‘๊ทผ๋ฒ•์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [4]. ์ด๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ๋ฉˆ์ถ”์ง€ ์•Š์œผ๋ฉด์„œ๋„ ๋ ˆ๊ฑฐ์‹œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ˜„๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4]. ## โš–๏ธ Trade-offs & Caveats * **์œ ์—ฐ์„ฑ์œผ๋กœ ์ธํ•œ ์ผ๊ด€์„ฑ ์ €ํ•˜ ์œ„ํ—˜**: Zustand๋Š” ์ƒ์šฉ๊ตฌ(Boilerplate)๊ฐ€ ๊ฑฐ์˜ ์—†๊ณ  ์„ค๊ณ„๊ฐ€ ๋งค์šฐ ์œ ์—ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํŒ€ ๋‚ด์— ์—„๊ฒฉํ•œ ์ฝ”๋“œ ์ปจ๋ฒค์…˜์ด ์—†๋‹ค๋ฉด ์‹ฌ๊ฐํ•œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [14-16]. ์˜ˆ๋ฅผ ๋“ค์–ด ํŒ€์›๋“ค์ด ๊ฐ๊ฐ ์ฝœ๋ฐฑ, ํ”„๋กœ๋ฏธ์Šค, ์ปค์Šคํ…€ ๋ฏธ๋“ค์›จ์–ด ๋“ฑ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [15, 17]. * **๊ตฌ๋… ๋ฐ ์„ ํƒ์ž(Selector) ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€**: Zustand๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ์ž ํŒจํ„ด์„ ์ ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํฌ๋„ŒํŠธ ๊ตฌ๋…์ด ํญ๋ฐœ์ ์œผ๋กœ ๋Š˜์–ด๋‚˜ ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ์žฌ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [16, 18]. ํŒ€ ๋‚ด ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ ํƒ์ž ์‚ฌ์šฉ ๊ทœ์น™์„ ์ˆ™์ง€ํ•ด์•ผ ํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [18]. * **์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ์˜ ํ•œ๊ณ„์ **: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋งค์šฐ ๊ฑฐ๋Œ€ํ•ด์ง€๊ฑฐ๋‚˜ 10๋ช… ์ด์ƒ์˜ ํฐ ํŒ€์ด ์ž‘์—…ํ•  ๊ฒฝ์šฐ, Zustand์˜ ์ž์œ ๋กœ์›€๋ณด๋‹ค๋Š” Redux๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›(Single source of truth)๊ณผ ๊ฐ•์ œ๋œ ๊ตฌ์กฐ, ๊ฐ•๋ ฅํ•œ ๋ฏธ๋“ค์›จ์–ด ์ƒํƒœ๊ณ„, ๋ธŒ๋ผ์šฐ์ € ๋””๋ฒ„๊น… ๋„๊ตฌ๊ฐ€ ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [19-21]. ๋”ฐ๋ผ์„œ Zustand๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ์ดํ›„์—๋„, ํ”„๋กœ์ ํŠธ ๋ณต์žก์„ฑ์ด ํŠน์ • ์ž„๊ณ„์ ์„ ๋„˜์œผ๋ฉด ๋‹ค์‹œ Redux๋กœ์˜ ๊ณ ํ†ต์Šค๋Ÿฌ์šด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊ณ„ํšํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [21, 22]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  (Architecture & Infrastructure)] - [[Selector Pattern]] - ์—ฐ๊ฒฐ ์ด์œ : Context API๊ฐ€ ๊ฐ€์ง„ ์ „์ฒด ์žฌ๋ Œ๋”๋ง์˜ ๋งน์ ์„ ๊ทน๋ณตํ•˜๊ณ , Zustand๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ตฌ๋…ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ํ•ต์‹ฌ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค [1, 3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ React ๋ Œ๋”๋ง ์‚ฌ์ดํด์— ๊ฐœ์ž…ํ•˜์—ฌ ๋ Œ๋”๋ง ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋‚ด๋ถ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜ [3]. - [[Re-render Storm]] - ์—ฐ๊ฒฐ ์ด์œ : Context API ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊ฒฐ์‹ฌํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฐ€์žฅ ์น˜๋ช…์ ์ธ ์„ฑ๋Šฅ์  ๋ถ€์ž‘์šฉ์ž…๋‹ˆ๋‹ค [7, 8]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊นŠ์€ ๋ Œ๋”๋ง ํŠธ๋ฆฌ๊ฐ€ ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ๊ณผ UX(์ฒด๊ฐ ์†๋„, INP ๋“ฑ)์— ๋ฏธ์น˜๋Š” ์•…์˜ํ–ฅ [2, 7, 8]. #### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ (Implementation & Tools)] - [[Incremental Migration]] - ์—ฐ๊ฒฐ ์ด์œ : ๋Œ€ํ˜• ๋ฆฌํŒฉํ† ๋ง์ด๋‚˜ ๊ตฌ์กฐ์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•  ๋•Œ ๋ฆฌ์Šคํฌ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์—…์—์„œ ๊ถŒ์žฅํ•˜๋Š” ์ ์šฉ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [4]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์†๋„์™€ ์ฝ”๋“œ๋ฒ ์ด์Šค ๊ฐœ์„ ์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๋ชฉํ‘œ๋ฅผ ๋™์‹œ์— ๋‹ฌ์„ฑํ•˜๋Š” ์•ˆ์ •์ ์ธ ์—”์ง€๋‹ˆ์–ด๋ง ์ „๋žต [4]. ### Deeper Research Questions - Zustand์˜ ์„ ํƒ์ž(selector) ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ๋•Œ ์–•์€ ๋น„๊ต(shallow comparison)์™€ ๊นŠ์€ ๋น„๊ต(deep comparison)๋ฅผ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•ด์•ผ ์ปดํฌ๋„ŒํŠธ ์žฌ๋ Œ๋”๋ง์„ ๊ฐ€์žฅ ํšจ๊ณผ์ ์œผ๋กœ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(Incremental Migration)์„ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ Context API์™€ Zustand๊ฐ€ ๊ณต์กดํ•  ๋•Œ, ๋‘ ์ƒํƒœ ์ €์žฅ์†Œ ๊ฐ„์˜ ์ƒํƒœ ๋™๊ธฐํ™” ๋ฐ ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›(Single Source of Truth) ์›์น™์„ ์–ด๋–ป๊ฒŒ ์œ ์ง€ํ•  ๊ฒƒ์ธ๊ฐ€? - Zustand๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์œ ์—ฐ์„ฑ์ด ๋‹จ์ ์œผ๋กœ ๋ณ€๋ชจํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ๋น„๋™๊ธฐ ์ƒํƒœ ๊ด€๋ฆฌ ์ƒํ™ฉ์—์„œ, Redux(๋˜๋Š” RTK Query)๋กœ์˜ 2์ฐจ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ํ•„์ˆ˜์ ์ธ ์ž„๊ณ„์ ์€ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ธ์ œ์ธ๊ฐ€? - Zustand ์Šคํ† ์–ด์˜ ๊ตฌ์กฐ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š” '๋‹จ์ผ ๊ธ€๋กœ๋ฒŒ ์Šคํ† ์–ด'์™€ ๋„๋ฉ”์ธ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ๋Š” '๋‹ค์ค‘ ์Šคํ† ์–ด'๋กœ ๋‚˜๋ˆŒ ๋•Œ ๊ฐ๊ฐ์˜ ์„ฑ๋Šฅ๊ณผ ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์˜ ์žฅ๋‹จ์ ์€ ๋ฌด์—‡์ธ๊ฐ€? - Context API์™€ Zustand๋ฅผ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํŒจํ„ด์œผ๋กœ ์šด์šฉํ•  ๋•Œ, ์‹œ์Šคํ…œ ๋””์ž์ธ ๊ด€์ ์—์„œ ์ „์—ญ Provider์˜ ๊นŠ์ด(Depth) ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** React์˜ `useContext` ๋ฐ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ์‹ธ๋Š” `Provider` ํŒจํ„ด ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , `create()` ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์— ๋ชจ๋“ˆํ™”๋œ Zustand ์Šคํ† ์–ด๋ฅผ ์ •์˜ํ•˜์—ฌ, ์„ ํƒ์ž ํ•จ์ˆ˜๋กœ ํ•„์š”ํ•œ ์ƒํƒœ๋งŒ ๊ฐ€์ ธ์˜ค๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค [10, 23]. - **System Design:** ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์‹œ, ๋ณ€๊ฒฝ์ด ๋“œ๋ฌธ ์ •์  ์ „์—ญ ๋ฐ์ดํ„ฐ(๋‹คํฌ ๋ชจ๋“œ, ๋กœ์ผ€์ผ, ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ ๋“ฑ)๋Š” ๊ธฐ์กด Context API ํŠธ๋ฆฌ์— ๋‚จ๊ฒจ๋‘๊ณ , ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉ์ด ์žฆ์€ ๋ฐ์ดํ„ฐ(์žฅ๋ฐ”๊ตฌ๋‹ˆ, ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋“ฑ)๋Š” Zustand ์Šคํ† ์–ด๋กœ ๋ถ„๋ฆฌํ•˜๋Š” '์—ญํ•  ๋ถ„๋ฆฌ ์‹œ์Šคํ…œ(ํˆฌํŠธ๋ž™)'์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [11-13]. - **Operation / Maintenance:** ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค ๊ฐœ์„  ์‹œ ๋ฆฌ์Šคํฌ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด '์ „์ฒด ์žฌ์ž‘์„ฑ'์„ ์ง€์–‘ํ•˜๊ณ  ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šคํ† ์–ด(์˜ˆ: ์•Œ๋ฆผ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ์‹œ์ž‘)์”ฉ Zustand๋กœ ์ „ํ™˜ํ•˜๋Š” ์ ์ง„์  ์ „๋žต์„ ์ฑ„ํƒํ•˜์—ฌ ์„œ๋น„์Šค ์—ฐ์†์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค [4]. - **Learning Path:** ์ฒ˜์Œ React์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ Prop Drilling ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด์žฅ ๊ธฐ๋Šฅ์ธ Context API๋ฅผ ์ถฉ๋ถ„ํžˆ ํ•™์Šตํ•œ ํ›„, ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ด์Šˆ๋ฅผ ๊ฒช์–ด๋ณธ ์‹œ์ ์— Zustand๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์ ์˜ ํ•™์Šต ๊ณก์„ ์„ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค [24]. - **My Project Relevance:** ํƒ€์ธ์ด ์ž‘์„ฑํ•œ ๊ธฐ์กด React ํ”„๋กœ์ ํŠธ(ํ•™์‚ฌ ์กธ์—… ๋…ผ๋ฌธ ๋“ฑ)๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ, ๋ณต์žกํ•˜๊ฒŒ ์–ฝํ˜€์žˆ๋Š” ์ „์—ญ ์ƒํƒœ์™€ ๋ฌด๊ฑฐ์šด Redux ๊ตฌํ˜„์ฒด, ํ˜น์€ ๊ณผ๋„ํ•˜๊ฒŒ ๋‚จ์šฉ๋œ Context API๋ฅผ ํŒŒ์•…ํ•ด Zustand ๊ฐ™์€ ๊ฒฝ๋Ÿ‰ํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋Œ€์ฒดํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ(Client State)๋ฅผ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 9, 25]. ### Adjacent Topics - [[TanStack Query (React Query)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: Zustand๋Š” ์ฃผ๋กœ ์ „์—ญ 'ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ(Client State)'๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋ฏ€๋กœ, API๋ฅผ ํ†ตํ•œ ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ๋‚˜ ์บ์‹ฑ, ๋กœ๋”ฉ ์ฒ˜๋ฆฌ ๋“ฑ์„ ๋‹ด๋‹นํ•˜๋Š” '์„œ๋ฒ„ ์ƒํƒœ(Server State)' ๊ด€๋ฆฌ ๋„๊ตฌ์ธ TanStack Query์™€ ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉํ•˜์—ฌ ์™„์ „ํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์žฅํ•˜์—ฌ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค [1, 25]. --- *Last updated: 2026-04-30*