표현 밀도 및 빈 상태 통합
ADR-260 표현 밀도 및 빈 상태 통합
1. Metadata
- ADR ID: ADR-260
- Status: draft
- Date: 2026-03-09
- Owner: YSY
2. Domain Decision
3. Product Decision
- 빈 상태 분류(반경/필터/권한/오류)는 제품 정책과 동일한 기준을 사용한다.
- 앱 최초 실행의 빈 상태는
권한 미허용, 오프라인, 초기 데이터 없음을 분리해 처리한다.
4. UX Decision
- 시간/수량/행동 CTA를 우선순위가 드러나는 밀도로 배치한다.
- 강조 요소는 임박/마감/즉시행동 신호에 한정하고 과도한 장식/배너를 지양한다.
- 빈 상태는 원인별(반경/필터/권한/오류)로 분기하고 다음 행동을 즉시 제시한다.
- 빈 상태/오류 상태의 메시지와 CTA는 도메인 실패 코드 UX 정책과 일치시킨다.
- 최초 실행에서 권한 미허용/오프라인/데이터 없음은 서로 다른 메시지와 CTA를 제공한다.
5. Tech Decision
- 상태 분기 조건은 클라이언트 임의 판단이 아니라 서버 응답 코드 기반으로 처리한다.
- 빈 상태 이유 코드는
permission|offline|no_data|policy|system 표준값으로 관리한다.
6. Ops Decision
- 빈 상태/오류 상태 전환 비율을 추적해 UX 품질 개선 루프에 반영한다.
7. Implementation Contract (Optional)
7.1 API Contract
- 목록/탐색 응답이 비어 있을 때
empty_state_reason을 함께 반환한다. - 권한/네트워크/정책 오류는 일반 빈 목록과 구분 가능한 코드로 반환한다.
7.2 Data Contract
- 빈 상태 이유는
permission|offline|no_data|policy|system만 허용한다. - 클라이언트는 이유 코드 기반으로 UI를 분기한다.
7.3 Error/Observability Contract
- 빈 상태 전환 이벤트에
reason_code, screen_id, user_action을 기록한다. unknown 이유 코드는 모니터링 경고 대상으로 처리한다.
7.4 Test/Acceptance Contract
- 최초 실행 권한 거부/오프라인/데이터 없음 케이스가 서로 다른 메시지와 CTA로 노출되어야 한다.
- 동일 이유 코드에서 앱/웹 표현이 정책 범위 내에서 일관되어야 한다.
8. Validation