# [[Context API]] ## ๐Ÿ“Œ Brief Summary Context API๋Š” React์— ๋‚ด์žฅ๋œ ์ƒํƒœ ๊ณต์œ  ์†”๋ฃจ์…˜์œผ๋กœ, ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋ ˆ๋ฒจ์„ ํ†ตํ•ด ๋ช…์‹œ์ ์œผ๋กœ props๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค [1, 2]. ์ด๋Š” ๋…๋ฆฝ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ผ๊ธฐ๋ณด๋‹ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค [3, 4]. ์ฃผ๋กœ ํ…Œ๋งˆ, ๋‹ค๊ตญ์–ด ์„ค์ • ๋“ฑ ๋ณ€๊ฒฝ์ด ๊ฑฐ์˜ ์—†๋Š” ์ •์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์—ญ์ ์œผ๋กœ ๊ณต์œ ํ•  ๋•Œ ์ ํ•ฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [5, 6]. ## ๐Ÿ“– Core Content * **์ž‘๋™ ๋ฐฉ์‹ ๋ฐ ๊ตฌ์กฐ:** Context API๋Š” `React.createContext()`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒ์„ฑ๋˜๋ฉฐ, ์ƒํƒœ ๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” `Provider`์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” `Consumer`(์‹ค๋ฌด์—์„œ๋Š” ์ฃผ๋กœ `useContext` ํ›…)๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค [4]. Provider๋Š” ๊ฐ’์„ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•˜๊ณ , ํŠธ๋ฆฌ์˜ ์–ด๋А ๊นŠ์ด์— ์žˆ๋“  `useContext`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•ด๋‹น ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4]. ๋‹จ, ์ƒํƒœ ์ž์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด `useState`๋‚˜ `useReducer`์™€ ๊ฐ™์€ ํ›…๊ณผ ๋ฐ˜๋“œ์‹œ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4, 7]. * **์„ฑ๋Šฅ์  ํ•œ๊ณ„์™€ ๋ฆฌ๋ Œ๋”๋ง ํญํฌ:** Context์˜ ๊ฐ€์žฅ ํฐ ๋‹จ์ ์€ ์„ฑ๋Šฅ ๊ด€๋ฆฌ์ž…๋‹ˆ๋‹ค [8]. Context๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฐ’ ์ค‘ ์ผ๋ถ€๋งŒ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„, ํ•ด๋‹น Context๋ฅผ ๊ตฌ๋…ํ•˜๋Š” **๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง**๋ฉ๋‹ˆ๋‹ค [8, 9]. React๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ ๋ถ€๋ถ„๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌ๋ณ„ํ•ด ๋‚ด์ง€ ๋ชปํ•˜๋ฏ€๋กœ, ์ƒํƒœ ๋ณ€๊ฒฝ์ด ์žฆ์€ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ „์ฒด ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์ˆ˜ ์ดˆ๊ฐ„ ๋ฉˆ์ถ”๋Š” ๋“ฑ ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 10]. * **๊ตฌ์กฐ์  ์ตœ์ ํ™” ์ „๋žต:** ์ด๋Ÿฌํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ํ•˜๋‚˜์˜ 'Global Context'์— ๋‹ด๋Š” ์•ˆํ‹ฐ ํŒจํ„ด์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [11, 12]. ๋Œ€์‹  `ThemeContext`, `NotificationContext`์ฒ˜๋Ÿผ ์ƒํƒœ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ๋„๋ฉ”์ธ๋ณ„ Context๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ์ปค์Šคํ…€ ํ›…๊ณผ Selector ํŒจํ„ด์„ ํ™œ์šฉํ•ด ํ•„์š”ํ•œ ๊ฐ’๋งŒ ์Šค์ฝ”ํ”„๋ฅผ ์ขํ˜€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [12, 13]. * **์‚ฌ์šฉ์˜ ์ ํ•ฉ์„ฑ:** ํ…Œ๋งˆ(๋ผ์ดํŠธ/๋‹คํฌ ๋ชจ๋“œ), ์–ธ์–ด ํ™˜๊ฒฝ ์„ค์ •, ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ ๋“ฑ **๋ณ€๊ฒฝ ๋นˆ๋„๊ฐ€ ๋งค์šฐ ๋‚ฎ๊ณ  ์ •์ ์ธ ๋ฐ์ดํ„ฐ**๋ฅผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ์ž‘์€ ํ”„๋กœ์ ํŠธ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ์— ์™„๋ฒฝํ•œ ์„ ํƒ์ž…๋‹ˆ๋‹ค [5, 6, 14]. ๋ฐ˜๋ฉด, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ, ์ž์ฃผ ์—…๋ฐ์ดํŠธ๋˜๋Š” ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” Context๋ฅผ ํ”ผํ•˜๊ณ  Zustand๋‚˜ Redux๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [15-18]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts - [[Prop Drilling]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊นŠ๊ฒŒ ์ค‘์ฒฉ๋œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๋ถˆํ•„์š”ํ•œ ์ค‘๊ฐ„ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค [2]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Context API๊ฐ€ ํƒ„์ƒํ•˜๊ฒŒ ๋œ ๊ทผ๋ณธ์ ์ธ ๋ฐฐ๊ฒฝ๊ณผ, ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ํŠธ๋ฆฌ ์•„๋ž˜๋กœ "๊ฑด๋„ˆ๋›ฐ์–ด" ์ „๋‹ฌํ•˜๋Š”์ง€ ๊ทธ ๋ชฉ์ ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 19]. - [[useContext]] - ์—ฐ๊ฒฐ ์ด์œ : Context API์˜ Provider๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๊ฐ’์„ ์ฝ๊ธฐ ์œ„ํ•ด ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ํ˜ธ์ถœํ•˜๋Š” React์˜ ๋‚ด์žฅ ํ›…์ž…๋‹ˆ๋‹ค [4]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ตฌ๋…(Subscription)์ด ๋ฐœ์ƒํ•˜๋Š” ์ •ํ™•ํ•œ ์ง€์ ๊ณผ, ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฆฌ๋ Œ๋”๋ง์ด ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š”์ง€ ๋ Œ๋”๋ง ๋™์ž‘ ์›๋ฆฌ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8]. - [[Zustand]] - ์—ฐ๊ฒฐ ์ด์œ : Context API์˜ ๋ฆฌ๋ Œ๋”๋ง ํ•œ๊ณ„์™€ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์ž์ฃผ ๋น„๊ต๋˜๊ณ  ์ฑ„ํƒ๋˜๋Š” ๊ฒฝ๋Ÿ‰ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค [20, 21]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Zustand์˜ 'Selector ํŒจํ„ด'์ด ์–ด๋–ป๊ฒŒ ํŠน์ • ์ƒํƒœ ์Šฌ๋ผ์ด์Šค๋งŒ ๊ตฌ๋…ํ•˜๊ฒŒ ํ•˜์—ฌ Context API์˜ "์ „์ฒด ๋ฆฌ๋ Œ๋”๋ง" ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 10]. ### Deeper Research Questions - Context API์™€ ์™ธ๋ถ€ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Zustand, Redux)๋ฅผ ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ํšจ์œจ์ ์œผ๋กœ ํ˜ผ์šฉ(Hybrid)ํ•˜๊ธฐ ์œ„ํ•ด, ์ •์  ์ƒํƒœ์™€ ๋™์  ์ƒํƒœ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์ตœ์ ์˜ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? - Context API์˜ "๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ" ํŠน์„ฑ์œผ๋กœ ์ธํ•œ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฉ”์ธ๋ณ„๋กœ Context๋ฅผ ์ชผ๊ฐค ๋•Œ, ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์žƒ์ง€ ์•Š์œผ๋ฉด์„œ๋„ ์„ฑ๋Šฅ์„ ์žก์„ ์ˆ˜ ์žˆ๋Š” ์ ์ ˆํ•œ ๋ถ„๋ฆฌ ์ž…๋„(Granularity)๋Š” ์–ด๋А ์ •๋„์ธ๊ฐ€? - `use-context-selector`์™€ ๊ฐ™์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Context API์˜ ๋ฆฌ๋ Œ๋”๋ง ๋ฌธ์ œ๋ฅผ ์šฐํšŒํ•˜๋Š” ๋ฐฉ์‹์€, ์ฒ˜์Œ๋ถ€ํ„ฐ Zustand๋‚˜ Redux๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ ๋„์ž… ๋น„์šฉ ๋ฐ ์žฅ๊ธฐ์  ํ™•์žฅ์„ฑ ์ธก๋ฉด์—์„œ ์–ด๋–ค ์žฅ๋‹จ์ ์„ ๊ฐ€์ง€๋Š”๊ฐ€? - ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์˜ ๋ชฉ์ ์œผ๋กœ Context API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ(Jest ๋“ฑ)์ด๋‚˜ Storybook์—์„œ Provider ๋ชจํ‚น(Mocking)์„ ์„ค๊ณ„ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ๊ณผ ํ•ด๊ฒฐ์ฑ…์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฌด๋ถ„๋ณ„ํ•œ `useEffect`์™€ Context API๊ฐ€ ๊ฒฐํ•ฉ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” '๋ฆฌ๋ Œ๋”๋ง ํญํ’(Re-render storm)'์„ React DevTools Profiler๋กœ ์ง„๋‹จํ•˜๊ณ  ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๊ณผ์ •์€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** React ํ”„๋กœ์ ํŠธ์—์„œ `React.createContext()`๋กœ ํ…Œ๋งˆ๋‚˜ ๋กœ์ผ€์ผ ์ •๋ณด๋ฅผ ์ •์˜ํ•˜๊ณ , ์ตœ์ƒ์œ„ ๋ ˆ์ด์–ด(`app/` ๋˜๋Š” ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ)๋ฅผ `Provider`๋กœ ๊ฐ์‹ผ ๋’ค, ๋‚ด๋ถ€ ์ปดํฌ๋„ŒํŠธ์—์„œ `useContext`๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์„ค์ •๊ฐ’์„ ๋ถˆ๋Ÿฌ์™€ UI์— ์ฆ‰๊ฐ์ ์œผ๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค [4, 22, 23]. - **System Design:** ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์‹œ ์ƒํƒœ์˜ '๋ณ€๊ฒฝ ๋นˆ๋„'์— ๋”ฐ๋ผ ์ €์žฅ์†Œ๋ฅผ ์ด์›ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋‹คํฌ๋ชจ๋“œ, ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ๊ฐ™์€ ์ •์ ์ธ ์„ค์ •์€ Context API์— ๋ฐฐ์น˜ํ•˜๊ณ , ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋‚˜ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ์ฒ˜๋Ÿผ ์ˆ˜์‹œ๋กœ ๋ณ€ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” Zustand๋‚˜ Redux ๊ฐ™์€ ์™ธ๋ถ€ ์Šคํ† ์–ด์— ๋ฐฐ์น˜ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ์ „ํŒŒ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [24]. - **Operation / Maintenance:** ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง ์‹œ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ์ดํ›„ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๋ฉˆ์ถ”๋Š” ํ˜„์ƒ์ด ๋ฐœ๊ฒฌ๋˜๋ฉด, React DevTools์˜ Profiler๋ฅผ ์ด์šฉํ•ด ์›์ธ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ์›์ธ์ด ๋‹จ์ผ Context ์—…๋ฐ์ดํŠธ์— ์˜ํ•œ ์ˆ˜๋ฐฑ ๊ฐœ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฆฌ๋ Œ๋”๋ง์œผ๋กœ ํ™•์ธ๋  ๊ฒฝ์šฐ, Context๋ฅผ ์ž˜๊ฒŒ ์ชผ๊ฐœ๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ์œ ์ง€๋ณด์ˆ˜ ๊ฒฐ์ •์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค [1, 25]. - **Learning Path:** React ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ๋‹จ๊ณ„์—์„œ, ์ปดํฌ๋„ŒํŠธ ๊ฐ„ Props ์ „๋‹ฌ์˜ ํ”ผ๋กœ๋„๋ฅผ ์ค„์ด๋Š” ์ฒซ ๋ฒˆ์งธ ๋„๊ตฌ๋กœ ํ•™์Šต๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์‹ค์ œ ๋ณต์žกํ•œ ์•ฑ์„ ๋งŒ๋“ค๋ฉฐ ํ•œ๊ณ„๋ฅผ ๊ฒฝํ—˜ํ•˜๊ณ , Redux์˜ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ๊ตฌ์กฐ๋‚˜ Zustand์˜ ๋…๋ฆฝ๋œ ์Šคํ† ์–ด ๊ฐœ๋…์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐ›์•„๋“ค์ด๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ ํ•™์Šต ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค [14, 26, 27]. - **My Project Relevance:** ๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค์— 'Global Context' ์•ˆํ‹ฐ ํŒจํ„ด(๋ชจ๋“  ์ƒํƒœ๋ฅผ ํ•œ ๊ณณ์— ๋ชฐ์•„๋„ฃ์€ ํ˜•ํƒœ)์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”์ง€ ์ ๊ฒ€ํ•˜๊ณ  [11], ๋ Œ๋”๋ง ๋ณ‘๋ชฉ์ด ์žˆ๋Š” ๊ฒฝ์šฐ `useMemo`, `useCallback`๊ณผ ํ•จ๊ป˜ Context๋ฅผ ์ฑ…์ž„๋ณ„๋กœ ๋ถ„ํ• ํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง ๋ชฉํ‘œ์™€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ด€๋ฉ๋‹ˆ๋‹ค [1, 12]. ### Adjacent Topics - [[React.memo]] - ํ™•์žฅ ๋ฐฉํ–ฅ: Context API์— ์˜ํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ถˆํ•„์š”ํ•œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์–•์€ ๋น„๊ต(Shallow Compare) ์ตœ์ ํ™” ๋„๊ตฌ๋กœ, ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ตœ์ ํ™”(Performance Optimization) ๊ธฐ๋ฒ• ์ „๋ฐ˜์œผ๋กœ์˜ ์ดํ•ด๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค [28, 29]. - [[Concurrent Rendering]] - ํ™•์žฅ ๋ฐฉํ–ฅ: React 18์˜ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง ๊ธฐ๋Šฅ(`useTransition`, `useDeferredValue`)์„ ํ†ตํ•ด ๋ฌด๊ฑฐ์šด ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง์„ ์–ด๋–ป๊ฒŒ ์ง€์—ฐ์‹œํ‚ค๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ˜์‘์„ฑ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ํ๋ฆ„์œผ๋กœ ํƒ๊ตฌ๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค [6, 30]. --- *Last updated: 2026-04-30*