2. 디자인 의도와 빈자리
Figma 화면은 한 시점의 표본입니다. UX 메모와 GUI 화면이 어긋나는 곳은 구현 전에 묻고, 그려지지 않은 상태는 프로젝트 기본 컴포넌트로 채웁니다. 프레임 폭과 샘플 문구는 실제 데이터와 화면 폭이 달라질 수 있는 표본으로 읽고, 아이콘과 표시가 암시하는 동작을 구현합니다.
2.1 UX 메모와 GUI 화면이 어긋나면 구현 전에 질문합니다
어긋난 두 디자인 중 하나를 말없이 골라 구현했다가 되돌리는 비용을 막습니다.
UX 메모와 GUI 화면은 따로 고쳐지므로 한쪽만 최신인 일이 흔합니다. 메타데이터 한 번에 메모와 화면이 함께 오므로, 어긋난 지점을 찾아 구현 전에 묻습니다.
| 어긋남 | 처리 |
|---|---|
| 메모의 조건과 화면이 다름. 정렬 기준, 노출 개수, 노출 기간 | 두 노드 id와 내용을 나란히 적어 질문합니다 |
| 이력 표의 최근 요청이 화면에 반영되지 않음 | 요청을 최신으로 보고 질문에 적습니다 |
| 위계나 순서가 다름. 섹션 순서, 필드 순서, 필수 표시 | 질문합니다 |
| 문구만 다름 | GUI 화면을 따르고 보고의 출처 항목에 적습니다 |
질문은 한 번에 모아 구현 전에 합니다. 답을 기다릴 수 없으면 날짜가 적힌 가장 최근 이력 항목을 따르고, 이력이 없으면 GUI 화면을 따릅니다. 고른 쪽과 근거는 보고의 질문 목록에 남깁니다. 두 파일을 합친 새 디자인을 만들지 않습니다.
메모와 다른 화면을 말없이 따라 구현합니다.
구현 완료 — 상품 목록
정렬 상품명 가나다순. 화면 12:341의 정렬 화살표를 따름
두 출처를 나란히 적어 구현 전에 묻습니다.
확인 필요 — 상품 목록
정렬 메모 12:395 최초 진입 시 등록일 최신순
화면 12:341 상품명 컬럼에 정렬 화살표가 켜져 있음
어느 쪽을 따를까요? 답이 없으면 GUI 화면을 따릅니다(정렬 이력 없음)
2.2 그려지지 않은 상태는 프로젝트 기본 컴포넌트로 채우고 보고합니다
디자인에 없는 로딩, 빈 목록, 오류 상태가 흰 화면이나 화면마다 다른 모양으로 남지 않습니다.
Figma 화면은 대개 데이터가 가득 찬 한 순간만 그립니다. 그려지지 않은 상태는 프로젝트에 이미 있는 컴포넌트로 채우고, 채웠다는 사실을 보고에 적습니다.
| 상태 | 채우는 것 |
|---|---|
| 로딩 | 프로젝트의 로딩 컴포넌트나 스켈레톤. 경계의 자리는 React 규칙 7.1가 정합니다 |
| 빈 목록 | 프로젝트의 빈 상태 표시와 고정 문구 |
| 오류 | 프로젝트의 오류 경계와 오류 표시 컴포넌트 |
| 비활성, 진행 중 | 컴포넌트가 가진 disabled, 진행 표시 |
| 긴 문구, 큰 숫자 | 칸 폭 처리는 규칙 2.3가 정합니다 |
숨긴 레이어에 그 상태가 있으면 규칙 1.5에 따라 그 모양을 먼저 씁니다. 빈 상태 문구처럼 글자가 필요한데 디자인에 없으면 가정한 문구로 구현하고 질문 목록에 올립니다.
디자인에 없는 로딩 모양을 화면에서 새로 만듭니다.
<Suspense
fallback={
<div className="pg_products__loading">
<img src={loadingGif} />
<p>불러오는 중</p>
</div>
}
>
<PgProductTableSection />
</Suspense>
프로젝트의 로딩 컴포넌트를 경계의 대체 화면으로 씁니다.
<Suspense fallback={<UiSpinner />}>
<PgProductTableSection />
</Suspense>
채운 상태를 보고에 적습니다.
디자인 없음 — 상품 목록
로딩 UiSpinner로 채움
빈 목록 "등록된 상품이 없습니다" 가정, 확인 필요
오류 화면 오류 경계의 기본 표시
2.3 프레임 폭, 고정 크기, 샘플 문구는 표본으로 읽습니다
한 기기 폭과 샘플 데이터로 그린 치수가 다른 폭과 실제 데이터에서 넘치거나 비어 보이지 않습니다.
Figma 프레임은 한 기기 폭에서 샘플 데이터로 그린 한 장입니다. 치수에서는 의도만 읽고, 크기는 내용과 부모 폭이 정하게 둡니다.
| Figma 값 | 코드에서 읽는 뜻 |
|---|---|
| 화면 프레임 폭. 1920, 1440 | 기준 폭 하나입니다. 레이아웃은 부모 폭을 따라갑니다 |
auto layout 없는 고정 width | 최소 폭이나 비율의 후보입니다. 내용이 정하는 크기를 먼저 씁니다 |
고정 height | 대개 샘플 줄 수의 결과입니다. 내용이 높이를 정하게 둡니다 |
절대 좌표 x, y | 배치 순서를 읽는 단서입니다. position: absolute로 옮기지 않습니다 |
| 샘플 문구, 숫자 | 실제 값은 이보다 길 수 있습니다. 긴 값의 말줄임과 줄바꿈을 정합니다 |
긴 값의 처리가 Figma에 없으면 한 줄 말줄임과 전체 값 툴팁을 기본으로 하고 보고에 적습니다.
화면 폭에 따라 배치가 바뀌어야 하면 CSS 규칙 6.4에 따라
브레이크포인트보다 고유 크기와 grid, flex를 먼저 씁니다.
샘플 문구에 맞춘 칸 폭과 높이를 그대로 옮깁니다.
.pg_products__nameCell {
width: 270px;
height: 54px;
}
최소 폭만 두고 긴 이름은 한 줄로 줄입니다.
.pg_products__nameCell {
min-width: 12rem;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
함께 보기
2.4 정렬 아이콘, 펼침 화살표처럼 동작을 암시하는 표시는 동작으로 구현합니다
동작 표시를 그림으로만 옮겨 눌러도 반응 없는 화면을 만들지 않습니다.
Figma 화면은 정지 화면이라 동작은 표시로만 남습니다. 표시가 암시하는 동작은 컴포넌트가 이미 가진 프롭으로 켜고, 목적지나 조건을 모르면 질문합니다.
| 표시 | 구현 |
|---|---|
| 컬럼 헤더의 정렬 아이콘 | 그 컬럼만 정렬합니다. 아이콘이 hidden인 컬럼은 정렬하지 않습니다 |
| 펼침 화살표 | 접기, 펼치기 상태입니다 |
| 정보 아이콘 | 툴팁입니다. 본문은 메모나 숨긴 툴팁 레이어에서 찾습니다 |
| 링크 색 문구, 밑줄 | 이동입니다. 목적지를 모르면 질문합니다 |
| 호버, 선택 모양이 그려진 행 | 누르면 상세로 이동하거나 선택합니다 |
누르는 요소의 이름은 React 규칙 11.1을 따릅니다.
정렬 아이콘을 컬럼 이름 옆 그림으로만 옮깁니다.
/**
* 상품 표의 컬럼 정의
*/
const productColumns = [
{key: "name", label: "상품명"},
{key: "price", label: <span>판매가 <img src={sortIcon} /></span>},
];
정렬 아이콘이 있는 컬럼에 표의 정렬 프롭을 켭니다.
/**
* 상품 표의 컬럼 정의
*/
const productColumns = [
{key: "name", label: "상품명"},
{key: "price", label: "판매가", sortable: true},
];