[Next.js]초기 단계 프로젝트에서 에러 핸들링은 어디까지 해야 할까?

오병훈·2025년 4월 15일
0

Next.js에서 에러 처리 전략 잡기: error.tsx vs react-error-boundary

최근 프로젝트에서 에러 처리 구조를 어떻게 잡을 것인가에 대해 고민이 많았다.
특히 Next.js (App Router) 환경에서는 error.tsx를 통한 전역 에러 처리 기능이 기본 제공되기 때문에, React의 react-error-boundary와 어떻게 조합할지 전략이 중요했다.


🤔 어떤 방식이 좋을까?

React 기반 프로젝트에서는 일반적으로 두 가지 방식이 존재한다.

구분설명사용 시점
error.tsxNext.js App Router에서 제공하는 페이지 단위 에러 처리페이지 전체가 터졌을 때
react-error-boundary컴포넌트 단위로 에러를 잡아 fallback UI를 보여줌특정 섹션만 에러날 때

🧱 현재 내가 선택한 방식

현재 프로젝트는 초기 단계이기 때문에 다음과 같은 전략을 선택했다.

✅ 전역 에러는 error.tsx로 먼저 처리하고, 후에 컴포넌트 단위에서 필요할 경우 react-error-boundary를 추가하자!

이유는?

  • 개발 초기라 구조가 복잡하지 않음
  • 전체 페이지가 깨지는 경우만 방어해도 충분
  • 나중에 기능이 많아질수록 자연스럽게 세분화 가능

✨ error.tsx 설정 예시

'use client';

import { useEffect } from 'react';

type GlobalErrorProps = {
  error: Error;
  reset: () => void;
};

export default function GlobalError({ error, reset }: GlobalErrorProps) {
  useEffect(() => {
    console.error('🚨 Global error:', error);
  }, [error]);

  return (
    <div className="flex flex-col items-center justify-center min-h-screen p-6 text-center text-gray-800 bg-white">
      <h1 className="text-2xl font-bold mb-4">⚠️ 문제가 발생했어요</h1>
      <p className="mb-6">{error.message}</p>
      <button
        onClick={() => reset()}
        className="px-4 py-2 border border-gray-300 rounded-md bg-gray-100 hover:bg-gray-200 transition"
      >
        다시 시도하기
      </button>
    </div>
  );
}

🔍 주의할 점

  • <html>, <body> 태그를 쓰면 안 됨 → hydration 에러 발생

  • reset()은 현재 페이지 상태를 초기화하고 다시 시도함


📌 결론

프로젝트 초기에는 error.tsx만으로 충분.
기능이 복잡해지고 UI가 복잡해질수록 react-error-boundary를 점진적으로 도입하자.

에러 처리도 초기부터 계획적으로 가져가야 불필요한 리팩토링 없이 유연하게 확장할 수 있다는 걸 배웠다.


🧾 참고

Next.js 공식 문서 - Handling Errors

profile
Front-End Developer

0개의 댓글