표현 밀도 및 빈 상태 통합

표현 밀도 및 빈 상태 통합

ADR-260 표현 밀도 및 빈 상태 통합

1. Metadata

  • ADR ID: ADR-260
  • Status: draft
  • Date: 2026-03-09
  • Owner: YSY

2. Domain Decision

  • 해당 없음

3. Product Decision

  1. 빈 상태 분류(반경/필터/권한/오류)는 제품 정책과 동일한 기준을 사용한다.
  2. 앱 최초 실행의 빈 상태는 권한 미허용, 오프라인, 초기 데이터 없음을 분리해 처리한다.

4. UX Decision

  1. 시간/수량/행동 CTA를 우선순위가 드러나는 밀도로 배치한다.
  2. 강조 요소는 임박/마감/즉시행동 신호에 한정하고 과도한 장식/배너를 지양한다.
  3. 빈 상태는 원인별(반경/필터/권한/오류)로 분기하고 다음 행동을 즉시 제시한다.
  4. 빈 상태/오류 상태의 메시지와 CTA는 도메인 실패 코드 UX 정책과 일치시킨다.
  5. 최초 실행에서 권한 미허용/오프라인/데이터 없음은 서로 다른 메시지와 CTA를 제공한다.

5. Tech Decision

  1. 상태 분기 조건은 클라이언트 임의 판단이 아니라 서버 응답 코드 기반으로 처리한다.
  2. 빈 상태 이유 코드는 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

  • Domain/Product/UX/Tech/Ops 결정이 충돌하지 않는다.
  • 구현 기준은 SPEC과 정합성을 유지한다.
  • 운영 절차는 RUNBOOK으로 연결된다.