# [[React Context API]] ## ๐Ÿ“Œ Brief Summary React Context API๋Š” ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋ ˆ๋ฒจ์„ ํ†ตํ•ด prop์„ ์ผ์ผ์ด ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” 'prop drilling' ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ React์˜ ๋‚ด์žฅ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค [1, 2]. `React.createContext()`๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋˜๋ฉฐ, `Provider`๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•˜๊ณ  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ `useContext()`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 3]. ๊ทธ๋Ÿฌ๋‚˜ Context API๋Š” ๊ทธ ์ž์ฒด๋กœ ๋…๋ฆฝ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ ์†”๋ฃจ์…˜์€ ์•„๋‹ˆ๋ฉฐ, ์‹ค์ œ ์ƒํƒœ์˜ ๋ณ€๊ฒฝ ๋ฐ ๊ด€๋ฆฌ๋Š” ์—ฌ์ „ํžˆ `useState`๋‚˜ `useReducer`์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2]. ## ๐Ÿ“– Core Content * **์ž‘๋™ ๋ฐฉ์‹ ๋ฐ ์ฃผ์š” ํŠน์ง•**: Context API๋Š” ์ผ์ข…์˜ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ผ๋””์˜ค ํƒ€์›Œ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค [3]. ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ `Provider`๋กœ ๊ฐ์‹ธ๊ณ  ๊ณต์œ ํ•  ๊ฐ’์„ prop์œผ๋กœ ์ „๋‹ฌํ•˜๋ฉด, ํŠธ๋ฆฌ ๋‚ด์˜ ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋“  ๊นŠ์ด์™€ ์ƒ๊ด€์—†์ด `useContext()`๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2]. ์™ธ๋ถ€ ํŒจํ‚ค์ง€ ์„ค์น˜๊ฐ€ ํ•„์š” ์—†๋Š” 'Zero dependency' ์†”๋ฃจ์…˜์ด๋ผ๋Š” ํฐ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [4]. * **์„ฑ๋Šฅ์  ํ•œ๊ณ„์™€ ๋ฆฌ๋ Œ๋”๋ง ํญํ’ (Re-render Storm)**: Context API์˜ ๊ฐ€์žฅ ์น˜๋ช…์ ์ธ ๋‹จ์ ์€ ์ปจํ…์ŠคํŠธ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” **๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฌด์กฐ๊ฑด ๋ฆฌ๋ Œ๋”๋ง**๋œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค [5]. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ์ฒด์˜ ํŠน์ • ๋ถ€๋ถ„(์˜ˆ: `user` ์ •๋ณด)๋งŒ ์‚ฌ์šฉํ•˜๋”๋ผ๋„, ๊ฐ™์€ ์ปจํ…์ŠคํŠธ ๋‚ด์˜ ๋‹ค๋ฅธ ๊ฐ’(์˜ˆ: `theme`)์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [6]. React๋Š” ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ๋น„๊ตํ•˜์—ฌ ๋ Œ๋”๋ง์„ ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ธฐ๋Šฅ์„ ์ž์ฒด์ ์œผ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ „์ฒด ํ™”๋ฉด์ด ์ผ์‹œ์ ์œผ๋กœ ๋ฉˆ์ถ”๋Š” ๋“ฑ์˜ ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 8]. * **์ ํ•ฉํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€**: ์ด๋Ÿฌํ•œ ๋ Œ๋”๋ง ํŠน์„ฑ ๋•Œ๋ฌธ์— Context API๋Š” ๋ณ€๊ฒฝ์ด ๊ฑฐ์˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” **์ •์ ์ธ ์ „์—ญ ์ƒํƒœ**๋ฅผ ๊ณต์œ ํ•  ๋•Œ ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [4]. - ํ…Œ๋งˆ ์„ค์ • (๋ผ์ดํŠธ/๋‹คํฌ ๋ชจ๋“œ) [4, 9] - ๋‹ค๊ตญ์–ด ์ง€์› (Locale) ๋ฐ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature flags) [4, 9] - ๋ฆฌ๋ Œ๋”๋ง ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์†Œ๊ทœ๋ชจ ์•ฑ์ด๋‚˜ ์™ธ๋ถ€ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ [4] * **๋ถ€์ ํ•ฉํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋ฐ ๋Œ€์•ˆ (Zustand & Redux)**: ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ์•Œ๋ฆผ, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋“ฑ **๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ๋™์  ์ƒํƒœ**๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ๋Š” Context API ์‚ฌ์šฉ์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [10-12]. - **Zustand**: Context API์˜ ๋ฆฌ๋ Œ๋”๋ง ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ด ํ•„์š”ํ•œ ์ƒํƒœ ์กฐ๊ฐ(slice)๋งŒ ์„ ํƒ(select)ํ•˜์—ฌ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ๊ฐ€ React ๋ Œ๋”๋ง ์‚ฌ์ดํด ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌ๋˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค [5, 6, 13]. - **Redux**: ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ์ž‘์—…, ํŒŒ์ƒ ์ƒํƒœ ๊ด€๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ์—„๊ฒฉํ•œ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•œ Time-Travel ๋””๋ฒ„๊น… ๋“ฑ์ด ํ•„์š”ํ•œ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ํŒ€ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [14, 15]. Context API๋Š” ๋””๋ฒ„๊น… ๋„๊ตฌ๊ฐ€ ๋ถ€์กฑํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๊ฐ€ ๊นจ์ง€๊ธฐ ์‰ฌ์šด ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [14]. * **๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๋ฆฌํŒฉํ† ๋ง ์ „๋žต**: ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ์ธํ•ด Context API์—์„œ Zustand ๋“ฑ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ๋Š” ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ์žฌ์ž‘์„ฑ(rewrite)ํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ์•Œ๋ฆผ๊ณผ ๊ฐ™์€ ๋‹จ์ˆœํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์ ์ง„์ ์œผ๋กœ ์Šคํ† ์–ด๋ฅผ ์˜ฎ๊ธฐ๋Š” ๋ฐฉ์‹(๋ฆฌํŒฉํ† ๋ง)์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [16]. ํ˜„์‹ค์ ์œผ๋กœ๋Š” ์ •์  ๋ฐ์ดํ„ฐ์—๋Š” Context API๋ฅผ, ๋™์  ์ƒํƒœ์—๋Š” Zustand๋ฅผ ํ•จ๊ป˜ ํ˜ผ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ด ๋งค์šฐ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค [17]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Prop Drilling]], [[State Management]], [[Zustand]], [[Redux]], [[Performance Optimization]] - **Projects/Contexts:** [[Frontend Architecture]], [[React Scalability]], [[Refactoring]] - **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด Context API๋Š” ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ 0KB๋ผ๋Š” ์žฅ์  ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ์„ ํƒ์ง€๋กœ ๋งค๋ ฅ์ ์œผ๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒํƒœ๊ฐ€ ๋นˆ๋ฒˆํžˆ ๋ณ€๊ฒฝ๋˜๋Š” ์•ฑ์— ์ ์šฉํ•  ๊ฒฝ์šฐ, ๋ฆฌ๋ Œ๋”๋ง ๋ฌธ์ œ(`useMemo` ๋“ฑ์„ ํ†ตํ•œ ์ˆ˜๋™ ์ตœ์ ํ™”)๋ฅผ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐ ๋ง‰๋Œ€ํ•œ ๊ฐœ๋ฐœ์ž ์‹œ๊ฐ„์ด ๋‚ญ๋น„๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ "๋ฒˆ๋“ค ํฌ๊ธฐ๋งŒ์œผ๋กœ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ํŽ˜์ธํŠธ ๋ฌด๊ฒŒ๋ฅผ ๋ณด๊ณ  ์ฐจ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค"๊ณ  ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค [7, 9, 18]. --- *Last updated: 2026-04-26*