Next.js 앱 라우터의 에러 핸들링

Frontend/Next.js

error.tsx

App Router에서는 error.tsx 파일을 사용하여 특정 경로 및 그 하위 경로에서 발생한 에러에 대한 UI를 설정할 수 있다.

기본 사용법

"use client";

export default function Error() {
  return (
    <div>
      <h3>오류가 발생했습니다.</h3>
    </div>
  );
};
  • "use client" 지시어를 통해 반드시 클라이언트 컴포넌트로 설정해야 한다.
  • 서버와 클라이언트 양쪽에서 발생할 수 있는 모든 에러에 대응할 수 있다.

 

Props 활용

Next.js는 error와 reset props를 에러 컴포넌트에 자동으로 전달한다.

"use client";

import { useEffect } from "react";

export default function Error({
  error,
  reset,
}: {
  error: Error;
  reset: () => void;
}) {
  useEffect(() => {
    console.error(error.message);
  }, [error]);

  return (
    <div>
      <h3>오류가 발생했습니다.</h3>
      <button onClick={() => reset()}>다시 시도</button>
    </div>
  );
};
  • error: 발생한 오류 정보
  • reset: 에러 상태를 초기화하고 컴포넌트들을 다시 렌더링하는 함수

 

서버 컴포넌트 재실행

reset 함수만으로는 서버 관련 에러를 복구할 수 없다.

서버 컴포넌트를 재실행하려면 다음과 같은 방법을 사용할 수 있다

1. 브라우저 새로고침 (권장하지 않음)

<button onClick={() => window.location.reload()}>다시 시도</button>
  • 모든 상태와 클라이언트 데이터가 초기화되므로 주의가 필요하다.

2. useRouter의 refresh 메서드 활용

import { startTransition, useEffect } from "react";

// ...

  <button
    onClick={() => {
      // 함수 하나는 인수로받아서, 해당 함수 내부의 코드를 동기적으로 실행
      startTransition(() => {
        router.refresh(); // 서버 컴포넌트 재실행
        reset(); // 에러 상태 초기화 및 재렌더링
      });
    }}
  >
    다시 시도
  </button>
  • router.refresh()는 현재 페이지의 서버 컴포넌트만 재실행한다.
  • startTransition을 사용하여 비동기 작업을 처리한다.

 

주의사항

  • error.tsx의 영향 범위는 해당 파일이 위치한 디렉토리와 그 하위 경로이다.
  • 하위 경로에 대해 다른 에러 처리를 원할 경우, 해당 경로에 별도의 error.tsx를 생성하면 된다.

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

Next.js 앱 라우터 고급 라우팅 패턴  (0) 2025.11.13
서버 액션 (Server Action)  (0) 2025.11.13
스트리밍 (Streaming)  (0) 2025.11.13
라우트 세그먼트 옵션과 클라이언트 라우터 캐시  (0) 2025.11.13
풀 라우트 캐시 (Full Route Cache)  (0) 2025.11.13
'Frontend/Next.js' 카테고리의 다른 글
  • Next.js 앱 라우터 고급 라우팅 패턴
  • 서버 액션 (Server Action)
  • 스트리밍 (Streaming)
  • 라우트 세그먼트 옵션과 클라이언트 라우터 캐시
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자료구조
    함수 타입
    algorithm
    Pages Router
    react
    CS
    트러블 슈팅
    C
    클래스
    제네릭
    Next.js
    배열
    generic
    Spa
    타입 좁히기
    App Router
    인터페이스
    페이지 라우터
    memory
    emotion diary
    typescript
    Trouble Shooting
    useState
    cs50
    javascript
    알고리즘
    ai 감성 일기장
    앱 라우터
    바닐라 자바스크립트
    문자열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
Next.js 앱 라우터의 에러 핸들링
상단으로

티스토리툴바