# [[Error Handling]] ## ๐Ÿ“Œ Brief Summary React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ Error Handling์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—๋Ÿฌ๋กœ ์ธํ•ด ์ „์ฒด ์•ฑ์ด ์ค‘๋‹จ๋˜๊ฑฐ๋‚˜ ๋ฐฑ์ง€ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค [1, 2]. ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ(Error Boundaries)๋ฅผ ํ†ตํ•ด ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์—์„œ ๋ฐœ์ƒํ•œ ๋ Œ๋”๋ง ์—๋Ÿฌ๋ฅผ ํฌ์ฐฉํ•˜๊ณ , ๋Œ€์‹  ๋Œ€์ฒด UI(Fallback UI)๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค [1]. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋‚˜ ๋น„๋™๊ธฐ ์ž‘์—…์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋Š” ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ „ํ†ต์ ์ธ `try/catch` ๋ธ”๋ก๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ํฌ๊ด„์ ์ธ ์—๋Ÿฌ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [3-5]. ## ๐Ÿ“– Core Content * **์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ(Error Boundaries)์˜ ๋™์ž‘ ์›๋ฆฌ:** ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋Š” ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง, ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋ฅผ ์žก๋Š” ํŠน๋ณ„ํ•œ React ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค [1, 5]. `static getDerivedStateFromError()` ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ Fallback UI๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ , `componentDidCatch()` ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—๋Ÿฌ ์ •๋ณด๋ฅผ ๋กœ๊น…ํ•ฉ๋‹ˆ๋‹ค [6]. ์ด๋ฅผ ํ†ตํ•ด ํŠน์ • UI ๋ถ€๋ถ„์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋”๋ผ๋„ ๋‚˜๋จธ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค [7]. * **์—๋Ÿฌ ํฌ์ฐฉ์˜ ํ•œ๊ณ„ (์˜ˆ์™ธ ์‚ฌํ•ญ):** ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋Š” ํŠธ๋ฆฌ์—์„œ ์ž์‹ ์˜ ์•„๋ž˜์— ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์—๋Ÿฌ๋งŒ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž๊ธฐ ์ž์‹ ์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋Š” ํฌ์ฐฉํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค [8]. ๋˜ํ•œ, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ, ๋น„๋™๊ธฐ ์ฝ”๋“œ(์˜ˆ: `setTimeout` ๋˜๋Š” Promise), ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR) ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋Š” ํฌ์ฐฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค [5, 6]. * **์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ ๋น„๋™๊ธฐ ์ฝ”๋“œ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ:** ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ๋ Œ๋”๋ง ์ค‘์— ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์—ฌ๊ธฐ์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ React๋Š” ์—ฌ์ „ํžˆ ํ™”๋ฉด์— ๋ฌด์—‡์„ ํ‘œ์‹œํ•ด์•ผ ํ• ์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [4]. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ‘œ์ค€ ๋ช…๋ นํ˜• ์ฝ”๋“œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ธ `try/catch` ๋ฌธ์„ ์ง์ ‘ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [3-5]. * **ํฌ์ฐฉ๋˜์ง€ ์•Š์€ ์—๋Ÿฌ(Uncaught Errors)์˜ ๊ฒฐ๊ณผ:** React 16๋ถ€ํ„ฐ๋Š” ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ์— ์˜ํ•ด ํฌ์ฐฉ๋˜์ง€ ์•Š์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ์†์ƒ๋œ UI๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๋Š” ๊ฒƒ์ด ๋ณด์•ˆ์ด๋‚˜ ์˜ค์ž‘๋™(์˜ˆ: ์ž˜๋ชป๋œ ์†ก๊ธˆ ๊ธˆ์•ก ํ‘œ์‹œ, ์—‰๋šฑํ•œ ์‚ฌ๋žŒ์—๊ฒŒ ๋ฉ”์‹œ์ง€ ์ „์†ก ๋“ฑ) ์ธก๋ฉด์—์„œ ๋” ์œ„ํ—˜ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ „์ฒด React ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ๋งˆ์šดํŠธ ํ•ด์ œ(Unmount)ํ•ฉ๋‹ˆ๋‹ค [9, 10]. * **ํ”„๋กœ๋•์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋””๋ฒ„๊น…:** ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋Š” ๋‹จ์ˆœํžˆ UI๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, Sentry, LogRocket, SigNoz ๋“ฑ๊ณผ ๊ฐ™์€ ํ”„๋ก ํŠธ์—”๋“œ ์—๋Ÿฌ ๋กœ๊น… ์„œ๋น„์Šค์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ์—๋Ÿฌ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [11]. ์ด ๋„๊ตฌ๋“ค์€ ์ง€๋Šฅํ˜• ์—๋Ÿฌ ๊ทธ๋ฃนํ™”, ์„ธ์…˜ ๋ฆฌํ”Œ๋ ˆ์ด, ์ „์ฒด ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์›์ธ ํŒŒ์•…์„ ๋•์Šต๋‹ˆ๋‹ค [12-14]. ## โš–๏ธ Trade-offs & Caveats * **ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ ๊ฐ•์ œ:** ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋Š” ์˜ค์ง ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋กœ๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 8]. ํ˜„๋Œ€์˜ React ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ๋Œ€๋ถ€๋ถ„ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ Hooks๋กœ ์ž‘์„ฑ๋œ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜๋ฉด ์ด์งˆ์ ์ธ ๊ตฌ์กฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•จ์ˆ˜ํ˜•์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด `react-error-boundary`์™€ ๊ฐ™์€ ๋ณ„๋„์˜ ๋ž˜ํผ(Wrapper) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•ด์•ผ ํ•˜๋Š” ์ œ์•ฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค [5]. * **์ „์—ญ vs ์ง€์—ญ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ์˜ ๋”œ๋ ˆ๋งˆ:** ์•ฑ ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋กœ ๊ฐ์‹ธ๋ฉด ์„ค์ •์€ ์‰ฝ์ง€๋งŒ, ์ž‘์€ ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜์˜ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ „์ฒด UI๊ฐ€ Fallback์œผ๋กœ ๋Œ€์ฒด๋˜์–ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [11, 15]. ๋ฐ˜๋Œ€๋กœ ์„œ๋“œํŒŒํ‹ฐ ์œ„์ ฏ, ๋ณต์žกํ•œ ํผ ๋“ฑ ๋ถˆ์•ˆ์ •ํ•œ ์š”์†Œ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฐ์‹ธ๋ฉด(Granularity) ํŠน์ • ์˜์—ญ๋งŒ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋˜์–ด ๋‚˜๋จธ์ง€ ์•ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์˜ ๋ณต์žก๋„์™€ ๊ด€๋ฆฌ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค [9, 11, 15]. * **์™„๋ฒฝํ•œ ๋ณดํ˜ธ์˜ ๋ถˆ๊ฐ€๋Šฅ:** ์•ž์„œ ์–ธ๊ธ‰๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋Š” ๋น„๋™๊ธฐ ๋กœ์ง์ด๋‚˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ์—๋Ÿฌ๋ฅผ ์žก์ง€ ๋ชปํ•˜๋ฏ€๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๊ฒฉ์ƒ ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋“ฑ ๋น„๋™๊ธฐ ๋กœ์ง์ด ๋งŽ์„ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋งŒ์œผ๋กœ๋Š” ์‹œ์Šคํ…œ์˜ ์ค‘๋‹จ์„ ์™„์ „ํžˆ ๋ง‰์„ ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ชจ๋“  ์ƒํ˜ธ์ž‘์šฉ ์ง€์ ์— ๋ฐฉ์–ด์ ์ธ ๋กœ์ง(`try/catch`)์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ์ˆ˜๊ณ ๊ฐ€ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค [3, 4]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] - [[Error Boundaries]] - ์—ฐ๊ฒฐ ์ด์œ : React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ ์–ธํ˜• UI ๋ Œ๋”๋ง ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ค‘์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [1]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์•ฑ์˜ ํฌ๋ž˜์‹œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์†์ƒ๋œ ์ปดํฌ๋„ŒํŠธ ๋Œ€์‹  ์ •์ƒ์ ์ธ ๋Œ€์ฒด ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•˜๋Š” React๋งŒ์˜ ์—๋Ÿฌ ๋ณต๊ตฌ ์ „๋žต์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 2, 10]. - [[Component Lifecycle]] - ์—ฐ๊ฒฐ ์ด์œ : ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” React ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ํŠน์ • ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ(`getDerivedStateFromError`, `componentDidCatch`)๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ์š”๊ตฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [6]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ Œ๋”๋ง ๋‹จ๊ณ„์—์„œ ์–ด๋–ป๊ฒŒ ์—๋Ÿฌ๋ฅผ ์žก๊ณ  ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š”์ง€ ๋‚ด๋ถ€ ๋™์ž‘์„ ์‹ฌ์ธต์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 6]. #### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] - [[Cloud Logging Tools]] - ์—ฐ๊ฒฐ ์ด์œ : ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €(ํ”„๋กœ๋•์…˜)์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ธ์ง€ํ•˜๊ณ  ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Sentry, LogRocket, Datadog ๊ฐ™์€ ์™ธ๋ถ€ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด ํ†ตํ•ฉ์ด ํ•„์ˆ˜์ ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [11, 12, 14]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์˜ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ์ถ”์ , ์‚ฌ์šฉ์ž ์„ธ์…˜ ๋ฆฌํ”Œ๋ ˆ์ด๋ฅผ ํ†ตํ•œ ์ƒํ™ฉ ๋ณต์› ๋“ฑ ์‹ฌํ™”๋œ ์—๋Ÿฌ ์ถ”์  ๊ธฐ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [12-14]. - [[try/catch]] - ์—ฐ๊ฒฐ ์ด์œ : ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ, ๋น„๋™๊ธฐ ํ†ต์‹  ์ฝ”๋“œ ๋‚ด์˜ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ‘œ์ค€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [3-5]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์„ ์–ธํ˜• ์—๋Ÿฌ ์ฒ˜๋ฆฌ(Error Boundary)์™€ ๋ช…๋ นํ˜• ์—๋Ÿฌ ์ฒ˜๋ฆฌ(try/catch)์˜ ์—ญํ•  ๋ถ„๋‹ด๊ณผ ์ฐจ์ด๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 4]. ### Deeper Research Questions - ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋‚˜ ๋น„๋™๊ธฐ ํ•จ์ˆ˜(์˜ˆ: setTimeout, Promise) ๋‚ด๋ถ€์˜ ์—๋Ÿฌ๊ฐ€ React์˜ ๋ Œ๋”๋ง ์‚ฌ์ดํด์—์„œ ๋ฒ—์–ด๋‚˜ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ์— ํฌ์ฐฉ๋˜์ง€ ์•Š๋Š” ๊ทผ๋ณธ์ ์ธ ์•„ํ‚คํ…์ฒ˜์  ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€? - ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ์‹œ๋Œ€์—์„œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๊ฐ€ ๊ฐ–๋Š” ํ•œ๊ณ„์ ์€ ๋ฌด์—‡์ด๋ฉฐ, ์ปค๋ฎค๋‹ˆํ‹ฐ(์˜ˆ: `react-error-boundary` ๋“ฑ)๋Š” ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ๊ทน๋ณตํ•˜๊ณ  ์žˆ๋Š”๊ฐ€? - ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŽ˜์ด์ง€ ๋ ˆ๋ฒจ, ์œ„์ ฏ ๋ ˆ๋ฒจ ๋“ฑ ์—ฌ๋Ÿฌ ๊ฒน์œผ๋กœ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋ฅผ ์ค‘์ฒฉ ๋ฐฐ์น˜(Nesting)ํ•  ๋•Œ ์—๋Ÿฌ๊ฐ€ ์ƒ์œ„๋กœ ์ „ํŒŒ(Propagate)๋˜๋Š” ๊ทœ์น™๊ณผ ํšจ๊ณผ์ ์ธ ๋ฐฐ์น˜ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? - SSR(Server-Side Rendering) ํ™˜๊ฒฝ์„ ์ง€์›ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ(์˜ˆ: Next.js)์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์ค‘์‹ฌ์˜ React ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ ์™ธ์— ์„œ๋ฒ„ ์ธก ์—๋Ÿฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๋Š”๊ฐ€? - Sentry์™€ ๊ฐ™์€ ์™ธ๋ถ€ ๋กœ๊น… ๋„๊ตฌ๋Š” ์ตœ์†Œํ™”(Minified)๋œ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ํŒŒ์ผ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์„ ๋•Œ, ์–ด๋–ป๊ฒŒ ์›๋ž˜ ์ปดํฌ๋„ŒํŠธ์™€ ๋ฐœ์ƒ ์œ„์น˜๋ฅผ ์ •ํ™•ํžˆ ๋งคํ•‘ํ•˜์—ฌ ์•Œ๋ ค์ฃผ๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** React ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ ์‹œ ํ•˜์–€ ํ™”๋ฉด์ด ๋œจ๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์ตœ์ƒ๋‹จ์ด๋‚˜ ๋ถˆ์•ˆ์ •ํ•œ ์„œ๋“œํŒŒํ‹ฐ ์œ„์ ฏ ์ฃผ์œ„์— `ErrorBoundary` ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  `fallback UI` ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค [2, 9, 15]. ๋น„๋™๊ธฐ ํ˜ธ์ถœ ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ `try/catch`๋กœ ๊ฐ์‹ธ ๋ณ„๋„์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค [3, 5]. - **System Design:** ํŽ˜์ด์Šค๋ถ ๋ฉ”์‹ ์ €์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ, ์‚ฌ์ด๋“œ๋ฐ”, ์ •๋ณด ํŒจ๋„, ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ์ฐฝ ๋“ฑ ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ๊ฐ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋กœ ๊ฐ์‹ธ ํ•œ ๊ธฐ๋Šฅ์ด ๊ณ ์žฅ ๋‚˜๋„ ์‹œ์Šคํ…œ์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์€ ๊ณ„์† ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค [15, 16]. - **Operation / Maintenance:** ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— Sentry ๊ฐ™์€ ๊ด€์ธก์„ฑ(Observability) ๋„๊ตฌ๋ฅผ ์—ฐ๊ฒฐํ•ด ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ์˜ `componentDidCatch`์—์„œ ์—๋Ÿฌ๋ฅผ ์ „์†กํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž ๋ถˆ๋งŒ ์ ‘์ˆ˜ ์ด์ „์— ๋ฒ„๊ทธ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•ฉ๋‹ˆ๋‹ค [11, 14]. - **Learning Path:** ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ์ ์ธ `try/catch` ๋ช…๋ นํ˜• ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๋จผ์ € ์ˆ™์ง€ํ•˜๊ณ , ์ดํ›„ React์˜ ์ปดํฌ๋„ŒํŠธ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋ฅผ ๊ฒฐํ•ฉํ•œ ์„ ์–ธ์  ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ธฐ๋ฒ•์„ ํ•™์Šตํ•˜๋ฉฐ, ๋งˆ์ง€๋ง‰์œผ๋กœ ํด๋ผ์šฐ๋“œ ๋กœ๊น… ํˆด ํ†ตํ•ฉ์„ ๋ฐฐ์›๋‹ˆ๋‹ค. - **My Project Relevance:** ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์˜ ๋ณต์žก์„ฑ์— ๋งž๊ฒŒ ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๋กœ๋ถ€ํ„ฐ ์•ฑ ์ „์ฒด ํฌ๋ž˜์‹œ๋ฅผ ๋ฐฉ์ง€ํ•  ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ์˜ ๋ฐฐ์น˜ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , ๋ฏธ์ฒ˜ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•œ ํ”„๋กœ๋•์…˜ ์—๋Ÿฌ์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ์ฒด๊ณ„๋ฅผ ๋„์ž…ํ•˜๋Š” ๋ฐ ์ง์ ‘์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### Adjacent Topics - [[State Management]] - ํ™•์žฅ ๋ฐฉํ–ฅ: Redux, Zustand ๋“ฑ์˜ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ ๋‚ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ํŽ˜์นญ ์—๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ ์ •๊ทœํ™”(Normalization) ๊ณผ์ •์˜ ์˜ˆ์™ธ๊ฐ€ UI ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ์™€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋ฉฐ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ํ™•์žฅํ•˜์—ฌ ์—ฐ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --- *Last updated: 2026-04-30*