Skip to content

[#918] admin 에러 경계 — AdminAppShell을 유지 #1057

Description

@thxforall

Parent

#918 — 🗺️ [wayfinder] Error page 준수 (결정 D4·D7 / 리스크 R5)

What to build

admin 트리는 shell보다 상태가 나쁘다. admin 페이지가 throw하거나 notFound()를 부르면 루트 경계로 튀어 AdminAppShell 사이드바가 사라지는데, ConditionalNav/admin 경로에서 자기억제하기 때문에 사이드바도 레거시 nav도 없는 완전 백지가 된다. 운영자가 에러 하나로 아무 데도 못 가는 상태에 빠진다.

admin 세그먼트에 에러 경계와 not-found 경계를 두어 AdminAppShell 사이드바가 유지되게 한다. (shell)과 같은 패턴·같은 shared/ErrorState·EmptyState 조합을 쓴다.

admin은 내부 도구이므로 i18n 대상이 아니다 — 현 admin의 영문 하드코딩 관행을 따른다.

admin은 shared 컴포넌트를 쓸 수 있는 자연스러운 첫 지렛대이기도 하다. 다만 기존 AdminEmptyState·CatalogEmptyState·profile EmptyState 3계열을 shared로 수렴시키는 작업은 이번 스코프가 아니다(별도 티켓).

Acceptance criteria

  • admin 페이지가 throw했을 때 AdminAppShell 사이드바가 유지된 채 에러가 렌더된다 — 실제 throw로 재현 확인
  • admin 라우트에서 notFound()가 호출됐을 때도 사이드바가 유지된다
  • 에러 화면에서 재시도와 admin 홈 이동이 가능하다
  • shared/ErrorState/EmptyState 조합으로 만든다 (하드코딩 hex 0)
  • 500 경계가 Sentry로 보고한다
  • R5 검증: AdminLayout은 세션 조회를 try/catch로 감싸 인증 실패 시 chrome 없이 children만 렌더하는 기존 동작이 있다. 새 경계가 이와 중첩되어 인증 실패가 에러 화면으로 새 나가지 않는지 확인 — 비로그인·비-admin 세션으로 /admin/* 접근 시 기존 /admin/login 리다이렉트 동작이 그대로여야 한다
  • /admin/login 자체는 여전히 chrome 없이 뜬다 (리다이렉트 루프 방지 로직 회귀 금지)

Blocked by

권장: #1056((shell) 경계) 이후에 착수. 거기서 R1(@modal parallel route 회귀)이 먼저 드러나며, 해소책이 필요했다면 이 슬라이스에도 같은 처리가 필요하다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bump:patchBug fixes / internal refactorfrontend프론트엔드ready-for-agentFully specified, ready for an AFK agent

    Type

    No type

    Projects

    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions