사용자 오류 코드와 서버 관측 맥락을 분리합니다.
운영 오류는 request id와 안정적인 code를 사용자에게 제공하고 서버 로그에는 route, release, duration과 stack을 남깁니다.
개인정보와 cookie, token을 로그에서 제거합니다.
오류 경계, Route Handler와 Server Action에서 동일한 code 정책을 사용합니다.
서버 Error message를 그대로 JSX에 출력하면 내부 정보가 노출될 수 있습니다.
로컬 프로젝트에서 확인해보세요VALIDATION과 FORBIDDEN 결과에 다른 복구 행동을 연결하세요.
async function load() {
return { ok: false, code: "UPSTREAM_TIMEOUT", requestId: "req-next-42" };
}
export default async function Page() {
const result = await load();
return (
<main>
<h1>강좌 조회</h1>
{result.ok ? (
<p>성공</p>
) : (
<section>
<p role="alert">일시적으로 조회하지 못했습니다.</p>
<small>문의 코드 {result.requestId}</small>
</section>
)}
</main>
);
}