DESIGN CONTRACT V1
도예공방 운영 관리 서비스 디자인 가이드
가정: 별도 브랜드 아이덴티티가 제공되지 않았으므로 흙과 유약에서 가져온 차분한 색을 사용하되, 공방 감성보다 현장 가독성과 빠른 처리를 우선한다. 작품 번호를 모든 운영 화면의 가장 강한 시각적 기준으로 삼고 사진, 현재 제작 단계, 선반 칸을 한 묶음으로 표시한다. 운영자 화면은 흙이 묻은 손으로도 누르기 쉬운 큰 조작 영역과 짧은 입력 흐름을 사용한다. 회원 화면은 내부 선반 정보와 작업 메모를 숨기고 사진, 쉬운 진행 설명, 예상 완성 시점을 중심으로 구성한다.
작품 번호 중심 · 현장 모바일 우선 · 사진 기반 식별 · 현재 제작 단계와 선반 칸 동시 확인 · 초벌 대기와 재벌 대기 분리 · 여러 작품 일괄 변경 · 부분 실패가 보이는 안전한 처리 · 차분한 흙과 유약 색상 · 회원용 쉬운 진행 안내 · 공방별 작업 기준 설정
- 레이아웃
- Mobile first
- 기본 글꼴
- Pretendard Variable
- 조사 출처
- 5곳
COLOR SYSTEM
컬러 시스템
각 토큰의 실제 색상과 사용 맥락의 본문 대비를 보여 줍니다. AA 기준은 4.5:1입니다.
Canvas
13.64:1 · AA전체 화면 배경. 흙의 온기를 반영하되 사진과 흰색 카드가 구분되도록 사용한다.
Surface
14.98:1 · AA카드, 표, 입력 영역, 대화상자 배경.
TextPrimary
13.64:1 · AA작품 번호, 제목, 주요 데이터와 본문 기본 글자.
TextSecondary
5.61:1 · AA보조 설명, 변경 시각, 회원 식별 정보. 작은 글자에서도 Canvas 또는 Surface 위 명도 대비를 유지한다.
Border
10.81:1 · AA카드와 표 구분선, 입력 테두리, 비활성 칸 경계.
Primary
6.74:1 · AA주요 버튼, 선택 상태, 완성 배지 텍스트, 운영자 핵심 링크.
PrimaryHover
1.51:1 · 큰 글자용주요 버튼의 hover와 pressed 상태.
PrimarySoft
12.76:1 · AA선택된 탭·필터, 완성 상태 배경, 회원 화면의 진행 강조.
DryText
6.41:1 · AA건조 배지의 텍스트와 아이콘.
DrySoft
13.20:1 · AA건조 배지 배경.
BisqueText
6.95:1 · AA초벌 대기와 초벌 완료 배지의 텍스트와 아이콘. 두 단계는 문구와 아이콘 모양을 함께 달리한다.
BisqueSoft
12.42:1 · AA초벌 대기와 초벌 완료 배지 배경.
GlazeText
5.33:1 · AA시유 배지의 텍스트와 아이콘.
GlazeSoft
13.05:1 · AA시유 배지 배경.
RefireText
6.03:1 · AA재벌 대기 배지의 텍스트와 아이콘.
RefireSoft
12.96:1 · AA재벌 대기 배지 배경.
Warning
6.19:1 · AA위치 미지정, 사진 미등록, 기간 만료, 설정 미완료 경고의 텍스트와 아이콘.
WarningSoft
13.58:1 · AA주의 배너와 경고 배지 배경.
Error
2.28:1 · 큰 글자용중복 작품 번호, 저장 실패, 접근 거부, 일괄 변경 실패와 파괴적 작업.
ErrorSoft
12.42:1 · AA오류 메시지와 실패 결과 행 배경.
Focus
2.50:1 · 큰 글자용키보드 초점 링, 현재 입력 위치, 정보성 링크. 상태 구분 색상으로 단독 사용하지 않는다.
TYPOGRAPHY
한글 타이포그래피
제목 · -0.025em
흙에서 완성까지, 한눈에
본문 · -0.01em
작품의 현재 단계와 선반 위치를 기록하고, 다음 가마에 넣을 작품을 빠르게 확인합니다.
가마 02 · 1,250°C · 8–11시간
SPACING & RADIUS
간격과 형태
8px
12px
16px
9999px
RESPONSIVE LAYOUT
그리드와 화면 전략
SRS에서 공방 현장의 모바일 웹을 우선 사용 환경으로 지정했고, 작품 번호 검색·사진 촬영·단계 변경·선반 칸 선택을 현장에서 수행한다. 기본 화면은 한 손 조작이 가능한 단일 열 카드와 하단 고정 작업 영역으로 구성한다. md 이상에서는 필터와 상세 정보를 넓히고, lg 이상에서는 단계별 작품 목록을 12열 그리드 기반 표로 전환해 다중 선택과 비교 효율을 높인다. 데스크톱에서도 모바일과 같은 기능 및 용어를 유지하며 별도 제품으로 분리하지 않는다.
모바일 · 4열
데스크톱 · 12열
- sm
- 480px
- md
- 768px
- lg
- 1024px
- xl
- 1440px
- 최대 폭
- 1280px
COMPONENTS
컴포넌트와 상태
계약 토큰을 적용한 버튼·입력·카드 견본과 구현 규칙입니다.
버튼
입력 상태
물레컵 3점
초벌 대기2번 선반 · 1칸
예상 완료 9월 18일
AppShell
operator · member · initialSetup · default · loading · accessDenied
모바일 운영자 화면은 상단 공방명과 검색 진입, 하단에 대시보드·작품·회원·더보기 내비게이션을 둔다. lg 이상에서는 왼쪽 내비게이션과 상단 검색으로 전환한다. 회원 화면은 내 작품 조회에 필요한 최소 내비게이션만 제공한다.
Button
primary · secondary · tertiary · destructive · fullWidth · default · hover · focusVisible · pressed · disabled · loading
최소 높이는 44px이며 모바일 주요 완료 버튼은 48px을 권장한다. 버튼 문구는 저장, 12점 변경, 작품 등록처럼 결과를 구체적으로 쓴다. 로딩 중 중복 제출을 막되 현재 작업 문구를 유지한다.
IconButton
default · outlined · destructive · default · hover · focusVisible · pressed · disabled
터치 영역은 최소 44×44px이다. 아이콘만 사용할 때 접근 가능한 이름을 제공하고, 삭제·닫기 외에는 가능하면 짧은 텍스트를 함께 표시한다.
WorkNumberSearch
dashboard · listHeader · detail · empty · typing · loading · matched · partialMatches · noResult · error
작품 번호 입력을 첫 초점 대상으로 제공한다. 숫자와 하이픈 입력을 지원하고, 하이픈 없이 입력해도 서버 검색 결과를 반환할 수 있게 한다. 검색 결과에는 작품 번호, 사진, 회원, 현재 제작 단계, 선반 칸을 같은 영역에 표시한다.
StageSummaryCard
건조 · 초벌 대기 · 초벌 완료 · 시유 · 재벌 대기 · 완성 · attention · default · hover · focusVisible · selected · loading
현재 제작 단계명과 작품 점수를 함께 표시하고 누르면 해당 필터가 적용된 단계별 작품 목록으로 이동한다. 초벌 대기와 재벌 대기는 인접 카드로 배치하되 서로 다른 색과 문구로 구분한다.
StageTabs
scrollable · segmented · kilnSeparated · default · selected · focusVisible · disabled
모바일에서는 가로 스크롤을 허용하되 선택 탭이 화면 안으로 자동 이동한다. 탭에는 단계명과 작품 수를 함께 표시한다. 다음 가마 후보 비교에서는 초벌 대기와 재벌 대기 두 탭만 제공한다.
FilterBar
mobileSheet · desktopInline · default · applied · loading · emptyResult
작품 번호, 회원, 현재 제작 단계, 선반, 선반 칸을 필터로 제공한다. 적용된 조건은 삭제 가능한 칩으로 남기며 목록과 상세를 오간 뒤에도 이전 필터를 복원한다.
WorkCollection
mobileCards · tabletRows · desktopTable · kilnComparison · loading · populated · empty · error · selectionMode
모바일 카드는 작품 번호, 정사각형 사진, 현재 제작 단계, 선반 칸, 회원 순서로 표시한다. lg 이상 표는 선택, 작품 번호, 사진, 현재 제작 단계, 선반 칸, 회원, 예상 완성 시점 순으로 고정한다. 표의 작품 번호와 선반 칸은 줄바꿈하지 않는다.
WorkCard
operator · member · compact · candidate · default · selected · focusVisible · missingPhoto · missingLocation · stale · disabled
운영자용은 작품 번호를 가장 크게 표시하고 회원, 현재 제작 단계, 선반 칸을 함께 보여준다. 회원용은 작품 사진, 쉬운 진행 문구, 예상 완성 시점과 완성 여부만 보여주며 선반 칸과 내부 메모를 숨긴다.
StatusBadge
건조 · 초벌 대기 · 초벌 완료 · 시유 · 재벌 대기 · 완성 · 위치 미지정 · 기간 만료 · 확인 필요 · default · compact
색상, 텍스트, 단계별 아이콘을 함께 사용한다. 초벌 대기와 초벌 완료처럼 색이 같은 배지는 문구와 아이콘으로 구분한다. 배지만으로 핵심 정보를 전달하지 않고 주변에 현재 제작 단계 레이블을 제공한다.
SelectionControl
checkbox · selectAllPage · selectAllFiltered · unchecked · checked · indeterminate · focusVisible · disabled
모바일에서 체크 영역 전체를 44px 이상으로 제공한다. 현재 화면 전체 선택과 검색 결과 전체 선택을 구분하고, 선택한 작품 수를 항상 함께 표시한다.
BulkActionBar
mobileBottom · desktopTop · review · hidden · active · submitting · partialSuccess · success · failure
하나 이상의 작품이 선택되면 고정 표시한다. 선택 작품 수, 단계 변경, 선반 칸 이동, 선택 해제를 제공한다. 모바일에서는 안전 영역을 반영하며 목록의 마지막 행을 가리지 않도록 하단 여백을 추가한다.
FormField
text · number · date · select · textarea · default · focus · filled · disabled · readOnly · error · success
레이블을 항상 표시하고 placeholder만으로 항목을 설명하지 않는다. 오류는 입력 바로 아래에 원인과 수정 방법을 표시한다. 숫자 입력은 모바일 숫자 키패드를 사용하되 단위와 허용 범위를 화면에 명시한다.
WorkNumberInput
new · correction · initialSetup · suggested · checking · available · duplicate · invalidFormat · conflict
2608-01 형식과 최대 일곱 자 조건을 입력 가까이에 표시한다. 자동 제안값은 운영자가 수정할 수 있어야 한다. 정정 화면은 이전 번호를 읽기 전용으로 보여주고 저장 전 새 번호와 변경 이력 생성을 확인한다. 월 99점 이후 규칙은 확인 필요로 처리한다.
MemberPicker
recentFirst · search · inlineCreate · empty · searching · results · selected · duplicateName · noResult · disabled
검색 결과에는 회원명과 마스킹된 식별 정보, 현재 보관 작품 수를 함께 표시한다. 동명이인은 이름만으로 선택할 수 없게 한다. 작품을 연속 등록할 때 선택 회원 유지 여부를 명확히 보여준다.
PhotoUploader
workPhoto · shelfPhoto · gallery · empty · capturing · uploading · uploaded · reordering · failed · permissionDenied
모바일에서 카메라 촬영과 앨범 선택을 모두 제공한다. 업로드 진행률, 재시도, 대표 사진을 표시한다. 사진 업로드 실패 시 입력한 나머지 정보를 잃지 않으며, 권한 확인을 거친 주소로만 이미지를 제공한다.
StageShelfPicker
stacked · bottomSheet · desktopPanel · empty · stageSelected · shelfSelected · cellSelected · unavailable · invalidCombination
현재 제작 단계 선택 후 해당 단계에 연결된 선반과 선반 칸만 보여준다. 선택 결과는 초벌 대기 2번 선반 1칸처럼 전체 경로로 확인시킨다. 사용할 수 없는 선반 칸은 숨기지 말고 비활성화 사유를 제공한다.
ShelfGrid
picker · settings · photoReference · empty · available · occupied · selected · disabled · deletionBlocked
선반 칸을 실제 배열에 가까운 격자로 보여주되 칸 번호를 항상 표시한다. 수용량은 기준이 제공된 경우에만 표시한다. 작품이 남은 선반 칸 삭제 시 이동이 필요하다는 안내와 연결 작품 목록을 제공한다.
EstimateDate
operator · member · completed · unknown · calculated · kilnDatePriority · recalculating · missingRule · completed
운영자에게는 날짜와 계산 기준을 함께 보여주고, 회원에게는 예상 완성 시점과 변경 가능성을 쉬운 문장으로 표시한다. 완성 작품은 날짜 대신 완성을 표시한다. 계산 기준이 없으면 임의 날짜를 만들지 않고 확인 필요를 표시한다.
MemberSummaryCard
list · detail · workContext · active · expired · inactive · loading · conflict
회원명, 회원권 종류, 잔여 횟수, 유효기간, 진행 중 작품 수를 표시한다. 잔여 횟수 변경은 변경 사유 입력과 전후 값 검토를 거치며 음수 저장을 막는다.
DetailHeader
work · member · settings · default · editing · staleData
작품 상세에서는 작품 번호, 현재 제작 단계, 회원명과 상태·선반 칸 변경 버튼을 첫 화면에 배치한다. 다른 사용자가 수정한 상태이면 저장을 덮어쓰지 말고 최신 내용 확인 버튼을 표시한다.
HistoryTimeline
stage · location · workNumber · membership · collapsed · expanded · loading · empty
변경 시각, 변경자, 이전 값, 새 값을 텍스트로 표시한다. 상태 색만으로 전후를 구분하지 않는다. 모바일 기본은 최근 이력 세 건이며 전체 보기를 제공한다.
ReviewDialog
bottomSheet · modal · destructive · open · submitting · success · partialSuccess · failure
일괄 변경 전 작품 수, 현재 제작 단계 분포, 새 단계, 새 선반 칸을 검토한다. 파괴적 작업은 대상 이름을 다시 표시한다. 닫은 뒤에는 호출한 요소로 키보드 초점을 되돌린다.
BulkResultSummary
success · partialSuccess · failure · collapsed · expanded
성공·실패 건수를 분리하고 실패 작품 번호와 이유를 행 단위로 제공한다. 실패가 있어도 성공 항목을 실패처럼 표시하지 않는다. 결과 목록을 닫기 전 다시 처리할 작품을 선택할 수 있게 한다.
WizardStepper
initialSetup · settings · notStarted · current · completed · incomplete · blocked
공방 작업 기준, 회원, 현재 작품, 등록 범위 확인 순서를 표시한다. 각 단계는 자동 저장하며 중단 후 이어서 진행할 수 있게 한다. 완료 표시는 필수 데이터 검사를 통과한 경우에만 적용한다.
FeedbackMessage
inline · banner · toast · info · success · warning · error
폼 오류는 inline, 화면 전체 상태는 banner, 방금 끝난 단순 작업은 toast를 사용한다. 저장 실패와 부분 실패는 자동으로 사라지는 toast만 사용하지 않는다. 보조 기술이 결과를 읽을 수 있도록 적절한 live region을 적용한다.
LoadingAndEmptyState
skeleton · empty · noSearchResult · accessDenied · networkError · visible · retrying
빈 목록과 검색 결과 없음은 구분한다. 검색 결과 없음에는 입력 번호를 유지하고 다시 검색 또는 작품 등록으로 이동하는 행동을 제공한다. 스켈레톤은 실제 카드와 표 구조를 따라 레이아웃 이동을 줄인다.
APPLICATION
업계 조사와 화면별 적용
· 제품 요구 기준으로 작품의 현재 제작 단계와 실제 선반 칸은 서로 다른 정보이며, 등록·이동·일괄 변경 화면에서 함께 확인하고 변경 이력을 각각 남겨야 한다.
· 작품 번호는 굽 바닥에 새긴 2608-01 형식을 기본으로 하며, 운영 화면의 검색 결과와 목록에서 회원명보다 먼저 보여야 한다.
· 운영자는 수업 직후 여러 작품을 등록하므로 최근 선택 회원 유지, 다음 작품 번호 제안, 모바일 사진 촬영, 저장하고 다음 등록 흐름이 필요하다.
· 월 50~150점 규모에서는 전체 통계보다 작품 번호 검색, 단계 탭, 선반 칸 필터, 체크박스 선택과 일괄 변경 진입이 먼저 보여야 한다.
· 초벌 대기와 재벌 대기는 소성 조건이 달라 같은 후보 목록에 섞지 않는다. 다음 가마 후보 비교 화면도 두 탭을 명확히 분리한다.
· 여러 작품 상태 한꺼번에 변경은 적용 전 대상 수와 변경 전후 값을 검토하고, 적용 후 성공·실패 작품 번호와 실패 이유를 나눠 보여줘야 한다.
· 대표 운영자와 보조 강사가 동시에 수정할 수 있으므로 저장 충돌은 일반 오류가 아니라 최신 내용을 비교하는 전용 상태로 표시해야 한다.
· 회원 전용 내 작품 조회는 운영자용 현재 제작 단계를 쉬운 문장으로 설명하고, 상세 선반 칸·다른 회원 작품·내부 메모는 노출하지 않는다.
· 예상 완성 시점은 운영자 화면과 회원 화면에서 같은 서버 계산 결과를 사용하고, 계산 기준이 없으면 임의 날짜 대신 확인 필요를 표시한다.
· 작품 사진과 선반 사진은 현장 모바일 웹에서 바로 촬영할 수 있어야 하며, 목록에서는 작은 미리보기를 사용하고 상세에서 원본 비율로 확대한다.
· 공정별 선반과 선반 칸은 자유 입력보다 설정된 선택값을 사용한다. 현재 제작 단계와 맞지 않는 선반 칸은 비활성화하고 이유를 표시한다.
· 확인 필요: 일곱 자 작품 번호와 월 작품 약 130점 조건은 숫자 순번 01~99만으로 동시에 충족할 수 없다. 99 이후 번호 규칙을 확정하기 전에는 UI가 임의의 영문 조합을 사실상 표준으로 강제하지 않는다.
· 확인 필요: 다음 가마 후보 비교에 크기와 높이의 수치 입력을 필수로 할지 확정되지 않았다. 첫 구현에서는 입력란과 미입력 표시를 제공하되 후보 선택을 막는 조건은 확정 후 적용한다.
login-access
대표 운영자·보조 강사 로그인과 회원 본인 확인을 같은 화면 안에서 명확한 탭으로 분리한다. 운영 계정은 로그인 정보, 회원은 공방이 전달한 초대 주소와 최초 접근 코드를 사용한다. 오류 시 어떤 정보가 틀렸는지 과도하게 노출하지 않으며, 성공하면 역할에 맞는 화면으로 즉시 이동한다.
operator-dashboard
첫 영역에 작품 번호 검색을 배치한다. 다음으로 건조·초벌 대기·초벌 완료·시유·재벌 대기·완성 수, 위치 미등록과 설정 미완료 항목을 보여준다. 다음 가마 후보는 초벌 대기와 재벌 대기를 분리해 진입시킨다. 회원 검색 결과에서 회원권 잔여 횟수를 바로 확인할 수 있는 축약 영역을 제공해 작품 진행 상태, 다음 가마 후보, 회원권 정보를 한 화면에서 시작할 수 있게 한다.
main
운영자 대시보드에서 진입하는 작품 운영 보드로 구성한다. 현재 제작 단계별 섹션에서 작품 번호, 사진, 회원, 선반 칸을 우선 표시한다. 모바일에서는 단계 탭과 카드 목록, lg 이상에서는 단계별 열 또는 표를 사용한다. 카드 선택 시 작품 상세로 이동하고 다중 선택 시 일괄 변경 작업 바를 연다.
stage-work-list
상단에 현재 제작 단계 탭과 작품 수, 작품 번호 검색, 선반·선반 칸·회원 필터를 둔다. 모바일 카드는 작품 번호와 선반 칸을 가장 크게 보여주고, lg 이상 표는 선택 체크박스와 작품 번호 열을 고정한다. 선택 항목과 필터는 작품 상세를 다녀와도 유지한다.
work-form
입력 순서는 회원, 작품 번호, 작품 사진, 현재 제작 단계, 선반과 선반 칸, 선택 항목인 크기·높이와 가마 예정일로 한다. 작품 번호는 다음 번호를 제안하되 굽 바닥의 실제 번호와 대조하게 하고 중복을 즉시 검사한다. 현재 제작 단계를 고르면 유효한 선반 칸만 표시한다. 신규 등록에는 저장하고 다음 작품 등록과 저장 후 상세 보기 버튼을 제공한다.
work-search-detail
상단 검색창 아래에 작품 번호, 사진, 회원, 현재 제작 단계, 선반 칸, 예상 완성 시점을 첫 화면에서 모두 확인하게 한다. 상태 변경과 선반 칸 이동을 주요 버튼으로 제공하고, 회원권 잔여 횟수는 운영자에게만 요약 표시한다. 아래에는 단계·위치·작품 번호 정정 이력을 시간순으로 제공한다.
bulk-status-change
선택 작품 수와 현재 제작 단계 분포를 상단에 고정한다. 새 현재 제작 단계를 선택하면 해당 단계의 선반과 선반 칸만 선택할 수 있게 한다. 저장 전 작품 번호, 현재 값, 변경 후 값을 검토하고, 저장 후 성공과 실패를 분리해 실패 작품 번호와 이유를 보여준다. 다른 사용자의 최신 수정과 충돌한 작품은 덮어쓰지 않는다.
member-list-detail
모바일은 회원 목록에서 상세로 이동하고, lg 이상은 목록과 상세를 두 패널로 배치한다. 회원 상세 상단에 회원권 종류, 잔여 횟수, 유효기간을 표시하고 바로 아래에 진행 중 작품을 사진과 현재 제작 단계로 보여준다. 잔여 횟수 변경에는 변경 사유와 전후 값 확인을 요구하며 자동 차감 기능은 제공하지 않는다.
my-works
진행 중 작품과 완성 작품을 구분한다. 작품 카드는 사진, 작품 번호, 회원용 진행 문구, 예상 완성 시점 또는 완성을 표시한다. 상세 선반 칸, 내부 작업 메모, 다른 회원의 작품과 회원권 정보는 노출하지 않는다. 예상 완성 시점이 계산되지 않으면 공방에서 확인 중이라고 표시한다.
next-kiln-candidates
초벌 대기와 재벌 대기를 첫 탭부터 분리하고 동시에 선택할 수 없게 한다. 작품 사진, 작품 번호, 선반 칸, 대기 기간, 크기와 높이 입력값, 관련 선반 사진을 비교한다. 크기·높이가 없으면 미입력 배지를 표시하되 후보 선택 차단 여부는 확인 필요로 둔다. 후보 선택 결과만 저장하며 가마 배치, 적재, 가마 회차와 소성 계획 화면은 만들지 않는다.
studio-workflow-settings
대표 운영자만 수정할 수 있게 하고 보조 강사에게는 필요 시 읽기 전용으로 표시한다. 건조·초벌 대기·초벌 완료·시유·재벌 대기·완성별로 선반, 선반 칸과 단계별 기본 소요 기간을 설정한다. 작품이 남은 선반이나 선반 칸 삭제는 막고 연결 작품과 이동 필요 내용을 보여준다. 저장 후 예상 완성 시점 재계산이 필요한 범위를 안내한다.
initial-setup
공방 작업 기준 설정, 회원 등록, 현재 보관 중인 작품 등록, 등록 범위 확인의 단계형 흐름을 사용한다. 각 단계는 자동 저장하고 중단 후 이어서 진행한다. 마지막 화면에서 단계별 작품 수, 선반 칸 미등록, 사진 미등록, 중복 작품 번호를 요약한다. 현재 보관 중인 작품 전체를 옮길지 여부는 확인 필요 항목으로 표시하고 대표 운영자가 등록 범위를 확인한 뒤 운영을 시작한다.
에셋 원칙
가정: 별도 로고가 제공되지 않았으므로 첫 버전 헤더는 생활도자 공방 이름을 텍스트 워드마크로 표시한다. · 24px 기준의 일관된 선형 SVG 아이콘 세트: 검색, 카메라, 사진, 작품, 회원, 선반, 건조, 초벌, 시유, 재벌, 완성, 달력, 이력, 경고, 설정. · 현재 제작 단계별 아이콘은 색상 없이도 구분되는 서로 다른 실루엣을 사용한다. · 작품 사진 미등록 placeholder는 실제 작품처럼 오인될 수 있는 예시 사진 대신 카메라 아이콘과 작품 사진 없음 문구를 사용한다. · 선반 사진 미등록 placeholder는 격자 형태의 선반 아이콘과 선반 사진 없음 문구를 사용한다. · 권장: 목록용 정사각형 미리보기와 상세용 원본 비율 이미지를 별도로 제공해 모바일 로딩을 줄인다. · 작품 사진과 선반 사진은 인증된 요청에만 제공되는 보호 자산으로 처리하고 공개 고정 주소를 화면에 노출하지 않는다. · 초기 설정과 빈 화면에는 장식용 스톡 사진보다 다음 행동을 설명하는 단순 SVG 안내 그림을 사용한다.
ACCESSIBILITY
접근성과 모션
- · KWCAG 2.2와 WCAG 2.1 AA를 기준으로 텍스트와 배경의 명도 대비를 맞춘다. 일반 텍스트는 4.5:1 이상, 큰 텍스트와 핵심 그래픽은 3:1 이상을 목표로 한다.
- · 모든 터치 대상은 최소 44×44px로 만들고, 인접한 체크박스와 아이콘 버튼 사이에 최소 8px 간격을 둔다.
- · 현재 제작 단계, 경고, 성공·실패는 색상만으로 구분하지 않고 텍스트, 아이콘 또는 패턴을 함께 사용한다.
- · 키보드 초점은 Focus 색상의 2px 이상 외곽선과 충분한 간격으로 표시하며, 모달과 하단 시트 내부에 초점을 가두고 닫은 뒤 호출 위치로 되돌린다.
- · 입력 항목에는 화면에 보이는 레이블을 제공하고 필수 여부, 단위, 형식 오류와 수정 방법을 입력 가까이에 표시한다.
- · 작품 사진의 대체 텍스트에는 작품 번호와 사진 순서를 포함한다. 장식용 이미지는 빈 대체 텍스트를 사용한다.
- · 표의 헤더와 데이터 셀을 의미상 연결하고, 모바일 카드 전환 후에도 작품 번호·현재 제작 단계·선반 칸의 읽기 순서를 유지한다.
- · 검색, 저장, 사진 업로드, 일괄 변경 결과는 보조 기술이 인식할 수 있는 상태 메시지로 알린다. 실패 메시지는 자동으로 사라지지 않는다.
- · 가로 스크롤 탭과 표에는 키보드 및 스크린 리더로 접근 가능한 대체 이동 방법을 제공한다.
- · 사진 촬영 권한이 거부되거나 카메라를 사용할 수 없는 경우 앨범 업로드와 재시도 방법을 제공한다.
- · 회원 전용 내 작품 조회에서는 내부 선반 칸과 다른 회원의 정보를 시각적으로 숨기는 데 그치지 않고 서버 권한 검사 결과에 따라 렌더링한다.
- · 날짜는 2026년 8월 25일처럼 읽기 쉬운 형식을 사용하고, 예상 완성 시점의 기준과 변경 가능성을 텍스트로 제공한다.
- · prefers-reduced-motion 설정이 있으면 화면 전환과 목록 재배치 애니메이션을 제거하고 즉시 상태를 갱신한다.
- · 모바일 확대를 막지 않으며 200% 확대와 좁은 화면에서도 작품 검색, 조회, 저장과 일괄 변경의 핵심 기능을 사용할 수 있게 한다.
기본 전환 180ms cubic-bezier(0.2, 0, 0, 1) · 모션 감소 설정 지원 · 다크모드 not_planned
EVIDENCE
조사 출처
- Web Content Accessibility Guidelines (WCAG) 2.1
명도 대비, 키보드 접근, 상태 전달, 오류 식별 등 WCAG 2.1 AA 접근성 기준에 사용했다.
- Pretendard
별도 글꼴 지시가 없을 때 적용하는 한글 기본 글꼴의 배포 및 사용 정보를 확인하는 기준이다.
- 스마트스토어 고객센터
제공된 UI/UX 조사에서 한국 운영 도구의 목록, 검색, 선택 후 일괄 처리 패턴을 검토하기 위한 참고 자료로 제시됐다. 생활도자 공방 고유 기능의 근거로 직접 전용하지 않았다.
- Cafe24-마켓플러스
제공된 UI/UX 조사에서 다수 항목을 관리하는 운영 화면의 필터와 일괄 작업 구조를 참고하는 자료로 사용했다.
- 알림톡 - 카카오비즈니스
카카오톡 완성 알림은 사업자 채널과 템플릿 승인 이후의 후속 범위임을 확인하는 참고 자료다. 첫 버전 UI에는 실제 발송 기능을 포함하지 않는다.
기계 판독 디자인 계약 보기
{
"version": 1,
"direction": "가정: 별도 브랜드 아이덴티티가 제공되지 않았으므로 흙과 유약에서 가져온 차분한 색을 사용하되, 공방 감성보다 현장 가독성과 빠른 처리를 우선한다. 작품 번호를 모든 운영 화면의 가장 강한 시각적 기준으로 삼고 사진, 현재 제작 단계, 선반 칸을 한 묶음으로 표시한다. 운영자 화면은 흙이 묻은 손으로도 누르기 쉬운 큰 조작 영역과 짧은 입력 흐름을 사용한다. 회원 화면은 내부 선반 정보와 작업 메모를 숨기고 사진, 쉬운 진행 설명, 예상 완성 시점을 중심으로 구성한다.",
"keywords": [
"작품 번호 중심",
"현장 모바일 우선",
"사진 기반 식별",
"현재 제작 단계와 선반 칸 동시 확인",
"초벌 대기와 재벌 대기 분리",
"여러 작품 일괄 변경",
"부분 실패가 보이는 안전한 처리",
"차분한 흙과 유약 색상",
"회원용 쉬운 진행 안내",
"공방별 작업 기준 설정"
],
"industryFindings": [
"제품 요구 기준으로 작품의 현재 제작 단계와 실제 선반 칸은 서로 다른 정보이며, 등록·이동·일괄 변경 화면에서 함께 확인하고 변경 이력을 각각 남겨야 한다.",
"작품 번호는 굽 바닥에 새긴 2608-01 형식을 기본으로 하며, 운영 화면의 검색 결과와 목록에서 회원명보다 먼저 보여야 한다.",
"운영자는 수업 직후 여러 작품을 등록하므로 최근 선택 회원 유지, 다음 작품 번호 제안, 모바일 사진 촬영, 저장하고 다음 등록 흐름이 필요하다.",
"월 50~150점 규모에서는 전체 통계보다 작품 번호 검색, 단계 탭, 선반 칸 필터, 체크박스 선택과 일괄 변경 진입이 먼저 보여야 한다.",
"초벌 대기와 재벌 대기는 소성 조건이 달라 같은 후보 목록에 섞지 않는다. 다음 가마 후보 비교 화면도 두 탭을 명확히 분리한다.",
"여러 작품 상태 한꺼번에 변경은 적용 전 대상 수와 변경 전후 값을 검토하고, 적용 후 성공·실패 작품 번호와 실패 이유를 나눠 보여줘야 한다.",
"대표 운영자와 보조 강사가 동시에 수정할 수 있으므로 저장 충돌은 일반 오류가 아니라 최신 내용을 비교하는 전용 상태로 표시해야 한다.",
"회원 전용 내 작품 조회는 운영자용 현재 제작 단계를 쉬운 문장으로 설명하고, 상세 선반 칸·다른 회원 작품·내부 메모는 노출하지 않는다.",
"예상 완성 시점은 운영자 화면과 회원 화면에서 같은 서버 계산 결과를 사용하고, 계산 기준이 없으면 임의 날짜 대신 확인 필요를 표시한다.",
"작품 사진과 선반 사진은 현장 모바일 웹에서 바로 촬영할 수 있어야 하며, 목록에서는 작은 미리보기를 사용하고 상세에서 원본 비율로 확대한다.",
"공정별 선반과 선반 칸은 자유 입력보다 설정된 선택값을 사용한다. 현재 제작 단계와 맞지 않는 선반 칸은 비활성화하고 이유를 표시한다.",
"확인 필요: 일곱 자 작품 번호와 월 작품 약 130점 조건은 숫자 순번 01~99만으로 동시에 충족할 수 없다. 99 이후 번호 규칙을 확정하기 전에는 UI가 임의의 영문 조합을 사실상 표준으로 강제하지 않는다.",
"확인 필요: 다음 가마 후보 비교에 크기와 높이의 수치 입력을 필수로 할지 확정되지 않았다. 첫 구현에서는 입력란과 미입력 표시를 제공하되 후보 선택을 막는 조건은 확정 후 적용한다."
],
"layoutMode": "mobile_first",
"layoutRationale": "SRS에서 공방 현장의 모바일 웹을 우선 사용 환경으로 지정했고, 작품 번호 검색·사진 촬영·단계 변경·선반 칸 선택을 현장에서 수행한다. 기본 화면은 한 손 조작이 가능한 단일 열 카드와 하단 고정 작업 영역으로 구성한다. md 이상에서는 필터와 상세 정보를 넓히고, lg 이상에서는 단계별 작품 목록을 12열 그리드 기반 표로 전환해 다중 선택과 비교 효율을 높인다. 데스크톱에서도 모바일과 같은 기능 및 용어를 유지하며 별도 제품으로 분리하지 않는다.",
"typography": {
"koreanFont": "Pretendard Variable",
"fallback": [
"Pretendard",
"Apple SD Gothic Neo",
"Noto Sans KR",
"Malgun Gothic",
"sans-serif"
],
"bodyLetterSpacing": "-0.01em",
"headingLetterSpacing": "-0.025em",
"bodyLineHeight": 1.6
},
"colors": [
{
"name": "Canvas",
"value": "#F7F4EE",
"usage": "전체 화면 배경. 흙의 온기를 반영하되 사진과 흰색 카드가 구분되도록 사용한다."
},
{
"name": "Surface",
"value": "#FFFFFF",
"usage": "카드, 표, 입력 영역, 대화상자 배경."
},
{
"name": "TextPrimary",
"value": "#1F2925",
"usage": "작품 번호, 제목, 주요 데이터와 본문 기본 글자."
},
{
"name": "TextSecondary",
"value": "#59645F",
"usage": "보조 설명, 변경 시각, 회원 식별 정보. 작은 글자에서도 Canvas 또는 Surface 위 명도 대비를 유지한다."
},
{
"name": "Border",
"value": "#D5DDD8",
"usage": "카드와 표 구분선, 입력 테두리, 비활성 칸 경계."
},
{
"name": "Primary",
"value": "#255F52",
"usage": "주요 버튼, 선택 상태, 완성 배지 텍스트, 운영자 핵심 링크."
},
{
"name": "PrimaryHover",
"value": "#194B40",
"usage": "주요 버튼의 hover와 pressed 상태."
},
{
"name": "PrimarySoft",
"value": "#E2F0EB",
"usage": "선택된 탭·필터, 완성 상태 배경, 회원 화면의 진행 강조."
},
{
"name": "DryText",
"value": "#854A0E",
"usage": "건조 배지의 텍스트와 아이콘."
},
{
"name": "DrySoft",
"value": "#FEF0C7",
"usage": "건조 배지 배경."
},
{
"name": "BisqueText",
"value": "#9C2A10",
"usage": "초벌 대기와 초벌 완료 배지의 텍스트와 아이콘. 두 단계는 문구와 아이콘 모양을 함께 달리한다."
},
{
"name": "BisqueSoft",
"value": "#FEE4E2",
"usage": "초벌 대기와 초벌 완료 배지 배경."
},
{
"name": "GlazeText",
"value": "#026AA2",
"usage": "시유 배지의 텍스트와 아이콘."
},
{
"name": "GlazeSoft",
"value": "#E0F2FE",
"usage": "시유 배지 배경."
},
{
"name": "RefireText",
"value": "#6941C6",
"usage": "재벌 대기 배지의 텍스트와 아이콘."
},
{
"name": "RefireSoft",
"value": "#F4EBFF",
"usage": "재벌 대기 배지 배경."
},
{
"name": "Warning",
"value": "#8A4B08",
"usage": "위치 미지정, 사진 미등록, 기간 만료, 설정 미완료 경고의 텍스트와 아이콘."
},
{
"name": "WarningSoft",
"value": "#FFF3D6",
"usage": "주의 배너와 경고 배지 배경."
},
{
"name": "Error",
"value": "#B42318",
"usage": "중복 작품 번호, 저장 실패, 접근 거부, 일괄 변경 실패와 파괴적 작업."
},
{
"name": "ErrorSoft",
"value": "#FEE4E2",
"usage": "오류 메시지와 실패 결과 행 배경."
},
{
"name": "Focus",
"value": "#175CD3",
"usage": "키보드 초점 링, 현재 입력 위치, 정보성 링크. 상태 구분 색상으로 단독 사용하지 않는다."
}
],
"breakpoints": {
"sm": 480,
"md": 768,
"lg": 1024,
"xl": 1440
},
"grid": {
"baseUnit": 4,
"mobileColumns": 4,
"desktopColumns": 12,
"maxContentWidth": 1280
},
"spacing": [
4,
8,
12,
16,
20,
24,
32,
40,
48,
64
],
"radius": {
"sm": 8,
"md": 12,
"lg": 16,
"full": 9999
},
"components": [
{
"name": "AppShell",
"variants": [
"operator",
"member",
"initialSetup"
],
"states": [
"default",
"loading",
"accessDenied"
],
"guidance": "모바일 운영자 화면은 상단 공방명과 검색 진입, 하단에 대시보드·작품·회원·더보기 내비게이션을 둔다. lg 이상에서는 왼쪽 내비게이션과 상단 검색으로 전환한다. 회원 화면은 내 작품 조회에 필요한 최소 내비게이션만 제공한다."
},
{
"name": "Button",
"variants": [
"primary",
"secondary",
"tertiary",
"destructive",
"fullWidth"
],
"states": [
"default",
"hover",
"focusVisible",
"pressed",
"disabled",
"loading"
],
"guidance": "최소 높이는 44px이며 모바일 주요 완료 버튼은 48px을 권장한다. 버튼 문구는 저장, 12점 변경, 작품 등록처럼 결과를 구체적으로 쓴다. 로딩 중 중복 제출을 막되 현재 작업 문구를 유지한다."
},
{
"name": "IconButton",
"variants": [
"default",
"outlined",
"destructive"
],
"states": [
"default",
"hover",
"focusVisible",
"pressed",
"disabled"
],
"guidance": "터치 영역은 최소 44×44px이다. 아이콘만 사용할 때 접근 가능한 이름을 제공하고, 삭제·닫기 외에는 가능하면 짧은 텍스트를 함께 표시한다."
},
{
"name": "WorkNumberSearch",
"variants": [
"dashboard",
"listHeader",
"detail"
],
"states": [
"empty",
"typing",
"loading",
"matched",
"partialMatches",
"noResult",
"error"
],
"guidance": "작품 번호 입력을 첫 초점 대상으로 제공한다. 숫자와 하이픈 입력을 지원하고, 하이픈 없이 입력해도 서버 검색 결과를 반환할 수 있게 한다. 검색 결과에는 작품 번호, 사진, 회원, 현재 제작 단계, 선반 칸을 같은 영역에 표시한다."
},
{
"name": "StageSummaryCard",
"variants": [
"건조",
"초벌 대기",
"초벌 완료",
"시유",
"재벌 대기",
"완성",
"attention"
],
"states": [
"default",
"hover",
"focusVisible",
"selected",
"loading"
],
"guidance": "현재 제작 단계명과 작품 점수를 함께 표시하고 누르면 해당 필터가 적용된 단계별 작품 목록으로 이동한다. 초벌 대기와 재벌 대기는 인접 카드로 배치하되 서로 다른 색과 문구로 구분한다."
},
{
"name": "StageTabs",
"variants": [
"scrollable",
"segmented",
"kilnSeparated"
],
"states": [
"default",
"selected",
"focusVisible",
"disabled"
],
"guidance": "모바일에서는 가로 스크롤을 허용하되 선택 탭이 화면 안으로 자동 이동한다. 탭에는 단계명과 작품 수를 함께 표시한다. 다음 가마 후보 비교에서는 초벌 대기와 재벌 대기 두 탭만 제공한다."
},
{
"name": "FilterBar",
"variants": [
"mobileSheet",
"desktopInline"
],
"states": [
"default",
"applied",
"loading",
"emptyResult"
],
"guidance": "작품 번호, 회원, 현재 제작 단계, 선반, 선반 칸을 필터로 제공한다. 적용된 조건은 삭제 가능한 칩으로 남기며 목록과 상세를 오간 뒤에도 이전 필터를 복원한다."
},
{
"name": "WorkCollection",
"variants": [
"mobileCards",
"tabletRows",
"desktopTable",
"kilnComparison"
],
"states": [
"loading",
"populated",
"empty",
"error",
"selectionMode"
],
"guidance": "모바일 카드는 작품 번호, 정사각형 사진, 현재 제작 단계, 선반 칸, 회원 순서로 표시한다. lg 이상 표는 선택, 작품 번호, 사진, 현재 제작 단계, 선반 칸, 회원, 예상 완성 시점 순으로 고정한다. 표의 작품 번호와 선반 칸은 줄바꿈하지 않는다."
},
{
"name": "WorkCard",
"variants": [
"operator",
"member",
"compact",
"candidate"
],
"states": [
"default",
"selected",
"focusVisible",
"missingPhoto",
"missingLocation",
"stale",
"disabled"
],
"guidance": "운영자용은 작품 번호를 가장 크게 표시하고 회원, 현재 제작 단계, 선반 칸을 함께 보여준다. 회원용은 작품 사진, 쉬운 진행 문구, 예상 완성 시점과 완성 여부만 보여주며 선반 칸과 내부 메모를 숨긴다."
},
{
"name": "StatusBadge",
"variants": [
"건조",
"초벌 대기",
"초벌 완료",
"시유",
"재벌 대기",
"완성",
"위치 미지정",
"기간 만료",
"확인 필요"
],
"states": [
"default",
"compact"
],
"guidance": "색상, 텍스트, 단계별 아이콘을 함께 사용한다. 초벌 대기와 초벌 완료처럼 색이 같은 배지는 문구와 아이콘으로 구분한다. 배지만으로 핵심 정보를 전달하지 않고 주변에 현재 제작 단계 레이블을 제공한다."
},
{
"name": "SelectionControl",
"variants": [
"checkbox",
"selectAllPage",
"selectAllFiltered"
],
"states": [
"unchecked",
"checked",
"indeterminate",
"focusVisible",
"disabled"
],
"guidance": "모바일에서 체크 영역 전체를 44px 이상으로 제공한다. 현재 화면 전체 선택과 검색 결과 전체 선택을 구분하고, 선택한 작품 수를 항상 함께 표시한다."
},
{
"name": "BulkActionBar",
"variants": [
"mobileBottom",
"desktopTop",
"review"
],
"states": [
"hidden",
"active",
"submitting",
"partialSuccess",
"success",
"failure"
],
"guidance": "하나 이상의 작품이 선택되면 고정 표시한다. 선택 작품 수, 단계 변경, 선반 칸 이동, 선택 해제를 제공한다. 모바일에서는 안전 영역을 반영하며 목록의 마지막 행을 가리지 않도록 하단 여백을 추가한다."
},
{
"name": "FormField",
"variants": [
"text",
"number",
"date",
"select",
"textarea"
],
"states": [
"default",
"focus",
"filled",
"disabled",
"readOnly",
"error",
"success"
],
"guidance": "레이블을 항상 표시하고 placeholder만으로 항목을 설명하지 않는다. 오류는 입력 바로 아래에 원인과 수정 방법을 표시한다. 숫자 입력은 모바일 숫자 키패드를 사용하되 단위와 허용 범위를 화면에 명시한다."
},
{
"name": "WorkNumberInput",
"variants": [
"new",
"correction",
"initialSetup"
],
"states": [
"suggested",
"checking",
"available",
"duplicate",
"invalidFormat",
"conflict"
],
"guidance": "2608-01 형식과 최대 일곱 자 조건을 입력 가까이에 표시한다. 자동 제안값은 운영자가 수정할 수 있어야 한다. 정정 화면은 이전 번호를 읽기 전용으로 보여주고 저장 전 새 번호와 변경 이력 생성을 확인한다. 월 99점 이후 규칙은 확인 필요로 처리한다."
},
{
"name": "MemberPicker",
"variants": [
"recentFirst",
"search",
"inlineCreate"
],
"states": [
"empty",
"searching",
"results",
"selected",
"duplicateName",
"noResult",
"disabled"
],
"guidance": "검색 결과에는 회원명과 마스킹된 식별 정보, 현재 보관 작품 수를 함께 표시한다. 동명이인은 이름만으로 선택할 수 없게 한다. 작품을 연속 등록할 때 선택 회원 유지 여부를 명확히 보여준다."
},
{
"name": "PhotoUploader",
"variants": [
"workPhoto",
"shelfPhoto",
"gallery"
],
"states": [
"empty",
"capturing",
"uploading",
"uploaded",
"reordering",
"failed",
"permissionDenied"
],
"guidance": "모바일에서 카메라 촬영과 앨범 선택을 모두 제공한다. 업로드 진행률, 재시도, 대표 사진을 표시한다. 사진 업로드 실패 시 입력한 나머지 정보를 잃지 않으며, 권한 확인을 거친 주소로만 이미지를 제공한다."
},
{
"name": "StageShelfPicker",
"variants": [
"stacked",
"bottomSheet",
"desktopPanel"
],
"states": [
"empty",
"stageSelected",
"shelfSelected",
"cellSelected",
"unavailable",
"invalidCombination"
],
"guidance": "현재 제작 단계 선택 후 해당 단계에 연결된 선반과 선반 칸만 보여준다. 선택 결과는 초벌 대기 2번 선반 1칸처럼 전체 경로로 확인시킨다. 사용할 수 없는 선반 칸은 숨기지 말고 비활성화 사유를 제공한다."
},
{
"name": "ShelfGrid",
"variants": [
"picker",
"settings",
"photoReference"
],
"states": [
"empty",
"available",
"occupied",
"selected",
"disabled",
"deletionBlocked"
],
"guidance": "선반 칸을 실제 배열에 가까운 격자로 보여주되 칸 번호를 항상 표시한다. 수용량은 기준이 제공된 경우에만 표시한다. 작품이 남은 선반 칸 삭제 시 이동이 필요하다는 안내와 연결 작품 목록을 제공한다."
},
{
"name": "EstimateDate",
"variants": [
"operator",
"member",
"completed",
"unknown"
],
"states": [
"calculated",
"kilnDatePriority",
"recalculating",
"missingRule",
"completed"
],
"guidance": "운영자에게는 날짜와 계산 기준을 함께 보여주고, 회원에게는 예상 완성 시점과 변경 가능성을 쉬운 문장으로 표시한다. 완성 작품은 날짜 대신 완성을 표시한다. 계산 기준이 없으면 임의 날짜를 만들지 않고 확인 필요를 표시한다."
},
{
"name": "MemberSummaryCard",
"variants": [
"list",
"detail",
"workContext"
],
"states": [
"active",
"expired",
"inactive",
"loading",
"conflict"
],
"guidance": "회원명, 회원권 종류, 잔여 횟수, 유효기간, 진행 중 작품 수를 표시한다. 잔여 횟수 변경은 변경 사유 입력과 전후 값 검토를 거치며 음수 저장을 막는다."
},
{
"name": "DetailHeader",
"variants": [
"work",
"member",
"settings"
],
"states": [
"default",
"editing",
"staleData"
],
"guidance": "작품 상세에서는 작품 번호, 현재 제작 단계, 회원명과 상태·선반 칸 변경 버튼을 첫 화면에 배치한다. 다른 사용자가 수정한 상태이면 저장을 덮어쓰지 말고 최신 내용 확인 버튼을 표시한다."
},
{
"name": "HistoryTimeline",
"variants": [
"stage",
"location",
"workNumber",
"membership"
],
"states": [
"collapsed",
"expanded",
"loading",
"empty"
],
"guidance": "변경 시각, 변경자, 이전 값, 새 값을 텍스트로 표시한다. 상태 색만으로 전후를 구분하지 않는다. 모바일 기본은 최근 이력 세 건이며 전체 보기를 제공한다."
},
{
"name": "ReviewDialog",
"variants": [
"bottomSheet",
"modal",
"destructive"
],
"states": [
"open",
"submitting",
"success",
"partialSuccess",
"failure"
],
"guidance": "일괄 변경 전 작품 수, 현재 제작 단계 분포, 새 단계, 새 선반 칸을 검토한다. 파괴적 작업은 대상 이름을 다시 표시한다. 닫은 뒤에는 호출한 요소로 키보드 초점을 되돌린다."
},
{
"name": "BulkResultSummary",
"variants": [
"success",
"partialSuccess",
"failure"
],
"states": [
"collapsed",
"expanded"
],
"guidance": "성공·실패 건수를 분리하고 실패 작품 번호와 이유를 행 단위로 제공한다. 실패가 있어도 성공 항목을 실패처럼 표시하지 않는다. 결과 목록을 닫기 전 다시 처리할 작품을 선택할 수 있게 한다."
},
{
"name": "WizardStepper",
"variants": [
"initialSetup",
"settings"
],
"states": [
"notStarted",
"current",
"completed",
"incomplete",
"blocked"
],
"guidance": "공방 작업 기준, 회원, 현재 작품, 등록 범위 확인 순서를 표시한다. 각 단계는 자동 저장하며 중단 후 이어서 진행할 수 있게 한다. 완료 표시는 필수 데이터 검사를 통과한 경우에만 적용한다."
},
{
"name": "FeedbackMessage",
"variants": [
"inline",
"banner",
"toast"
],
"states": [
"info",
"success",
"warning",
"error"
],
"guidance": "폼 오류는 inline, 화면 전체 상태는 banner, 방금 끝난 단순 작업은 toast를 사용한다. 저장 실패와 부분 실패는 자동으로 사라지는 toast만 사용하지 않는다. 보조 기술이 결과를 읽을 수 있도록 적절한 live region을 적용한다."
},
{
"name": "LoadingAndEmptyState",
"variants": [
"skeleton",
"empty",
"noSearchResult",
"accessDenied",
"networkError"
],
"states": [
"visible",
"retrying"
],
"guidance": "빈 목록과 검색 결과 없음은 구분한다. 검색 결과 없음에는 입력 번호를 유지하고 다시 검색 또는 작품 등록으로 이동하는 행동을 제공한다. 스켈레톤은 실제 카드와 표 구조를 따라 레이아웃 이동을 줄인다."
}
],
"accessibility": [
"KWCAG 2.2와 WCAG 2.1 AA를 기준으로 텍스트와 배경의 명도 대비를 맞춘다. 일반 텍스트는 4.5:1 이상, 큰 텍스트와 핵심 그래픽은 3:1 이상을 목표로 한다.",
"모든 터치 대상은 최소 44×44px로 만들고, 인접한 체크박스와 아이콘 버튼 사이에 최소 8px 간격을 둔다.",
"현재 제작 단계, 경고, 성공·실패는 색상만으로 구분하지 않고 텍스트, 아이콘 또는 패턴을 함께 사용한다.",
"키보드 초점은 Focus 색상의 2px 이상 외곽선과 충분한 간격으로 표시하며, 모달과 하단 시트 내부에 초점을 가두고 닫은 뒤 호출 위치로 되돌린다.",
"입력 항목에는 화면에 보이는 레이블을 제공하고 필수 여부, 단위, 형식 오류와 수정 방법을 입력 가까이에 표시한다.",
"작품 사진의 대체 텍스트에는 작품 번호와 사진 순서를 포함한다. 장식용 이미지는 빈 대체 텍스트를 사용한다.",
"표의 헤더와 데이터 셀을 의미상 연결하고, 모바일 카드 전환 후에도 작품 번호·현재 제작 단계·선반 칸의 읽기 순서를 유지한다.",
"검색, 저장, 사진 업로드, 일괄 변경 결과는 보조 기술이 인식할 수 있는 상태 메시지로 알린다. 실패 메시지는 자동으로 사라지지 않는다.",
"가로 스크롤 탭과 표에는 키보드 및 스크린 리더로 접근 가능한 대체 이동 방법을 제공한다.",
"사진 촬영 권한이 거부되거나 카메라를 사용할 수 없는 경우 앨범 업로드와 재시도 방법을 제공한다.",
"회원 전용 내 작품 조회에서는 내부 선반 칸과 다른 회원의 정보를 시각적으로 숨기는 데 그치지 않고 서버 권한 검사 결과에 따라 렌더링한다.",
"날짜는 2026년 8월 25일처럼 읽기 쉬운 형식을 사용하고, 예상 완성 시점의 기준과 변경 가능성을 텍스트로 제공한다.",
"prefers-reduced-motion 설정이 있으면 화면 전환과 목록 재배치 애니메이션을 제거하고 즉시 상태를 갱신한다.",
"모바일 확대를 막지 않으며 200% 확대와 좁은 화면에서도 작품 검색, 조회, 저장과 일괄 변경의 핵심 기능을 사용할 수 있게 한다."
],
"motion": {
"durationMs": 180,
"easing": "cubic-bezier(0.2, 0, 0, 1)",
"reducedMotion": true
},
"darkMode": "not_planned",
"screenGuidance": [
{
"screenId": "login-access",
"guidance": "대표 운영자·보조 강사 로그인과 회원 본인 확인을 같은 화면 안에서 명확한 탭으로 분리한다. 운영 계정은 로그인 정보, 회원은 공방이 전달한 초대 주소와 최초 접근 코드를 사용한다. 오류 시 어떤 정보가 틀렸는지 과도하게 노출하지 않으며, 성공하면 역할에 맞는 화면으로 즉시 이동한다."
},
{
"screenId": "operator-dashboard",
"guidance": "첫 영역에 작품 번호 검색을 배치한다. 다음으로 건조·초벌 대기·초벌 완료·시유·재벌 대기·완성 수, 위치 미등록과 설정 미완료 항목을 보여준다. 다음 가마 후보는 초벌 대기와 재벌 대기를 분리해 진입시킨다. 회원 검색 결과에서 회원권 잔여 횟수를 바로 확인할 수 있는 축약 영역을 제공해 작품 진행 상태, 다음 가마 후보, 회원권 정보를 한 화면에서 시작할 수 있게 한다."
},
{
"screenId": "main",
"guidance": "운영자 대시보드에서 진입하는 작품 운영 보드로 구성한다. 현재 제작 단계별 섹션에서 작품 번호, 사진, 회원, 선반 칸을 우선 표시한다. 모바일에서는 단계 탭과 카드 목록, lg 이상에서는 단계별 열 또는 표를 사용한다. 카드 선택 시 작품 상세로 이동하고 다중 선택 시 일괄 변경 작업 바를 연다."
},
{
"screenId": "stage-work-list",
"guidance": "상단에 현재 제작 단계 탭과 작품 수, 작품 번호 검색, 선반·선반 칸·회원 필터를 둔다. 모바일 카드는 작품 번호와 선반 칸을 가장 크게 보여주고, lg 이상 표는 선택 체크박스와 작품 번호 열을 고정한다. 선택 항목과 필터는 작품 상세를 다녀와도 유지한다."
},
{
"screenId": "work-form",
"guidance": "입력 순서는 회원, 작품 번호, 작품 사진, 현재 제작 단계, 선반과 선반 칸, 선택 항목인 크기·높이와 가마 예정일로 한다. 작품 번호는 다음 번호를 제안하되 굽 바닥의 실제 번호와 대조하게 하고 중복을 즉시 검사한다. 현재 제작 단계를 고르면 유효한 선반 칸만 표시한다. 신규 등록에는 저장하고 다음 작품 등록과 저장 후 상세 보기 버튼을 제공한다."
},
{
"screenId": "work-search-detail",
"guidance": "상단 검색창 아래에 작품 번호, 사진, 회원, 현재 제작 단계, 선반 칸, 예상 완성 시점을 첫 화면에서 모두 확인하게 한다. 상태 변경과 선반 칸 이동을 주요 버튼으로 제공하고, 회원권 잔여 횟수는 운영자에게만 요약 표시한다. 아래에는 단계·위치·작품 번호 정정 이력을 시간순으로 제공한다."
},
{
"screenId": "bulk-status-change",
"guidance": "선택 작품 수와 현재 제작 단계 분포를 상단에 고정한다. 새 현재 제작 단계를 선택하면 해당 단계의 선반과 선반 칸만 선택할 수 있게 한다. 저장 전 작품 번호, 현재 값, 변경 후 값을 검토하고, 저장 후 성공과 실패를 분리해 실패 작품 번호와 이유를 보여준다. 다른 사용자의 최신 수정과 충돌한 작품은 덮어쓰지 않는다."
},
{
"screenId": "member-list-detail",
"guidance": "모바일은 회원 목록에서 상세로 이동하고, lg 이상은 목록과 상세를 두 패널로 배치한다. 회원 상세 상단에 회원권 종류, 잔여 횟수, 유효기간을 표시하고 바로 아래에 진행 중 작품을 사진과 현재 제작 단계로 보여준다. 잔여 횟수 변경에는 변경 사유와 전후 값 확인을 요구하며 자동 차감 기능은 제공하지 않는다."
},
{
"screenId": "my-works",
"guidance": "진행 중 작품과 완성 작품을 구분한다. 작품 카드는 사진, 작품 번호, 회원용 진행 문구, 예상 완성 시점 또는 완성을 표시한다. 상세 선반 칸, 내부 작업 메모, 다른 회원의 작품과 회원권 정보는 노출하지 않는다. 예상 완성 시점이 계산되지 않으면 공방에서 확인 중이라고 표시한다."
},
{
"screenId": "next-kiln-candidates",
"guidance": "초벌 대기와 재벌 대기를 첫 탭부터 분리하고 동시에 선택할 수 없게 한다. 작품 사진, 작품 번호, 선반 칸, 대기 기간, 크기와 높이 입력값, 관련 선반 사진을 비교한다. 크기·높이가 없으면 미입력 배지를 표시하되 후보 선택 차단 여부는 확인 필요로 둔다. 후보 선택 결과만 저장하며 가마 배치, 적재, 가마 회차와 소성 계획 화면은 만들지 않는다."
},
{
"screenId": "studio-workflow-settings",
"guidance": "대표 운영자만 수정할 수 있게 하고 보조 강사에게는 필요 시 읽기 전용으로 표시한다. 건조·초벌 대기·초벌 완료·시유·재벌 대기·완성별로 선반, 선반 칸과 단계별 기본 소요 기간을 설정한다. 작품이 남은 선반이나 선반 칸 삭제는 막고 연결 작품과 이동 필요 내용을 보여준다. 저장 후 예상 완성 시점 재계산이 필요한 범위를 안내한다."
},
{
"screenId": "initial-setup",
"guidance": "공방 작업 기준 설정, 회원 등록, 현재 보관 중인 작품 등록, 등록 범위 확인의 단계형 흐름을 사용한다. 각 단계는 자동 저장하고 중단 후 이어서 진행한다. 마지막 화면에서 단계별 작품 수, 선반 칸 미등록, 사진 미등록, 중복 작품 번호를 요약한다. 현재 보관 중인 작품 전체를 옮길지 여부는 확인 필요 항목으로 표시하고 대표 운영자가 등록 범위를 확인한 뒤 운영을 시작한다."
}
],
"assets": [
"가정: 별도 로고가 제공되지 않았으므로 첫 버전 헤더는 생활도자 공방 이름을 텍스트 워드마크로 표시한다.",
"24px 기준의 일관된 선형 SVG 아이콘 세트: 검색, 카메라, 사진, 작품, 회원, 선반, 건조, 초벌, 시유, 재벌, 완성, 달력, 이력, 경고, 설정.",
"현재 제작 단계별 아이콘은 색상 없이도 구분되는 서로 다른 실루엣을 사용한다.",
"작품 사진 미등록 placeholder는 실제 작품처럼 오인될 수 있는 예시 사진 대신 카메라 아이콘과 작품 사진 없음 문구를 사용한다.",
"선반 사진 미등록 placeholder는 격자 형태의 선반 아이콘과 선반 사진 없음 문구를 사용한다.",
"권장: 목록용 정사각형 미리보기와 상세용 원본 비율 이미지를 별도로 제공해 모바일 로딩을 줄인다.",
"작품 사진과 선반 사진은 인증된 요청에만 제공되는 보호 자산으로 처리하고 공개 고정 주소를 화면에 노출하지 않는다.",
"초기 설정과 빈 화면에는 장식용 스톡 사진보다 다음 행동을 설명하는 단순 SVG 안내 그림을 사용한다."
],
"sources": [
{
"title": "Web Content Accessibility Guidelines (WCAG) 2.1",
"url": "https://www.w3.org/TR/WCAG21/",
"note": "명도 대비, 키보드 접근, 상태 전달, 오류 식별 등 WCAG 2.1 AA 접근성 기준에 사용했다."
},
{
"title": "Pretendard",
"url": "https://github.com/orioncactus/pretendard",
"note": "별도 글꼴 지시가 없을 때 적용하는 한글 기본 글꼴의 배포 및 사용 정보를 확인하는 기준이다."
},
{
"title": "스마트스토어 고객센터",
"url": "https://help.sell.smartstore.naver.com/faq/content.help?faqId=3389",
"note": "제공된 UI/UX 조사에서 한국 운영 도구의 목록, 검색, 선택 후 일괄 처리 패턴을 검토하기 위한 참고 자료로 제시됐다. 생활도자 공방 고유 기능의 근거로 직접 전용하지 않았다."
},
{
"title": "Cafe24-마켓플러스",
"url": "https://shopcafe.cafe24.com/mp/guide/front/guide07",
"note": "제공된 UI/UX 조사에서 다수 항목을 관리하는 운영 화면의 필터와 일괄 작업 구조를 참고하는 자료로 사용했다."
},
{
"title": "알림톡 - 카카오비즈니스",
"url": "https://business.kakao.com/info/bizmessage/",
"note": "카카오톡 완성 알림은 사업자 채널과 템플릿 승인 이후의 후속 범위임을 확인하는 참고 자료다. 첫 버전 UI에는 실제 발송 기능을 포함하지 않는다."
}
]
}디자인 가이드 원문 전체 보기
UI/UX 디자인 가이드
1. 디자인 방향
가정: 별도 브랜드 아이덴티티가 제공되지 않았으므로 흙과 유약에서 가져온 차분한 색을 사용하되, 공방 감성보다 현장 가독성과 빠른 처리를 우선한다. 작품 번호를 모든 운영 화면의 가장 강한 시각적 기준으로 삼고 사진, 현재 제작 단계, 선반 칸을 한 묶음으로 표시한다. 운영자 화면은 흙이 묻은 손으로도 누르기 쉬운 큰 조작 영역과 짧은 입력 흐름을 사용한다. 회원 화면은 내부 선반 정보와 작업 메모를 숨기고 사진, 쉬운 진행 설명, 예상 완성 시점을 중심으로 구성한다.
무드 키워드: 작품 번호 중심 · 현장 모바일 우선 · 사진 기반 식별 · 현재 제작 단계와 선반 칸 동시 확인 · 초벌 대기와 재벌 대기 분리 · 여러 작품 일괄 변경 · 부분 실패가 보이는 안전한 처리 · 차분한 흙과 유약 색상 · 회원용 쉬운 진행 안내 · 공방별 작업 기준 설정
업계 조사에서 반영한 점
- 제품 요구 기준으로 작품의 현재 제작 단계와 실제 선반 칸은 서로 다른 정보이며, 등록·이동·일괄 변경 화면에서 함께 확인하고 변경 이력을 각각 남겨야 한다.
- 작품 번호는 굽 바닥에 새긴 2608-01 형식을 기본으로 하며, 운영 화면의 검색 결과와 목록에서 회원명보다 먼저 보여야 한다.
- 운영자는 수업 직후 여러 작품을 등록하므로 최근 선택 회원 유지, 다음 작품 번호 제안, 모바일 사진 촬영, 저장하고 다음 등록 흐름이 필요하다.
- 월 50~150점 규모에서는 전체 통계보다 작품 번호 검색, 단계 탭, 선반 칸 필터, 체크박스 선택과 일괄 변경 진입이 먼저 보여야 한다.
- 초벌 대기와 재벌 대기는 소성 조건이 달라 같은 후보 목록에 섞지 않는다. 다음 가마 후보 비교 화면도 두 탭을 명확히 분리한다.
- 여러 작품 상태 한꺼번에 변경은 적용 전 대상 수와 변경 전후 값을 검토하고, 적용 후 성공·실패 작품 번호와 실패 이유를 나눠 보여줘야 한다.
- 대표 운영자와 보조 강사가 동시에 수정할 수 있으므로 저장 충돌은 일반 오류가 아니라 최신 내용을 비교하는 전용 상태로 표시해야 한다.
- 회원 전용 내 작품 조회는 운영자용 현재 제작 단계를 쉬운 문장으로 설명하고, 상세 선반 칸·다른 회원 작품·내부 메모는 노출하지 않는다.
- 예상 완성 시점은 운영자 화면과 회원 화면에서 같은 서버 계산 결과를 사용하고, 계산 기준이 없으면 임의 날짜 대신 확인 필요를 표시한다.
- 작품 사진과 선반 사진은 현장 모바일 웹에서 바로 촬영할 수 있어야 하며, 목록에서는 작은 미리보기를 사용하고 상세에서 원본 비율로 확대한다.
- 공정별 선반과 선반 칸은 자유 입력보다 설정된 선택값을 사용한다. 현재 제작 단계와 맞지 않는 선반 칸은 비활성화하고 이유를 표시한다.
- 확인 필요: 일곱 자 작품 번호와 월 작품 약 130점 조건은 숫자 순번 01~99만으로 동시에 충족할 수 없다. 99 이후 번호 규칙을 확정하기 전에는 UI가 임의의 영문 조합을 사실상 표준으로 강제하지 않는다.
- 확인 필요: 다음 가마 후보 비교에 크기와 높이의 수치 입력을 필수로 할지 확정되지 않았다. 첫 구현에서는 입력란과 미입력 표시를 제공하되 후보 선택을 막는 조건은 확정 후 적용한다.
2. 레이아웃 전략
- 방식: Mobile first
- 근거: SRS에서 공방 현장의 모바일 웹을 우선 사용 환경으로 지정했고, 작품 번호 검색·사진 촬영·단계 변경·선반 칸 선택을 현장에서 수행한다. 기본 화면은 한 손 조작이 가능한 단일 열 카드와 하단 고정 작업 영역으로 구성한다. md 이상에서는 필터와 상세 정보를 넓히고, lg 이상에서는 단계별 작품 목록을 12열 그리드 기반 표로 전환해 다중 선택과 비교 효율을 높인다. 데스크톱에서도 모바일과 같은 기능 및 용어를 유지하며 별도 제품으로 분리하지 않는다.
- 좁은 화면에서도 핵심 조회·입력·처리를 제거하지 않습니다.
- 최대 콘텐츠 폭: 1280px
- 그리드: 모바일 4열 / 데스크톱 12열 / 기본 단위 4px
- Breakpoint: sm 480px, md 768px, lg 1024px, xl 1440px
3. 컬러 시스템
| 토큰 | 값 | 용도 |
|---|---|---|
| Canvas | #F7F4EE | 전체 화면 배경. 흙의 온기를 반영하되 사진과 흰색 카드가 구분되도록 사용한다. |
| Surface | #FFFFFF | 카드, 표, 입력 영역, 대화상자 배경. |
| TextPrimary | #1F2925 | 작품 번호, 제목, 주요 데이터와 본문 기본 글자. |
| TextSecondary | #59645F | 보조 설명, 변경 시각, 회원 식별 정보. 작은 글자에서도 Canvas 또는 Surface 위 명도 대비를 유지한다. |
| Border | #D5DDD8 | 카드와 표 구분선, 입력 테두리, 비활성 칸 경계. |
| Primary | #255F52 | 주요 버튼, 선택 상태, 완성 배지 텍스트, 운영자 핵심 링크. |
| PrimaryHover | #194B40 | 주요 버튼의 hover와 pressed 상태. |
| PrimarySoft | #E2F0EB | 선택된 탭·필터, 완성 상태 배경, 회원 화면의 진행 강조. |
| DryText | #854A0E | 건조 배지의 텍스트와 아이콘. |
| DrySoft | #FEF0C7 | 건조 배지 배경. |
| BisqueText | #9C2A10 | 초벌 대기와 초벌 완료 배지의 텍스트와 아이콘. 두 단계는 문구와 아이콘 모양을 함께 달리한다. |
| BisqueSoft | #FEE4E2 | 초벌 대기와 초벌 완료 배지 배경. |
| GlazeText | #026AA2 | 시유 배지의 텍스트와 아이콘. |
| GlazeSoft | #E0F2FE | 시유 배지 배경. |
| RefireText | #6941C6 | 재벌 대기 배지의 텍스트와 아이콘. |
| RefireSoft | #F4EBFF | 재벌 대기 배지 배경. |
| Warning | #8A4B08 | 위치 미지정, 사진 미등록, 기간 만료, 설정 미완료 경고의 텍스트와 아이콘. |
| WarningSoft | #FFF3D6 | 주의 배너와 경고 배지 배경. |
| Error | #B42318 | 중복 작품 번호, 저장 실패, 접근 거부, 일괄 변경 실패와 파괴적 작업. |
| ErrorSoft | #FEE4E2 | 오류 메시지와 실패 결과 행 배경. |
| Focus | #175CD3 | 키보드 초점 링, 현재 입력 위치, 정보성 링크. 상태 구분 색상으로 단독 사용하지 않는다. |
상태는 색상만으로 구분하지 않고 아이콘·문구·테두리를 함께 사용합니다.
4. 타이포그래피
- 한글 기본: Pretendard Variable
- 대체 글꼴: Pretendard, Apple SD Gothic Neo, Noto Sans KR, Malgun Gothic, sans-serif
- 본문 자간:
-0.01em - 제목 자간:
-0.025em - 본문 행간:
1.6
5. 간격·형태
- 간격: 4px, 8px, 12px, 16px, 20px, 24px, 32px, 40px, 48px, 64px
- 모서리: sm 8px, md 12px, lg 16px, full 9999px
6. 컴포넌트와 상태
AppShell
- 변형: operator, member, initialSetup
- 상태: default, loading, accessDenied
- 적용: 모바일 운영자 화면은 상단 공방명과 검색 진입, 하단에 대시보드·작품·회원·더보기 내비게이션을 둔다. lg 이상에서는 왼쪽 내비게이션과 상단 검색으로 전환한다. 회원 화면은 내 작품 조회에 필요한 최소 내비게이션만 제공한다.
Button
- 변형: primary, secondary, tertiary, destructive, fullWidth
- 상태: default, hover, focusVisible, pressed, disabled, loading
- 적용: 최소 높이는 44px이며 모바일 주요 완료 버튼은 48px을 권장한다. 버튼 문구는 저장, 12점 변경, 작품 등록처럼 결과를 구체적으로 쓴다. 로딩 중 중복 제출을 막되 현재 작업 문구를 유지한다.
IconButton
- 변형: default, outlined, destructive
- 상태: default, hover, focusVisible, pressed, disabled
- 적용: 터치 영역은 최소 44×44px이다. 아이콘만 사용할 때 접근 가능한 이름을 제공하고, 삭제·닫기 외에는 가능하면 짧은 텍스트를 함께 표시한다.
WorkNumberSearch
- 변형: dashboard, listHeader, detail
- 상태: empty, typing, loading, matched, partialMatches, noResult, error
- 적용: 작품 번호 입력을 첫 초점 대상으로 제공한다. 숫자와 하이픈 입력을 지원하고, 하이픈 없이 입력해도 서버 검색 결과를 반환할 수 있게 한다. 검색 결과에는 작품 번호, 사진, 회원, 현재 제작 단계, 선반 칸을 같은 영역에 표시한다.
StageSummaryCard
- 변형: 건조, 초벌 대기, 초벌 완료, 시유, 재벌 대기, 완성, attention
- 상태: default, hover, focusVisible, selected, loading
- 적용: 현재 제작 단계명과 작품 점수를 함께 표시하고 누르면 해당 필터가 적용된 단계별 작품 목록으로 이동한다. 초벌 대기와 재벌 대기는 인접 카드로 배치하되 서로 다른 색과 문구로 구분한다.
StageTabs
- 변형: scrollable, segmented, kilnSeparated
- 상태: default, selected, focusVisible, disabled
- 적용: 모바일에서는 가로 스크롤을 허용하되 선택 탭이 화면 안으로 자동 이동한다. 탭에는 단계명과 작품 수를 함께 표시한다. 다음 가마 후보 비교에서는 초벌 대기와 재벌 대기 두 탭만 제공한다.
FilterBar
- 변형: mobileSheet, desktopInline
- 상태: default, applied, loading, emptyResult
- 적용: 작품 번호, 회원, 현재 제작 단계, 선반, 선반 칸을 필터로 제공한다. 적용된 조건은 삭제 가능한 칩으로 남기며 목록과 상세를 오간 뒤에도 이전 필터를 복원한다.
WorkCollection
- 변형: mobileCards, tabletRows, desktopTable, kilnComparison
- 상태: loading, populated, empty, error, selectionMode
- 적용: 모바일 카드는 작품 번호, 정사각형 사진, 현재 제작 단계, 선반 칸, 회원 순서로 표시한다. lg 이상 표는 선택, 작품 번호, 사진, 현재 제작 단계, 선반 칸, 회원, 예상 완성 시점 순으로 고정한다. 표의 작품 번호와 선반 칸은 줄바꿈하지 않는다.
WorkCard
- 변형: operator, member, compact, candidate
- 상태: default, selected, focusVisible, missingPhoto, missingLocation, stale, disabled
- 적용: 운영자용은 작품 번호를 가장 크게 표시하고 회원, 현재 제작 단계, 선반 칸을 함께 보여준다. 회원용은 작품 사진, 쉬운 진행 문구, 예상 완성 시점과 완성 여부만 보여주며 선반 칸과 내부 메모를 숨긴다.
StatusBadge
- 변형: 건조, 초벌 대기, 초벌 완료, 시유, 재벌 대기, 완성, 위치 미지정, 기간 만료, 확인 필요
- 상태: default, compact
- 적용: 색상, 텍스트, 단계별 아이콘을 함께 사용한다. 초벌 대기와 초벌 완료처럼 색이 같은 배지는 문구와 아이콘으로 구분한다. 배지만으로 핵심 정보를 전달하지 않고 주변에 현재 제작 단계 레이블을 제공한다.
SelectionControl
- 변형: checkbox, selectAllPage, selectAllFiltered
- 상태: unchecked, checked, indeterminate, focusVisible, disabled
- 적용: 모바일에서 체크 영역 전체를 44px 이상으로 제공한다. 현재 화면 전체 선택과 검색 결과 전체 선택을 구분하고, 선택한 작품 수를 항상 함께 표시한다.
BulkActionBar
- 변형: mobileBottom, desktopTop, review
- 상태: hidden, active, submitting, partialSuccess, success, failure
- 적용: 하나 이상의 작품이 선택되면 고정 표시한다. 선택 작품 수, 단계 변경, 선반 칸 이동, 선택 해제를 제공한다. 모바일에서는 안전 영역을 반영하며 목록의 마지막 행을 가리지 않도록 하단 여백을 추가한다.
FormField
- 변형: text, number, date, select, textarea
- 상태: default, focus, filled, disabled, readOnly, error, success
- 적용: 레이블을 항상 표시하고 placeholder만으로 항목을 설명하지 않는다. 오류는 입력 바로 아래에 원인과 수정 방법을 표시한다. 숫자 입력은 모바일 숫자 키패드를 사용하되 단위와 허용 범위를 화면에 명시한다.
WorkNumberInput
- 변형: new, correction, initialSetup
- 상태: suggested, checking, available, duplicate, invalidFormat, conflict
- 적용: 2608-01 형식과 최대 일곱 자 조건을 입력 가까이에 표시한다. 자동 제안값은 운영자가 수정할 수 있어야 한다. 정정 화면은 이전 번호를 읽기 전용으로 보여주고 저장 전 새 번호와 변경 이력 생성을 확인한다. 월 99점 이후 규칙은 확인 필요로 처리한다.
MemberPicker
- 변형: recentFirst, search, inlineCreate
- 상태: empty, searching, results, selected, duplicateName, noResult, disabled
- 적용: 검색 결과에는 회원명과 마스킹된 식별 정보, 현재 보관 작품 수를 함께 표시한다. 동명이인은 이름만으로 선택할 수 없게 한다. 작품을 연속 등록할 때 선택 회원 유지 여부를 명확히 보여준다.
PhotoUploader
- 변형: workPhoto, shelfPhoto, gallery
- 상태: empty, capturing, uploading, uploaded, reordering, failed, permissionDenied
- 적용: 모바일에서 카메라 촬영과 앨범 선택을 모두 제공한다. 업로드 진행률, 재시도, 대표 사진을 표시한다. 사진 업로드 실패 시 입력한 나머지 정보를 잃지 않으며, 권한 확인을 거친 주소로만 이미지를 제공한다.
StageShelfPicker
- 변형: stacked, bottomSheet, desktopPanel
- 상태: empty, stageSelected, shelfSelected, cellSelected, unavailable, invalidCombination
- 적용: 현재 제작 단계 선택 후 해당 단계에 연결된 선반과 선반 칸만 보여준다. 선택 결과는 초벌 대기 2번 선반 1칸처럼 전체 경로로 확인시킨다. 사용할 수 없는 선반 칸은 숨기지 말고 비활성화 사유를 제공한다.
ShelfGrid
- 변형: picker, settings, photoReference
- 상태: empty, available, occupied, selected, disabled, deletionBlocked
- 적용: 선반 칸을 실제 배열에 가까운 격자로 보여주되 칸 번호를 항상 표시한다. 수용량은 기준이 제공된 경우에만 표시한다. 작품이 남은 선반 칸 삭제 시 이동이 필요하다는 안내와 연결 작품 목록을 제공한다.
EstimateDate
- 변형: operator, member, completed, unknown
- 상태: calculated, kilnDatePriority, recalculating, missingRule, completed
- 적용: 운영자에게는 날짜와 계산 기준을 함께 보여주고, 회원에게는 예상 완성 시점과 변경 가능성을 쉬운 문장으로 표시한다. 완성 작품은 날짜 대신 완성을 표시한다. 계산 기준이 없으면 임의 날짜를 만들지 않고 확인 필요를 표시한다.
MemberSummaryCard
- 변형: list, detail, workContext
- 상태: active, expired, inactive, loading, conflict
- 적용: 회원명, 회원권 종류, 잔여 횟수, 유효기간, 진행 중 작품 수를 표시한다. 잔여 횟수 변경은 변경 사유 입력과 전후 값 검토를 거치며 음수 저장을 막는다.
DetailHeader
- 변형: work, member, settings
- 상태: default, editing, staleData
- 적용: 작품 상세에서는 작품 번호, 현재 제작 단계, 회원명과 상태·선반 칸 변경 버튼을 첫 화면에 배치한다. 다른 사용자가 수정한 상태이면 저장을 덮어쓰지 말고 최신 내용 확인 버튼을 표시한다.
HistoryTimeline
- 변형: stage, location, workNumber, membership
- 상태: collapsed, expanded, loading, empty
- 적용: 변경 시각, 변경자, 이전 값, 새 값을 텍스트로 표시한다. 상태 색만으로 전후를 구분하지 않는다. 모바일 기본은 최근 이력 세 건이며 전체 보기를 제공한다.
ReviewDialog
- 변형: bottomSheet, modal, destructive
- 상태: open, submitting, success, partialSuccess, failure
- 적용: 일괄 변경 전 작품 수, 현재 제작 단계 분포, 새 단계, 새 선반 칸을 검토한다. 파괴적 작업은 대상 이름을 다시 표시한다. 닫은 뒤에는 호출한 요소로 키보드 초점을 되돌린다.
BulkResultSummary
- 변형: success, partialSuccess, failure
- 상태: collapsed, expanded
- 적용: 성공·실패 건수를 분리하고 실패 작품 번호와 이유를 행 단위로 제공한다. 실패가 있어도 성공 항목을 실패처럼 표시하지 않는다. 결과 목록을 닫기 전 다시 처리할 작품을 선택할 수 있게 한다.
WizardStepper
- 변형: initialSetup, settings
- 상태: notStarted, current, completed, incomplete, blocked
- 적용: 공방 작업 기준, 회원, 현재 작품, 등록 범위 확인 순서를 표시한다. 각 단계는 자동 저장하며 중단 후 이어서 진행할 수 있게 한다. 완료 표시는 필수 데이터 검사를 통과한 경우에만 적용한다.
FeedbackMessage
- 변형: inline, banner, toast
- 상태: info, success, warning, error
- 적용: 폼 오류는 inline, 화면 전체 상태는 banner, 방금 끝난 단순 작업은 toast를 사용한다. 저장 실패와 부분 실패는 자동으로 사라지는 toast만 사용하지 않는다. 보조 기술이 결과를 읽을 수 있도록 적절한 live region을 적용한다.
LoadingAndEmptyState
- 변형: skeleton, empty, noSearchResult, accessDenied, networkError
- 상태: visible, retrying
- 적용: 빈 목록과 검색 결과 없음은 구분한다. 검색 결과 없음에는 입력 번호를 유지하고 다시 검색 또는 작품 등록으로 이동하는 행동을 제공한다. 스켈레톤은 실제 카드와 표 구조를 따라 레이아웃 이동을 줄인다.
7. 화면별 적용
operator-dashboard · 운영자 대시보드
첫 영역에 작품 번호 검색을 배치한다. 다음으로 건조·초벌 대기·초벌 완료·시유·재벌 대기·완성 수, 위치 미등록과 설정 미완료 항목을 보여준다. 다음 가마 후보는 초벌 대기와 재벌 대기를 분리해 진입시킨다. 회원 검색 결과에서 회원권 잔여 횟수를 바로 확인할 수 있는 축약 영역을 제공해 작품 진행 상태, 다음 가마 후보, 회원권 정보를 한 화면에서 시작할 수 있게 한다.
stage-work-list · 단계별 작품 목록
상단에 현재 제작 단계 탭과 작품 수, 작품 번호 검색, 선반·선반 칸·회원 필터를 둔다. 모바일 카드는 작품 번호와 선반 칸을 가장 크게 보여주고, lg 이상 표는 선택 체크박스와 작품 번호 열을 고정한다. 선택 항목과 필터는 작품 상세를 다녀와도 유지한다.
work-form · 작품 등록·수정
입력 순서는 회원, 작품 번호, 작품 사진, 현재 제작 단계, 선반과 선반 칸, 선택 항목인 크기·높이와 가마 예정일로 한다. 작품 번호는 다음 번호를 제안하되 굽 바닥의 실제 번호와 대조하게 하고 중복을 즉시 검사한다. 현재 제작 단계를 고르면 유효한 선반 칸만 표시한다. 신규 등록에는 저장하고 다음 작품 등록과 저장 후 상세 보기 버튼을 제공한다.
work-search-detail · 작품 번호 검색과 작품 상세
상단 검색창 아래에 작품 번호, 사진, 회원, 현재 제작 단계, 선반 칸, 예상 완성 시점을 첫 화면에서 모두 확인하게 한다. 상태 변경과 선반 칸 이동을 주요 버튼으로 제공하고, 회원권 잔여 횟수는 운영자에게만 요약 표시한다. 아래에는 단계·위치·작품 번호 정정 이력을 시간순으로 제공한다.
bulk-status-change · 여러 작품 상태 한꺼번에 변경
선택 작품 수와 현재 제작 단계 분포를 상단에 고정한다. 새 현재 제작 단계를 선택하면 해당 단계의 선반과 선반 칸만 선택할 수 있게 한다. 저장 전 작품 번호, 현재 값, 변경 후 값을 검토하고, 저장 후 성공과 실패를 분리해 실패 작품 번호와 이유를 보여준다. 다른 사용자의 최신 수정과 충돌한 작품은 덮어쓰지 않는다.
member-list-detail · 회원 목록과 회원 상세
모바일은 회원 목록에서 상세로 이동하고, lg 이상은 목록과 상세를 두 패널로 배치한다. 회원 상세 상단에 회원권 종류, 잔여 횟수, 유효기간을 표시하고 바로 아래에 진행 중 작품을 사진과 현재 제작 단계로 보여준다. 잔여 횟수 변경에는 변경 사유와 전후 값 확인을 요구하며 자동 차감 기능은 제공하지 않는다.
my-works · 회원 전용 내 작품 조회
진행 중 작품과 완성 작품을 구분한다. 작품 카드는 사진, 작품 번호, 회원용 진행 문구, 예상 완성 시점 또는 완성을 표시한다. 상세 선반 칸, 내부 작업 메모, 다른 회원의 작품과 회원권 정보는 노출하지 않는다. 예상 완성 시점이 계산되지 않으면 공방에서 확인 중이라고 표시한다.
login-access · 로그인과 회원 본인 확인
대표 운영자·보조 강사 로그인과 회원 본인 확인을 같은 화면 안에서 명확한 탭으로 분리한다. 운영 계정은 로그인 정보, 회원은 공방이 전달한 초대 주소와 최초 접근 코드를 사용한다. 오류 시 어떤 정보가 틀렸는지 과도하게 노출하지 않으며, 성공하면 역할에 맞는 화면으로 즉시 이동한다.
next-kiln-candidates · 다음 가마 후보 비교
초벌 대기와 재벌 대기를 첫 탭부터 분리하고 동시에 선택할 수 없게 한다. 작품 사진, 작품 번호, 선반 칸, 대기 기간, 크기와 높이 입력값, 관련 선반 사진을 비교한다. 크기·높이가 없으면 미입력 배지를 표시하되 후보 선택 차단 여부는 확인 필요로 둔다. 후보 선택 결과만 저장하며 가마 배치, 적재, 가마 회차와 소성 계획 화면은 만들지 않는다.
studio-workflow-settings · 공방 작업 기준 설정
대표 운영자만 수정할 수 있게 하고 보조 강사에게는 필요 시 읽기 전용으로 표시한다. 건조·초벌 대기·초벌 완료·시유·재벌 대기·완성별로 선반, 선반 칸과 단계별 기본 소요 기간을 설정한다. 작품이 남은 선반이나 선반 칸 삭제는 막고 연결 작품과 이동 필요 내용을 보여준다. 저장 후 예상 완성 시점 재계산이 필요한 범위를 안내한다.
initial-setup · 초기 설정
공방 작업 기준 설정, 회원 등록, 현재 보관 중인 작품 등록, 등록 범위 확인의 단계형 흐름을 사용한다. 각 단계는 자동 저장하고 중단 후 이어서 진행한다. 마지막 화면에서 단계별 작품 수, 선반 칸 미등록, 사진 미등록, 중복 작품 번호를 요약한다. 현재 보관 중인 작품 전체를 옮길지 여부는 확인 필요 항목으로 표시하고 대표 운영자가 등록 범위를 확인한 뒤 운영을 시작한다.
8. 에셋과 모션
- 가정: 별도 로고가 제공되지 않았으므로 첫 버전 헤더는 생활도자 공방 이름을 텍스트 워드마크로 표시한다.
- 24px 기준의 일관된 선형 SVG 아이콘 세트: 검색, 카메라, 사진, 작품, 회원, 선반, 건조, 초벌, 시유, 재벌, 완성, 달력, 이력, 경고, 설정.
- 현재 제작 단계별 아이콘은 색상 없이도 구분되는 서로 다른 실루엣을 사용한다.
- 작품 사진 미등록 placeholder는 실제 작품처럼 오인될 수 있는 예시 사진 대신 카메라 아이콘과 작품 사진 없음 문구를 사용한다.
- 선반 사진 미등록 placeholder는 격자 형태의 선반 아이콘과 선반 사진 없음 문구를 사용한다.
- 권장: 목록용 정사각형 미리보기와 상세용 원본 비율 이미지를 별도로 제공해 모바일 로딩을 줄인다.
- 작품 사진과 선반 사진은 인증된 요청에만 제공되는 보호 자산으로 처리하고 공개 고정 주소를 화면에 노출하지 않는다.
- 초기 설정과 빈 화면에는 장식용 스톡 사진보다 다음 행동을 설명하는 단순 SVG 안내 그림을 사용한다.
- 기본 전환: 180ms cubic-bezier(0.2, 0, 0, 1)
prefers-reduced-motion사용자는 불필요한 움직임을 제거합니다.- 다크모드: 초기 범위에서 제외
9. 접근성
- KWCAG 2.2와 WCAG 2.1 AA를 기준으로 텍스트와 배경의 명도 대비를 맞춘다. 일반 텍스트는 4.5:1 이상, 큰 텍스트와 핵심 그래픽은 3:1 이상을 목표로 한다.
- 모든 터치 대상은 최소 44×44px로 만들고, 인접한 체크박스와 아이콘 버튼 사이에 최소 8px 간격을 둔다.
- 현재 제작 단계, 경고, 성공·실패는 색상만으로 구분하지 않고 텍스트, 아이콘 또는 패턴을 함께 사용한다.
- 키보드 초점은 Focus 색상의 2px 이상 외곽선과 충분한 간격으로 표시하며, 모달과 하단 시트 내부에 초점을 가두고 닫은 뒤 호출 위치로 되돌린다.
- 입력 항목에는 화면에 보이는 레이블을 제공하고 필수 여부, 단위, 형식 오류와 수정 방법을 입력 가까이에 표시한다.
- 작품 사진의 대체 텍스트에는 작품 번호와 사진 순서를 포함한다. 장식용 이미지는 빈 대체 텍스트를 사용한다.
- 표의 헤더와 데이터 셀을 의미상 연결하고, 모바일 카드 전환 후에도 작품 번호·현재 제작 단계·선반 칸의 읽기 순서를 유지한다.
- 검색, 저장, 사진 업로드, 일괄 변경 결과는 보조 기술이 인식할 수 있는 상태 메시지로 알린다. 실패 메시지는 자동으로 사라지지 않는다.
- 가로 스크롤 탭과 표에는 키보드 및 스크린 리더로 접근 가능한 대체 이동 방법을 제공한다.
- 사진 촬영 권한이 거부되거나 카메라를 사용할 수 없는 경우 앨범 업로드와 재시도 방법을 제공한다.
- 회원 전용 내 작품 조회에서는 내부 선반 칸과 다른 회원의 정보를 시각적으로 숨기는 데 그치지 않고 서버 권한 검사 결과에 따라 렌더링한다.
- 날짜는 2026년 8월 25일처럼 읽기 쉬운 형식을 사용하고, 예상 완성 시점의 기준과 변경 가능성을 텍스트로 제공한다.
- prefers-reduced-motion 설정이 있으면 화면 전환과 목록 재배치 애니메이션을 제거하고 즉시 상태를 갱신한다.
- 모바일 확대를 막지 않으며 200% 확대와 좁은 화면에서도 작품 검색, 조회, 저장과 일괄 변경의 핵심 기능을 사용할 수 있게 한다.
10. 구현 체크리스트
- 디자인 토큰을 CSS 변수 또는 Tailwind theme에 한 번만 정의합니다.
- Pretendard와 지정 자간이 모든 한글 화면에 적용되는지 확인합니다.
- 선택한 레이아웃 전략과 breakpoint가 화면마다 달라지지 않게 합니다.
- 버튼·입력·표·대화상자의 focus, disabled, error 상태를 확인합니다.
- 모바일과 데스크톱에서 핵심 사용자 흐름을 각각 끝까지 확인합니다.
조사 출처
- Web Content Accessibility Guidelines (WCAG) 2.1 — 명도 대비, 키보드 접근, 상태 전달, 오류 식별 등 WCAG 2.1 AA 접근성 기준에 사용했다.
- Pretendard — 별도 글꼴 지시가 없을 때 적용하는 한글 기본 글꼴의 배포 및 사용 정보를 확인하는 기준이다.
- 스마트스토어 고객센터 — 제공된 UI/UX 조사에서 한국 운영 도구의 목록, 검색, 선택 후 일괄 처리 패턴을 검토하기 위한 참고 자료로 제시됐다. 생활도자 공방 고유 기능의 근거로 직접 전용하지 않았다.
- Cafe24-마켓플러스 — 제공된 UI/UX 조사에서 다수 항목을 관리하는 운영 화면의 필터와 일괄 작업 구조를 참고하는 자료로 사용했다.
- 알림톡 - 카카오비즈니스 — 카카오톡 완성 알림은 사업자 채널과 템플릿 승인 이후의 후속 범위임을 확인하는 참고 자료다. 첫 버전 UI에는 실제 발송 기능을 포함하지 않는다.