FE develop/Next.js
Next.js - (10) error 페이지로 에러 상태 처리하기
hoj0806
2025. 5. 2. 12:50
이번 포스트에서는 비동기 데이터를 가져오는 중 오류가 발생했을 때, 사용자에게 에러 페이지를 보여주는 방법에 대해 알아보겠습니다.
✅ 기본 개념
Next.js에서는 error.js라는 파일을 사용하여 각 라우트별 에러 UI를 정의할 수 있습니다.
이 파일은 해당 라우트에서 에러가 발생했을 때 자동으로 렌더링되며, loading.js와 마찬가지로 페이지 폴더 안에 위치해야 합니다.
✅ 사용 예시
// app/meals/error.js
"use client"; // 반드시 클라이언트 컴포넌트여야 합니다!
export default function Error({ error }) {
return (
<main className="error">
<h1>An error occurred!</h1>
<p>{error.message}</p>
</main>
);
}
✅ 주요 포인트 정리
- error.js는 반드시 클라이언트 컴포넌트여야 하므로 "use client" 지시문을 파일 상단에 작성해야 합니다.
- 함수의 인자로 error 객체가 전달되며, 해당 객체의 메시지를 통해 에러 내용을 표시할 수 있습니다.
- 파일 위치는 loading.js와 동일하게, 에러 처리를 원하는 라우트 폴더 안에 위치해야 합니다.
- 예: /app/meals/error.js → /meals 경로에서 에러 발생 시 표시됨
✅ 동작 방식
error.js는 다음과 같은 상황에서 자동으로 호출됩니다:
- async 함수에서 throw new Error()를 호출한 경우
- 서버/클라이언트 컴포넌트 내 비동기 처리 중 오류가 발생한 경우
- Suspense로 감싼 컴포넌트 내부에서 비동기 오류가 발생한 경우
✅ 예시 흐름
- getMeals() 함수에서 네트워크 요청 중 문제가 발생
- MealsPage 또는 Meals 컴포넌트 내부에서 throw
- Next.js가 /meals/error.js를 찾아 렌더링
- 사용자에게 커스텀 에러 메시지 표시
🔍 React의 Error Boundary는 클라이언트에서만 동작
Next.js의 error.js는 React의 Error Boundary 기능을 기반으로 동작합니다. 그런데 이 기능은 다음과 같은 특징을 가집니다:
- Error Boundary는 오직 클라이언트 렌더링에서만 동작합니다.
- 서버 컴포넌트에서는 에러가 발생하면 React가 전체 컴포넌트를 렌더링하지 않고 곧바로 실패 처리합니다.
- 따라서 에러 처리를 위해 사용하는 error.js는 반드시 클라이언트 컴포넌트여야만 정상 작동합니다.
📝 마무리
Next.js의 error.js는 라우트 단위로 에러 처리를 할 수 있게 해주며, 사용자에게 더 친절한 피드백을 제공할 수 있는 좋은 수단입니다.
다음 포스트에서는 not-found.js를 통해 404 페이지를 처리하는 방법도 함께 알아보겠습니다!