# [[Prop Drilling|Prop Drilling]] ## ๐Ÿ“Œ Brief Summary Prop Drilling์€ ์‹ค์ œ๋กœ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์—ฌ๋Ÿฌ ์ค‘๊ฐ„ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๊ฑฐ์ณ ๊ณ„์ธต์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์•ˆํ‹ฐ ํŒจํ„ด์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1]. ์ฃผ๋กœ ๊นŠ๊ฒŒ ์ค‘์ฒฉ๋œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ์ƒํƒœ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [1]. React ์ƒํƒœ๊ณ„์—์„œ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด์žฅ๋œ Context API๋‚˜ ์™ธ๋ถ€ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค [1, 2]. ## ๐Ÿ“– Core Content * **์ž‘๋™ ๋ฐฉ์‹ ๋ฐ ์›์ธ:** Prop Drilling์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊นŠ์ด ์ค‘์ฒฉ๋œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด, ์ค‘๊ฐ„์— ์œ„์น˜ํ•œ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์˜ props๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํ†ต๊ณผ์‹œํ‚ค๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [1]. * **๊ตฌ์กฐ์  ๋ฌธ์ œ์ :** ์ด ํŒจํ„ด์€ ์ค‘๊ฐ„ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์ž์‹ ์—๊ฒŒ ํ•„์š” ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹จ์ง€ ์ „๋‹ฌ(transport)ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉฐ, ์ด๋Š” ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ๋†’์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [1]. * **React์˜ ๋‚ด์žฅ ํ•ด๊ฒฐ์ฑ…:** React๋Š” ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 'Context API'๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋ ˆ๋ฒจ์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ ๋„ ์ „์—ญ ๊ด€์‹ฌ์‚ฌ(global concerns) ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์™€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 3, 4]. * **ํŒŒ์ƒ ์ƒํƒœ ์ฒ˜๋ฆฌ์˜ ํ•œ๊ณ„:** Redux๋‚˜ Zustand๊ฐ€ ํŒŒ์ƒ ์ƒํƒœ๋ฅผ ์œ„ํ•œ ์„ ํƒ์ž(derived selectors)๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, Context๋Š” ํŒŒ์ƒ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์—ฌ์ „ํžˆ Prop Drilling ๋ฐฉ์‹์— ์˜์กดํ•˜๊ฒŒ ๋˜๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ํ”ผํ•˜๊ธฐ ์–ด๋ ค์šด ๊ธฐ๋Šฅ์  ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค [5]. ## โš–๏ธ Trade-offs & Caveats Prop Drilling์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๋จผ์ € ๊ณ ๋ ค๋˜๋Š” Context API๋Š” ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ์ƒํƒœ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ œ์•ฝ(Trade-off)์„ ๋™๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค [6, 7]. Context ๊ฐ’์˜ ์ผ๋ถ€๋งŒ ๋ณ€๊ฒฝ๋˜์–ด๋„ ํ•ด๋‹น Context๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ „์ฒด ๋ฆฌ๋ Œ๋”๋ง(re-render)์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [6, 8]. ๋”ฐ๋ผ์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋‚˜ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋“ฑ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ์ƒํƒœ์— ๋Œ€ํ•ด Prop Drilling์„ ํ”ผํ•˜๊ฒ ๋‹ค๊ณ  ๋ฌด์ž‘์ • Context API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ์ €ํ•˜(Re-render storm)๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9, 10]. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ์„ ํƒ์ž(Selector) ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ์—๋งŒ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” Zustand๋‚˜ Redux๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ตœ์ ํ™” ์ธก๋ฉด์—์„œ ํ•„์ˆ˜์ ์ธ ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€์˜ ํ•ด๊ฒฐ์ฑ…์ด ๋ฉ๋‹ˆ๋‹ค [7, 11]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [๊ธฐ๋ฐ˜ ๊ธฐ์ˆ /ํ•ด๊ฒฐ์ฑ…] - [[Context API|Context API]] - ์—ฐ๊ฒฐ ์ด์œ : Prop Drilling ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด React์—์„œ ์ž์ฒด์ ์œผ๋กœ ๋„์ž…ํ•œ ๋‚ด์žฅ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [1]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: props๋ฅผ ์ผ์ผ์ด ๋„˜๊ธฐ์ง€ ์•Š๊ณ  ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•˜๋Š” ์›๋ฆฌ์™€ ๊ทธ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ Œ๋”๋ง ํ•œ๊ณ„๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 12]. #### [์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ/๋Œ€์•ˆ] - Zustand - ์—ฐ๊ฒฐ ์ด์œ : Prop Drilling์˜ ๋Œ€์•ˆ์ธ Context API๊ฐ€ ๊ฐ–๋Š” ๋ฆฌ๋ Œ๋”๋ง ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋Ÿ‰ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [2, 7]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์„ ํƒ์ž(Selector) ํŒจํ„ด์„ ํ™œ์šฉํ•ด ํ•„์š”ํ•œ ์ƒํƒœ์˜ ๋ณ€๊ฒฝ์—๋งŒ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•˜๋„๋ก ์Šค๋งˆํŠธํ•˜๊ฒŒ ๊ตฌ๋…(subscribe)ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 13]. - [[Redux|Redux]] - ์—ฐ๊ฒฐ ์ด์œ : ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Prop Drilling์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์‚ฐ์—… ํ‘œ์ค€ ์ƒํƒœ ์ปจํ…Œ์ด๋„ˆ ๋„๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [5, 14]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํŒŒ์ƒ ์„ ํƒ์ž(derived selectors)๊ฐ€ ์กด์žฌํ•จ์œผ๋กœ์จ Prop Drilling ์—†์ด ๋ณต์žกํ•œ ์ƒํƒœ์™€ ๋น„๋™๊ธฐ ๋กœ์ง์„ ์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ๋‹ค๋ฃจ๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 15]. ### Deeper Research Questions - Prop Drilling์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด Context API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง(re-renders) ๋ฌธ์ œ๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [6, 8] - Redux์™€ Zustand๊ฐ€ ์ œ๊ณตํ•˜๋Š” '์„ ํƒ์ž(Selector)' ๊ธฐ๋Šฅ์€ Prop Drilling ๋ฐฉ์‹๊ณผ ๋น„๊ตํ•˜์—ฌ ํŒŒ์ƒ ์ƒํƒœ(derived state)๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์–ด๋– ํ•œ ์•„ํ‚คํ…์ฒ˜์  ์ด์ ์„ ์ œ๊ณตํ•˜๋Š”๊ฐ€? [5, 7] - Context API๊ฐ€ ์•„๋‹Œ Zustand๋‚˜ Redux ๊ฐ™์€ ์ „๋ฌธ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ๋„์ž…ํ•˜์—ฌ Prop Drilling์„ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณต์žก๋„ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ๋นˆ๋„์˜ ์ •ํ™•ํ•œ ๊ธฐ์ค€์ ์€ ๋ฌด์—‡์ธ๊ฐ€? [10, 11] - Prop Drilling์„ ๋‹จ์ˆœํžˆ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์ƒํƒœ๋ฅผ ์ „์—ญ ์ปจํ…์ŠคํŠธ(Global Context for Everything)์— ๋„ฃ๋Š” ์•ˆํ‹ฐ ํŒจํ„ด์€ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜์— ์–ด๋–ค ๋ถ€์ž‘์šฉ์„ ์ผ์œผํ‚ค๋Š”๊ฐ€? [16, 17] - ์ „์—ญ ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ์ง€์—ญ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ๋‚ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” Prop Drilling์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ(Component Composition)์ด๋‚˜ ํด๋ฆฐ ์ฝ”๋“œ ์›์น™์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? [18, 19] ### Practical Application Contexts - **Implementation:** ๊นŠ๊ฒŒ ์ค‘์ฒฉ๋œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ, ์ค‘๊ฐ„ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ถˆํ•„์š”ํ•œ props๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๋„๋ก `React.createContext()`๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ ์ œ๊ณต์ž(Provider)์™€ ์†Œ๋น„์ž(Consumer)๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค [1, 12]. - **System Design:** ํ…Œ๋งˆ๋‚˜ ์–ธ์–ด ์„ค์ •๊ณผ ๊ฐ™์€ ์ •์ ์ธ ์ „์—ญ ๊ด€์‹ฌ์‚ฌ(global concerns)์— ๋Œ€ํ•œ Prop Drilling์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Context API๋ฅผ ์„ค๊ณ„์— ๋ฐ˜์˜ํ•˜์ง€๋งŒ, ์ƒํƒœ ๋ณ€๊ฒฝ์ด ์žฆ์€ ์˜์—ญ์€ Zustand๋‚˜ Redux ๊ธฐ๋ฐ˜์˜ ์Šค๋งˆํŠธ ์•Œ๋ฆผ ์‹œ์Šคํ…œ(smart notification system) ๊ตฌ์กฐ๋กœ ์„ค๊ณ„ํ•˜์—ฌ ๊ด€์‹ฌ์‚ฌ์™€ ์„ฑ๋Šฅ์„ ๋ชจ๋‘ ์ฑ™๊น๋‹ˆ๋‹ค [4, 13, 20]. - **Operation / Maintenance:** ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด(์˜ˆ: React DevTools Profiler)์„ ํ†ตํ•ด Prop Drilling์„ ์šฐํšŒํ•˜๊ณ ์ž ๋„์ž…ํ•œ Context๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ํญํ’(re-render storm)์„ ์ผ์œผํ‚ค๋Š”์ง€ ์ถ”์ ํ•˜๊ณ , ๋ณ‘๋ชฉ ๋ฐœ์ƒ ์‹œ Selector๋ฅผ ์ง€์›ํ•˜๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(Incremental Migration)์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [8, 9, 21]. - **Learning Path:** React ์ž…๋ฌธ ์‹œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์˜ ๊ธฐ๋ณธ์ธ Prop Drilling์˜ ๋ถˆํŽธํ•จ์„ ๋จผ์ € ๊ฒฝํ—˜ํ•˜๊ณ , ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” Context API๋ฅผ ํ•™์Šตํ•œ ํ›„, ์ตœ์ข…์ ์œผ๋กœ ๋Œ€๊ทœ๋ชจ ์•ฑ์„ ์œ„ํ•œ Zustand๋‚˜ Redux๋กœ ๋ฐœ์ „ํ•ด ๋‚˜๊ฐ€๋Š” ํ˜•ํƒœ์˜ ํ•™์Šต ๊ฒฝ๋กœ๋ฅผ ๋ฐŸ๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [22]. - **My Project Relevance:** ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ### Adjacent Topics - Re-renders - ํ™•์žฅ ๋ฐฉํ–ฅ: Prop Drilling์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ(Context API)์ด ์ดˆ๋ž˜ํ•˜๋Š” ๋ถ€์ž‘์šฉ์ธ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(`React.memo`, `useMemo`, `useCallback`) ๋“ฑ React ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์œผ๋กœ์˜ ์ดํ•ด ํ™•์žฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [3, 6, 23]. --- *Last updated: 2026-04-30*