페이지 경계
라우트 단위에서 필요한 데이터와 권한을 정의하고 하위 컴포넌트로 명확히 전달한다.
페이지 계약프론트엔드 애플리케이션은 route, API client, server state, form schema, UI state가 서로 다른 변경 이유를 갖도록 나뉘어야 한다.
라우트 단위에서 필요한 데이터와 권한을 정의하고 하위 컴포넌트로 명확히 전달한다.
페이지 계약fetch 호출을 흩뿌리지 않고 요청 DTO, 응답 DTO, 오류 변환을 한곳에 둔다.
client layer서버에서 온 데이터와 입력 중인 폼 상태, 모달 상태를 서로 섞지 않는다.
state kind폼 schema와 API schema를 맞춰 입력 오류와 서버 오류를 같은 UX로 처리한다.
validationserver: userQuery.data
form: draftProfile
ui: isModalOpen
url: searchParams.get("tab")