Error Boundary는 React component tree 일부가 에러로 전체 앱을 깨뜨리지 않도록 막는 장치입니다. 하위 component가 render 중 에러를 throw하면 boundary가 이를 잡고 fallback UI를 보여줄 수 있습니다. 보통 class component로 구현하고, getDerivedStateFromError로 fallback 상태를 만들고 componentDidCatch로 logging을 할 수 있습니다.
다만 event handler, setTimeout, Promise callback 같은 비동기 영역의 에러는 error boundary가 자동으로 잡지 않습니다. 그런 에러는 직접 try/catch나 상태로 처리해야 합니다.
꼬리질문
조금 더 깊게 물어본다면
답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.
event handler 에러는 왜 자동으로 못 잡나요?
Error Boundary는 React가 rendering 중 component tree를 처리할 때 발생한 에러를 대상으로 합니다. event handler는 이미 화면이 렌더링된 뒤 사용자의 이벤트로 실행되는 코드입니다.
그래서 handler 내부 에러는 직접 try/catch하거나 error state로 boundary에 전달하는 식의 처리가 필요합니다.
함수 컴포넌트로 Error Boundary를 만들 수 있나요?
React의 기본 Error Boundary API는 class lifecycle을 사용합니다. 그래서 직접 구현은 class component가 필요합니다.
다만 라이브러리를 사용하면 hook처럼 편하게 쓸 수 있는 추상화를 제공하기도 합니다.
Error Boundary는 에러를 복구하나요?
에러가 난 하위 tree 대신 fallback UI를 보여줄 뿐, 원인을 자동으로 해결하지는 않습니다. 사용자가 retry를 누르거나 key를 바꿔 다시 mount하는 흐름을 만들 수는 있습니다.
logging과 사용자 복구 동선을 함께 설계해야 합니다.
어디에 배치하는 것이 좋나요?
전체 앱이 완전히 깨지지 않게 root 근처에 둘 수 있고, 독립적인 feature나 widget 단위로 더 잘게 둘 수도 있습니다. 너무 넓으면 fallback 범위가 커지고, 너무 잘게 쪼개면 관리가 복잡해집니다.