Error Handling
Runtime Error Case
API μλ²λ‘ μΌμμ μΌλ‘ λ¬Έμ κ° λ°μνλ€λ©΄ μ€ν¬λ¦½νΈ μλ¬λ‘ μΈν΄ νμ΄μ§ νμκ° μλλ λ¬Έμ λ°μ
try & catch λ‘ κ°μΈλ μμ νμ§ μλ€.
request abort
μ λ°μλλ errorλAbortError
, DOMExceptionμ΄λ―λ‘ cause μμ±μ΄ μλ€.DOMException errorλ μΌλ°μ μΈ νμ μλ¬κ° μλκΈ° λλ¬Έμ μλ¬κ° μΌμ΄λ μμ±(
error.cause
)μ΄ μμ΄ μ€ν¬λ¦½νΈ μλ¬λ‘ μΈν΄ νμ΄μ§ νμκ° μλ¨
JSON.stringify()λ₯Ό μ¬μ©ν λ dataκ° Serializable νμ§ μμ κ²½μ° (μ€λΈμ νΈκ° μνμ°Έμ‘°κ° λλ κ²½μ°) νμ μλ¬ λ°μμΌλ‘ νμ΄μ§ νμ μλ¨
μ μ΄ν μ μλ μλ¬
μλ¬λ μν©μ λ°λΌ κ°κ° λ€λ₯΄κ² λ°μνλ©° λͺ¨λ μΌμ΄μ€λ₯Ό μμ ν μ μ΄νλ κ²μ μ΄λ ΅λ€.
μ μ΄ν μ μλ λΆλΆμμ UI Blockingμ λ°μμν€λκ²μ΄ λ¬Έμ
μ μ΄ν μ μλ λΆλΆμμ μλ¬κ° λ°μν κ²½μ°, ν΄λΉ λΆλΆμ κ°μΈ μλ¬κ° μ νλμ΄ νμ΄μ§κ° μ€λ¨λλ κ²μ λ°©μ§νλ κ²μ΄ μ€μ
Error Boundary
UI μΌλΆλΆμ μ€ν¬λ¦½νΈ μλ¬κ° μ 체 μ ν리μΌμ΄μ μ μ€λ¨ν΄μλ μλλ€.
μ ν리μΌμ΄μ μ μ²΄κ° μ€λ¨λλκ²μ λ°©μ§νκΈ° μν΄ React v16μμ Error BoundaryλΌλ μλ‘μ΄ κ°λ μ΄ λμ λ¨
React Component tree νμ λ΄λΆμ μλ°μ€ν¬λ¦½νΈ errorλ₯Ό catchνλ μ»΄ν¬λνΈ
λ¬Έμ κ° λ°μν λΆλΆμ λν΄ falback UIλ₯Ό μ 곡νλ€.
νΉμ§
ErrorBoundary μμ μ»΄ν¬λνΈμμ μλ¬κ° λ°μλ κ²½μ° κ°μ₯ μΈμ ν μμ ErrorBoundaryμ μ 곡λ Fallback UIλ₯Ό λ λλ§
ErrorBoundaryλ
componentDidCatch
λΌμ΄νμ¬μ΄ν΄ λ©μλλ₯Ό μ¬μ©νμ¬ μλ¬λ₯Ό μ²λ¦¬νλ€.ν΄λΉ λ©μλλ Class Componentμμλ§ μ¬μ©μ΄ κ°λ₯νκΈ° λλ¬Έμ ErrorBoundary μ»΄ν¬λνΈλ Classλ‘ λ§λ€μ΄μ§λ€.
ErrorBoundaryλ₯Ό ꡬνν λ μ€λ₯μ λν μλ΅μΌλ‘ μνλ₯Ό μ λ°μ΄νΈνκ³ μ¬μ©μμκ² μ€λ₯ λ©μμ§λ₯Ό νμν μ μλ
Static getDerivedStateFromError
,componentDidCatch method
μ΄ κ΅¬νλμ΄μΌ νλ€.
getDerivedStateFromError()
errorλ₯Ό λ§€κ°λ³μλ‘ κ°±μ λ stateλ₯Ό λ°ννλ€.
render stepμμ νΈμΆ (VDOMμ΄ μμ±λκ³ μ΄μ VDOMκ³Ό λΉκ΅νλ λ¨κ³μμ νΈμΆλ¨)
VDOM ꡬμ±μ΄ κΉ¨μ§λ©΄ μλκΈ° λλ¬Έμ λ΄λΆμμ μ¬μ΄λμ΄ννΈκ° λ°μ κ°λ₯ν μμ μ ν΄μ μλ¨
fallback UIλ₯Ό λ λλ§ν μ§ μ¬λΆλ₯Ό κ²°μ νλ μμ μΌλ‘μ μλ¬ μνλ₯Ό μ λ°μ΄νΈνλ μ½λλ§ μμ±
componentDidCatch()
commit stepμμ νΈμΆ (VDOM λ³κ²½μ¬νμ μ€μ DOMμ μ μ©νλ λ¨κ³μμ νΈμΆλ¨)
μ¬μ΄λμ΄ννΈκ° λ°μν΄λ 무κ΄
μλ¬ μ 보λ₯Ό λ¨κΈΈ λ μ¬μ©νλ€. (μλ¬ λ‘κΉ )
error -> μλ¬μ λν μ 보
info -> μ΄λ€ μ»΄ν¬λνΈκ° μλ¬λ₯Ό λ°μμμΌ°λμ§μ λν μ 보 (componentStack)
ErrorBoundaryκ° λ€λ£¨μ§ μλ Error
Async λμλ€ (Event Handler, setTimeout, rAF)
μ¬μ©μ μΈν°λ μ λλ νΉμ μ΄λ²€νΈλ‘ λ λλ μ΄νμ λ°μλκΈ° λλ¬Έμ ErrorBoundaryκ° catchνμ§ λͺ»νλ€.
μ¦, λ λλ§ λμ€μ μΌμ΄λ Errorλ§ catch κ°λ₯
unhandledrejection
μ΄λ²€νΈλ₯Ό ν΅ν΄ νμ μ»΄ν¬λνΈμ λΉλκΈ° μλ¬λ₯Ό μμ μ»΄ν¬λνΈμμ μ‘μλΌ μ μλ€.promise.rejectκ° λ°μνλ©΄ μ΄λ²€νΈ λ°μλ¨
ServerSide Rendering
ErrorBoundary λ΄λΆ μλ¬
try-catchλ‘ μ²λ¦¬λ μλ¬
react-Error-Boundary
μ§μ ErrorBoundaryλ₯Ό μ μνμ§ μκ³ μμ©νλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©
fallbackRender()
-> propsμΌλ‘ μλ¬μ λ°λ₯Έ fallback UI κ΅¬μ± κ°λ₯
useErrorBoundary() hook
-λΉλκΈ° μ½λ μ€ν μ΄νμ λ°μνλ μλ¬λ₯Ό λμνκΈ° μν showBoundary() λ₯Ό μ 곡
fallback μ»΄ν¬λνΈ λ΄μμ 리λ λλ§μ λ°μμν€κΈ° μν resetBoundary()λ₯Ό μ 곡
withErrorBoundary() HOC μ»΄ν¬λνΈ μ 곡
Sentry
μ½λ κ΄λ ¨ λ¬Έμ λ₯Ό μλ³νκ³ μμ νλλ° λμμ μ£Όλ μννΈμ¨μ΄ λͺ¨λν°λ§ λꡬ
λ°νμ λ¨κ³μ μλ¬λ₯Ό μμ§
μλ¬κ° λ°μν νκ²½μ λ‘κ·Έλ₯Ό μ§μ νμΈνλ κ²μ λΆκ°λ₯νκ³ μλ¬νκ²½μ μ¬νμ΄ λΆκ°λ₯νκΈ° λλ¬Έμ μλ¬λ₯Ό μμ§νλκ²μ΄ μ€μνλ€.
ν΄λΌμ΄μΈνΈ μλ¬λ₯Ό μμ§νμ¬ μ¬λμ μ°λνμ¬ μλ¦Ό μ 곡
μμ€μ½λ 컨ν μ€νΈμ λλΆμ΄ Stack trace μ 곡
Commit μ 보 λ° Stack trace κΈ°λ°μΌλ‘ μμ¬μ€λ¬μ΄ commit λ° ν λΉμ μ μ
Sentry κΈ°λ₯
Stack trace
μ 곡λ SourceMap κΈ°λ° Stack treceλ‘ μλ¬ νκ²½ νμ κ°λ₯
μ¬λ¬ μλ¬λ₯Ό κ·Έλ£Ήννμ¬ νλμ μ΄μλ‘ μ μ
μ΄λ²€νΈκ° λ°μν μ½λκ° μ΄λμμ μλ¬λ₯Ό λ°μ μμΌ°λμ§ νμΈ κ°λ₯
Breadcrumb
Error Event λ°μκΉμ§μ κΈ°λ‘κ³Ό νμλΌμΈ μ 곡
HTTP Request, Console.log, Server log, DOM Event λ±μ΄ ν¬ν¨λλ€.
μ΄λ€ λμλ€λ‘ μ¬μ©μκ° μλ¬κ° λ°μνλμ§ μ΄μ λ₯Ό λͺ ννκ² νμ νκ³ ν΄λΉ 컨ν μ€λ₯Ό μ΄ν΄ν¨μΌλ‘μ¨ μλ¬λ₯Ό μ¬ννκΈ° μ©μ΄ν΄μ§λ€.
Session Replay
μ¬μ©μ μΈμ μ λΉλμ€μ²λΌ μ¬ν
μ€λ₯/μ±λ₯ λ¬Έμ λ°μ μ /ν μν© νμ
λ¬Έμ μ λν μ¬μΈ΅μ μΈ λλ²κΉ , λ¬Έμ λ₯Ό μ¬ννκ³ λ λΉ λ₯΄κ² ν΄κ²° κ°λ₯
UI μ΄μμ κ²½μ° μ 곡
Alert
μ½λμ λ¬Έμ / μ¬μ©μμκ² λ―ΈμΉλ μν₯μ λν μ€μκ°μ μΈ κ°μμ± μ 곡
μ§μ ν κ·μΉμ μν΄ λ°μλλ alert
alert λͺ©λ‘ νν°λ§, alertμ λν λΉνμ±ν/mute κΈ°λ₯, notification μ 곡
μ€μΉ
λΆκ° μ¬μ© λ°©λ²
Issue ν¨λ
μ ν리μΌμ΄μ μ€λ₯, μ±λ₯λ¬Έμ μ λν μ 보 νμ
νκ²½μ λ°λ₯Έ νν°λ§ κ°λ₯
νλμ μ΄μλ μ μ¬ν μμΈμΌλ‘ κ·Έλ£Ήνλ μλ¬λ€
μ΄μμ λ°μ λΉλ, μΆμ΄, μ¬μ©μλ³ μν₯λ νμ κ°λ₯
Issue μν
New: μμ±νμ§ 7μΌ μ΄λ΄μΈ μ΄μ
Ongoing: 7μΌ μ΄μ λμκ±°λ, μλμΌλ‘ reviewed μ²λ¦¬λ μ΄μ
Escalating: μ€λλ μ΄μ μ€ λΉλκ° κΈκ²©ν λμ΄λ μ΄μ
Regressed: resolved λμλ€κ° λ€μ λνλ μ΄μ
Archived: 보κ΄μ²λ¦¬λ μ΄μ
Resolved: ν΄κ²° μ²λ¦¬λ μ΄μ
Issue ν
Unresolved: κ²ν κ° νμν, μμ§ ν΄κ²°λμ§ μμ λͺ¨λ μ΄μ μ΄μ§ν©
For Review: κ²ν λͺ©λ‘, κ²ν κ° νμν μ΄μ, ν΄κ²°λμ§ μμ μ΄μλ€μ νμ μ§ν©
Regressed: ν΄κ²°λ μ΄μ, ν΄κ²°λμ΄μκ° λ€μ λ°μν μ΄μ
Escalating: μ΄μ μ archived λ¬λ μ΄μ μ€ μμλλ μ΄μ λΉλκ° μ΄κ³Όλ μ΄μ
Archived: ν΄κ²° μ²λ¦¬λ μ΄μλ€
Issue νν°
By Project
By Environment
By Time
Custom filter
Issue μμΈ ν¨λ
μ΄μ μΆμ²
μν₯ λ²μ
κ·Έλ£Ήνλ μ΄μμ λν μμ½
24μκ°/30μΌκ°μ λΉλ
κ΄λ ¨ νκ·Έ μ 보
Stack Trace
Breadcrumbs
Session Replay μ€μ
Sentry.init() λ΄μ κΈ°λ‘νλ μ€μ κ°
μλ μ€μ μ, sentry.client.config.ts/js μ μ μ
Session Replay ν¨λ
νμλΌμΈ
νλ μ΄μ΄
Breadcrumbs
κΈ°ν μ»΄ν¬λνΈ ν¨λλ‘ κ΅¬λΆ
νμ΄μ§ μ‘μ
리νλ μ΄ κ³΅μ
μμ
Last updated