본문 바로가기

개발/Next.js

[Next.js] Error part.2

Recovering from Errors

error.tsx에서 컴포넌트를 생성하면 reset 파라미터를 사용할 수 있습니다.

 

해당 함수는 에러가 발생했던 지점부터 다시 렌더링을 시도합니다. router의 refresh 함수와는 다시 시도 동작으로 비슷해 보이지만, 사용하는 목적이 다른 함수입니다.

 

  reset refresh
목적 에러 상태 제거 및 에러 지점부터 다시 렌더링 시도 현재 URL 기준으로 전체 서버 컴포넌트 트리 강제 요청
동작 범위 ErrorBoundary까지 layout을 포함한 현재 경로 전체
사용 방법 error.tsx 내부에서 reset 함수 useRouter().refresh()로 어디서든 사용
적합한 상황 사용자 입력 오류, 네트워크 불안정 등 일시적인 에러 서버에서 최신 데이터 패칭

 

Handling Errors in Nestes Routes

Error는 항상 가장 가까운 ErrorBoundary로 이동합니다. 그렇기 때문에 error.tsx의 위치에 따라 어떤 에러를 잡아서 보여주는가에 대한 차이가 발생합니다.

 

예를 들어 app/error.tsx와 app/some/error.tsx가 있다면 some/page.tsx에서 발생한 에러는 app/some/error.tsx에서 처리합니다.

 

Handling errors in layouts

 에러가 가장 가까운 error boundary에 걸리기 때문에 같은 계층에 있는 layout에서 에러가 발생하면 error.tsx가 동작하지 않습니다. 그렇기에 layout의 에러를 잡고 싶다면 error.tsx를 layout보다 한 계층 위에 만들어야 합니다.

 

그렇다면 최상위 app/layout의 경우 어떻게 에러를 잡을 수 있을까?

 

Handling Global Errors

루트 layout에서 발생하는 에러를 잡기 위해서 사용되는 것이 global-error.tsx 파일입니다. app 폴더 밑에 생성하여 사용할 수 있습니다.

 

기타 error.tsx와의 차이점은 두 가지입니다.

  • production mode에서만 동작한다.
  • html과 body 태그로 감싸주어야 리렌더링이 가능하다.

 

참고

https://nextjs-ko.org/docs/app/building-your-application/routing/error-handling#uncaught-exceptions

https://www.youtube.com/watch?v=b4ba60j_4o8&list=PLC3y8-rFHvwhIEc4I4YsRz5C7GOBnxSJY

'개발 > Next.js' 카테고리의 다른 글

[Next.js] Parallel Routes part.2 & Intercepting Routes  (0) 2025.06.27
[Next.js] Parallel Routes  (0) 2025.06.25
[Next.js] Navigation part.3, Template, Loading, Error  (1) 2025.06.19
[Next.js] Navigation part.2  (0) 2025.06.13
[Next.js] Navigation  (0) 2025.06.12