화면을 만드는 일부터 알아볼까요?
이 자료는 앱을 만들거나 회사에서 디자인해 본 적이 없는 사람을 위한 안내서예요. 코드를 외우지 않아도 돼요. 같은 앱의 여러 화면을 어떻게 같은 기준으로 만들 수 있는지 이해하는 것이 목표예요.
예시는 봉사활동을 찾고 신청하는 화면으로 이어져요.
| 우리 앱의 화면 | 사용자가 하는 일 |
|---|---|
| 목록 | 참여할 봉사활동 찾기 |
| 상세 | 언제, 어디서 하는 활동인지 확인하기 |
| 신청 | 이름과 연락처를 적고 신청하기 |
DESIGN SYSTEM · BEGINNER GUIDE
v1.2 · 2026.10.26
화면 하나를 만드는 기초부터, 여러 화면의 공통 규칙을 정하고 AI와 실제 앱에 적용하는 방법까지. 실무 경험이 없어도 순서대로 따라갈 수 있어요.
이 자료는 앱을 만들거나 회사에서 디자인해 본 적이 없는 사람을 위한 안내서예요. 코드를 외우지 않아도 돼요. 같은 앱의 여러 화면을 어떻게 같은 기준으로 만들 수 있는지 이해하는 것이 목표예요.
예시는 봉사활동을 찾고 신청하는 화면으로 이어져요.
| 우리 앱의 화면 | 사용자가 하는 일 |
|---|---|
| 목록 | 참여할 봉사활동 찾기 |
| 상세 | 언제, 어디서 하는 활동인지 확인하기 |
| 신청 | 이름과 연락처를 적고 신청하기 |
| 단어 | 쉬운 뜻 | 예시 |
|---|---|---|
| UI · 사용자 인터페이스 | 사람이 보고 누르며 앱을 사용하는 부분 | 버튼, 글자, 입력창 |
| UX · 사용자 경험 | 목적을 이루는 과정에서 겪는 전체 경험 | 봉사활동을 쉽게 찾고 안심하고 신청하는가 |
| 화면 | 한 시점에 사용자에게 보여주는 구성 | 봉사활동 상세 화면 |
| 레이아웃 | 화면 안에 무엇을 어디에 놓는지 정한 배치 | 제목 위, 설명 중간, 신청 버튼 아래 |
| 구현 | 그림과 설명을 실제 동작하는 프로그램으로 만드는 일 | 신청 버튼을 누르면 신청 내용이 저장됨 |
| 명세 | 다른 사람이 추측 없이 만들 수 있게 적은 설명 | 버튼 높이, 색, 눌렀을 때 동작 |
목록은 민수, 상세는 지우, 신청은 AI가 만들었어요. 그런데 같은 ‘신청하기’ 버튼이 전부 달라요.
사용자는 어느 버튼이 중요한지 다시 배워야 해요. 만드는 사람도 버튼을 수정할 때 세 곳을 각각 고쳐야 해요. 화면이 30개라면 더 복잡해지겠죠.
| 레스토랑 | 앱을 만드는 팀 |
|---|---|
| 같은 계량 기준 | 색, 글자, 간격의 공통 값 |
| 정해진 조리법 | 버튼·입력창의 구성과 작동 규칙 |
| 주방 도구 | 화면에서 반복해 쓰는 UI 부품 |
| 알레르기·위생 안내 | 읽기·조작하기 쉬운 접근성 기준 |
| 조리법을 바꾸고 전달하는 과정 | 변경 승인, 배포, 업데이트 안내 |
| 자료 | 들어 있는 것 | 아직 결정해야 할 것 |
|---|---|---|
| 스타일 가이드 | 색·글꼴·브랜드 표현 기준 | 동작하는 부품과 사용·관리 방식 |
| UI Kit · UI 키트 | 버튼·입력창 등 화면 부품 모음 | 우리 앱에서 언제 어떻게 쓸지 |
| 디자인 시스템 | 기준·부품·사용 규칙·운영 방식 | 새로운 상황에 맞춰 계속 보완 |
새 앱이라면 대표 화면으로 디자인 방향을 먼저 확인하는 것이 좋아요. 하지만 모든 화면을 완성한 뒤에야 시스템을 시작할 수 있는 것은 아니에요. 처음부터 색과 글자 기준 몇 개를 잡고 화면을 만들면서 함께 발전시킬 수 있어요.
원본은 단순히 가장 먼저 만든 그림이 아니에요. 팀이 현재 기준으로 합의한 디자인이에요. 초안과 승인본을 구분하고, 버전과 바뀐 이유를 남겨야 해요.
| 지금 있는 자료 | 다음에 필요한 일 |
|---|---|
| 와이어프레임만 있다 | 색·글자·버튼을 포함한 대표 시각 디자인을 만든다. |
| 이미지 시안만 있다 | 실제 크기·간격·반복 규칙·상태를 정한다. |
| Figma Design 화면이 있다 | 쓰인 값과 부품을 조사하고 기준을 정리한다. |
| 실행되는 코드 시안이 있다 | 폰에서 확인하고 기준을 정한 뒤 재사용 구조로 정리한다. |
| 방법 | 잘 맞는 상황 | 유의할 점 |
|---|---|---|
| Figma Design에서 직접 만들기 | 배치·타이포·세부 모양을 직접 다듬고 싶을 때 | 빈 화면부터 어렵다면 구조가 단순한 UI Kit을 골라 시작한다. |
| Codex로 코드 시안 만들기 → Figma Design에서 정리 | 말로 요청하고 실제 눌러보며 방향을 찾고 싶을 때 | 가져온 화면을 컴포넌트와 변수에 맞춰 다시 정리해야 한다. |
| 기존 디자인 시스템/키트에서 출발 | 기간이 짧고 기본적인 앱 화면이 필요할 때 | 라이선스, 플랫폼, 필요한 부품과 상태를 확인한다. |
이번 수업 추천: 한 화면의 방향부터 고르세요. 전체 앱을 한 번에 생성한 뒤 전부 고치는 것보다 판단하기 쉬워요. 코드로 먼저 만들더라도 내용, 간격, 버튼 역할을 직접 결정하는 사람은 필요해요.
도구 기능 참고: Figma 공식 Code to canvas 안내. 코드 화면을 편집 가능한 레이어로 가져올 수 있지만, 기존 컴포넌트 연결까지 자동 완성된다고 볼 수는 없어요.
우리 앱의 목록 화면 시안 3개를 비교할 수 있게 만들어줘. 내용과 기능은 모두 같게 유지하고, 정보 배치와 글자 위계가 다른 방향으로 제안해줘. 기준 너비는 390 CSS px. 실제 기기에서도 읽고 누르기 쉬워야 해. 지금은 서버·로그인·데이터 저장 없이 샘플 내용으로 화면만 만들어줘. 각 시안이 어떤 사용자 행동을 돕는지 짧게 설명해줘. 내가 한 방향을 고른 뒤 나머지 화면으로 확장하자.
| 층 | 쉬운 뜻 | 앱에 적용하는 예 |
|---|---|---|
| 1. 방향 | 어떤 경험을 주려는가 | 처음 참여하는 사람도 안심하고 신청한다. |
| 2. 기초 기준 | 모든 화면이 공유할 값 | 본문 글자 16, 기본 화면 여백 16 |
| 3. 부품 | 여러 곳에서 재사용하는 단위 | 버튼, 입력창, 활동 카드 |
| 4. 조합 규칙 | 부품을 함께 사용하는 방식 | 신청 양식, 오류 안내, 삭제 확인 |
| 5. 운영 | 기준을 바꾸고 전달하는 방법 | 누가 승인하고 어느 화면을 고칠지 정함 |
토요일 10:00 · 2시간
글자: 제목·본문·보조 설명
색: 배경·글자·강조·테두리
간격: 화면 바깥 여백·카드 안 여백·요소 사이
부품: 상태표시·카드·버튼
규칙: 마감되면 모집 상태와 버튼 동작을 바꾼다.
매번 ‘배경에 #FFFFFF를 넣어’라고 쓰는 대신 surface라는 이름을 만들고 ‘카드 배경에는 surface를 써’라고 정해요. 토큰은 이름 붙인 값이고, 그 이름의 용도까지 기록하면 같은 판단을 반복하기 쉬워져요.
| 이름 | 값 | 쓰는 곳 |
|---|---|---|
| color/primary | #0F6E56 | 주요 행동 버튼의 배경 |
| color/on-primary | #FFFFFF | 주요 버튼 안의 글자 |
| color/text | #1F1E1D | 기본 본문과 제목 |
| space/page | 16 CSS px | 모바일 콘텐츠 좌우 여백 |
| type/body | 16 / 24 / 400 | 본문 크기 / 줄 높이 / 굵기 |
아래에서 주요 색을 바꿔 보세요. 세 화면의 버튼이 같은 토큰을 참조하고 있어서 함께 바뀌어요.
단, 값을 복사해 직접 붙여 넣은 요소는 함께 바뀌지 않아요. 이름을 붙이는 것과 실제로 연결하는 것은 별개의 일이에요.
| 이름 종류 | 쉬운 뜻 | 예시 |
|---|---|---|
| Primitive · 기본 값 | 색상표나 수치 자체를 부르는 이름 | green/700 = #0F6E56 |
| Semantic · 역할 | 이 값을 어떤 역할로 사용할지 정한 이름 | color/primary → green/700 |
| Component · 부품 전용, 선택 | 특정 부품에만 적용하는 세부 이름 | button/background → color/primary |
참조(alias)는 값을 복사하는 대신 다른 이름을 가리키게 하는 연결이에요. 브랜드색을 바꾸려면 primary가 가리키는 대상을 바꿔요.
| 표기 | 뜻 | 주의 |
|---|---|---|
| #0F6E56 | 색상을 적는 HEX 코드 | 색의 용도는 별도로 정해야 해요. |
| 16 / 24 / 400 | 글자 크기 16, 줄 높이 24, 굵기 400 | 글꼴 종류도 정해야 해요. |
| radius 12 | 모서리를 둥글게 하는 정도 12 | 상자 크기와 함께 보고 정해요. |
| CSS px | 웹에서 레이아웃을 정하는 논리 단위 | 실제 화면의 물리 픽셀이나 Android dp와 무조건 같지 않아요. |
같은 버튼을 열 번 새로 그리면 나중에 열 번 고쳐야 해요. 버튼 원형을 하나 만들고 그 원형에 연결된 버튼을 여러 화면에 쓰면, 공통 기준을 관리하기 쉬워져요.
| 단어 | 뜻 | 예 |
|---|---|---|
| 컴포넌트 | 반복해서 쓰는 UI 단위 | 신청 버튼 |
| 메인 컴포넌트 | Figma에서 부품의 공통 기준이 되는 원형 | 버튼 원형 |
| 인스턴스 | 원형에 연결된 사용본 | 상세 화면에 넣은 신청 버튼 |
| 코드 컴포넌트 | 실제로 동작하는 재사용 코드 | 여러 화면이 불러 쓰는 Button |
| 구분 | 질문 | 버튼 예시 |
|---|---|---|
| Anatomy · 구성 | 무엇으로 이루어졌나? | 배경, 문구, 선택적 아이콘 |
| Variant · 종류 | 어떤 용도·종류인가? | 주요 / 보조 / 위험 행동 |
| State · 상태 | 지금 어떤 상황인가? | 기본 / 눌림 / 처리 중 / 비활성 / 포커스 |
| Behavior · 동작 | 입력하면 무엇이 일어나나? | 신청 요청 중 중복 제출을 막고 결과를 알림 |
위험 버튼은 종류이고, 위험 버튼이 처리 중인 것은 상태예요. Figma에서는 상태를 Variant 속성으로 표현할 수도 있어요. 도구의 표현 방식과 개념을 구분하세요.
누르면 신청 요청을 시작할 수 있어요.
개념 설명용 모형이에요. 실제 신청은 일어나지 않아요.Contract는 거창한 법적 계약이 아니라, ‘이 부품을 이 조건으로 사용한다’는 약속이에요.
| 항목 | 신청 버튼 예 |
|---|---|
| 구성·표시 | 문구는 필수, 아이콘은 선택 |
| 종류·크기 | primary / secondary / danger, 크기는 기본 1종부터 |
| 상태·동작 | 처리 중 재제출 금지, 실패 시 재시도 가능 |
| 사용 규칙 | 주요 행동 한 영역에서 시각적 우선순위가 명확해야 함 |
| 구현 연결 | 실제 파일 위치와 허용 속성은 구현 코드를 확인해 기록 |
| 검증 | 키보드 조작, 중복 클릭, 긴 문구, 오류 복구 확인 |
Figma Design은 글자와 도형을 자유롭게 배치하고, 부품과 규칙을 관리하는 데 유용해요. Figma Make는 말로 요청해 코드 기반 화면을 만드는 도구예요. 같은 Figma 이름이 붙어도 역할이 달라요.
| 기능 | 쉬운 뜻 | 실제로 할 일 |
|---|---|---|
| Frame · 프레임 | 화면이나 묶음의 경계 | 목록·상세·신청 화면을 구분 |
| Auto layout · 자동 배치 | 내용에 따라 간격과 크기를 유지하는 배치 | 문구가 길어져도 버튼 여백 유지 |
| Variables · 변수 | 이름 붙여 저장하고 재사용하는 값 | 색·간격·모서리 값 연결 |
| Styles · 스타일 | 여러 속성을 묶은 설정 | 글꼴·크기·줄 높이, 그림자 조합 |
| Components · 컴포넌트 | 여러 화면에서 쓰는 공통 부품 | 버튼 원형과 연결된 사용본 |
| Library · 라이브러리 | 여러 파일·팀에 공유하는 자산 모음 | 승인된 변수·스타일·부품 공유 |
390 × 844 같은 기준 프레임은 작업용 기준이에요. 모든 폰을 이 비율로 늘려 보여준다는 뜻은 아니에요. 콘텐츠가 길면 세로로 스크롤하고, 너비가 달라지면 줄바꿈과 배치가 대응해야 해요.
| 정할 것 | 수업용 예시 |
|---|---|
| 기준 너비 | 390 CSS px |
| 확인할 너비 | 360 / 390 / 430 CSS px |
| 바깥 여백 | 좌우 16, 세로 콘텐츠는 필요하면 스크롤 |
| 가려지면 안 되는 것 | 제목·입력창·주요 버튼, 시스템 바·키보드와의 겹침 확인 |
지금까지 정한 디자인을 AI가 읽을 수 있게 모아요. 기준 화면, 토큰 목록, 사용 규칙을 연결하는 단계예요.
| 자료 | 알려주는 것 | 예시 |
|---|---|---|
기준 화면 | 무엇이 어디에 있고 어떻게 보이는지 | 화면 이미지 또는 Figma의 특정 프레임 |
토큰 목록 | 공통으로 사용할 값과 역할 | 주요 버튼 배경색, 본문 크기, 간격 |
배치·사용 규칙 | 값을 어디에 쓰고 내용이 바뀌면 어떻게 할지 | 카드 안쪽에 16 여백, 긴 제목은 줄바꿈 |
기능 설명 | 눌렀을 때 어떤 결과가 나와야 하는지 | 신청 → 처리 중 → 완료 또는 오류 안내 |
토큰이 16이라고 해서 어디를 16만큼 띄울지까지 정해지지는 않아요. “카드 안쪽 여백에 이 토큰을 사용한다”처럼 적용 위치도 적어야 해요.
프로젝트 폴더는 앱의 코드와 자료를 함께 두는 폴더예요. 아래 이름은 실습용 예시예요. 같은 역할의 파일이 이미 있다면 기존 파일과 위치를 사용하세요.
| 파일·폴더 예시 | 넣을 내용 |
|---|---|
design/screens/ | 목록·상세·신청 같은 기준 화면 이미지. Figma를 쓰면 특정 프레임 링크도 기록해요. |
design/assets/ | 실제로 사용할 사진·아이콘·로고 원본. 화면 캡처와는 별개예요. |
design/tokens.json | 확정한 토큰의 이름·값·용도. 기존 CSS·JSON·표가 있으면 그 파일을 사용해도 돼요. |
docs/PRD.md | 어떤 화면과 기능을 만들지 적은 기획 문서. |
docs/DESIGN.md | 기준 화면과 토큰의 위치, 배치·사용 규칙. |
docs/CONTRACT.md | 버튼·입력창 등 반복 부품의 사용 설명. 처음에는 DESIGN.md 안에 함께 적어도 돼요. |
AGENTS.md | AI가 먼저 읽을 자료와 작업 규칙. 프로젝트 맨 위에 두어요. |
.md는 제목·목록 등을 간단한 기호로 적는 Markdown 문서예요. 텍스트 문서라고 생각하면 돼요. 폴더와 문서 만들기도 AI에게 요청할 수 있어요.# 앱 디자인 기준 ## 기준 자료 - 기준 화면: [실제 Figma 프레임 링크 또는 이미지 위치] - 토큰 목록: [실제 파일 위치] - 부품 설명: [실제 파일 위치 또는 이 문서의 해당 항목] - 기준 너비: 390 CSS px. 360 / 390 / 430에서도 확인한다. ## 공통 배치 - 화면 콘텐츠는 좌우 16 CSS px 여백 안에 배치한다. - 활동 카드에는 제목, 시간·장소, 행동 버튼을 위에서 아래로 배치한다. - 긴 제목은 줄바꿈하고 카드 높이를 내용에 맞춰 늘린다. - 작은 화면에서도 글자와 버튼이 가로로 잘리지 않도록 한다. - 색과 간격에는 확정한 토큰을 연결해서 사용한다. ## 부품 사용 - 같은 역할의 버튼은 같은 코드 컴포넌트를 사용한다. - 문구가 다르다는 이유만으로 새 버튼을 만들지 않는다. - 처리 중에는 진행 상태를 표시하고 중복 요청을 막는다. - 실패하면 입력 내용을 유지하고 재시도 방법을 알린다. ## 아직 결정할 것 - [확인하지 못한 값·상태·자료] ## 변경 기록 - [날짜 / 바뀐 기준 / 이유 / 적용할 화면]
CONTRACT.md에는 “이 부품을 어떤 조건으로 어떻게 쓰는지”를 적어요. 파일 이름은 이 실습의 약속이며 필수 표준 이름은 아니에요.
| 적을 항목 | 신청 버튼 예시 |
|---|---|
구성 | 배경 + 문구. 필요하면 아이콘을 넣어요. |
종류 · Variant | 주요 행동(저장·신청), 보조 행동(취소), 위험 행동(삭제). 행동 이름 자체가 종류를 결정하는 것은 아니에요. |
상태 · State | 기본 / 누르는 중 / 처리 중 / 비활성 / 포커스 |
처리 중 | “신청 처리 중…”을 표시하고 중복 요청을 막아요. |
실패했을 때 | 입력 내용을 남기고 오류 문구와 재시도 방법을 보여줘요. |
문구가 길 때 | 글자와 아이콘이 겹치지 않도록 해요. 줄바꿈·높이 변경 규칙은 기준 디자인에서 정해요. |
코드의 설정값 · Prop | variant, disabled, loading 같은 이름은 예시예요. 구현 후 실제 코드에 맞춰 기록해요. |
실제 코드 위치 | 구현 전에는 “아직 없음”, 구현 후에는 실제 경로와 사용 예시를 적어요. |
실제 사용 장면을 떠올리면 무엇을 정해야 하는지 더 쉬워져요. 아래 세 가지는 사용 규칙의 예시예요. 본인 앱의 기획에 맞춰 조정하고, 실제 코드 위치와 설정값 이름은 구현 후 확인해서 적어요.
사용 상황: 사용자가 ‘신청하기’를 눌렀어요. 결과가 바로 나오지 않아서 버튼을 여러 번 누르려 해요.
CONTRACT.md에는 이렇게 적어요.
## 신청 버튼 - 쓰는 곳: 신청 화면 아래의 주요 행동 버튼. - 기본 모습: 기존 주요 버튼 스타일을 사용하고 “신청하기”를 표시한다. - 누르면: 신청 처리를 시작하고 “신청 처리 중…”으로 문구를 바꾼다. - 처리 중: 다시 눌러도 요청을 추가로 실행하지 않는다. - 성공하면: 기획에서 정한 신청 완료 안내를 보여준다. - 실패하면: 입력한 내용을 유지하고 오류 문구와 재시도 방법을 보여준다. - 다시 시도할 수 있으면: 문구를 “신청하기”로 돌리고 버튼을 누를 수 있게 한다. - 확인: 결과가 늦게 나올 때 여러 번 눌러도 신청 결과가 중복되지 않는지 본다.
버튼에서 연속 클릭을 막는 것과 실제 요청·저장이 중복되지 않게 처리하는 것은 함께 확인해야 해요. 부품의 표시 규칙과 앱의 처리 규칙을 연결하는 예예요.
사용 상황: 신청 화면에서 이름을 비워 둔 채 ‘신청하기’를 눌렀어요. 무엇을 고쳐야 하는지 알려줘야 해요.
CONTRACT.md에는 이렇게 적어요.
## 이름 입력창 - 구성: “이름”이라는 항목 이름 + 입력하는 칸 + 필요한 경우 오류 문구. - 처음 화면을 열면: 입력이 비어 있어도 오류부터 보여주지는 않는다. - 이름 없이 신청하면: 신청 처리를 시작하지 않고 입력창 아래에 “이름을 입력해 주세요”를 표시한다. - 공백만 입력한 경우도 이름을 적지 않은 것으로 본다. - 오류 모습: 정한 오류 테두리와 안내 문구를 함께 사용한다. 빨간색만으로 알리지 않는다. - 입력 중: 다른 항목에 이미 적은 내용은 그대로 유지한다. - 이름을 적고 다시 신청하면: 이 항목의 오류를 해제하고 다음 조건을 확인한다. - 확인: 빈칸·공백만 입력·이름 입력의 세 경우를 각각 시험한다.
사용 상황: 활동 목록에서 모집 중인 카드와 마감된 카드가 함께 보여요. 마감된 활동도 내용은 확인할 수 있어야 해요.
CONTRACT.md에는 이렇게 적어요.
## 활동 카드 - 구성: 활동 제목 + 시간·장소 + 모집 상태 + 상세 보기 경로 + 신청 버튼. - 모집 중이면: “모집 중”을 표시하고 신청 버튼을 사용할 수 있게 한다. - 마감되면: 상태를 “모집 마감”으로 바꾸고 신청 버튼을 비활성화한다. - 마감 이유: 버튼 근처에 “신청 기간이 끝났어요”를 표시한다. - 상세 정보: 마감됐어도 활동 제목의 상세 보기 경로는 사용할 수 있게 한다. - 제목이 길면: 줄바꿈하고 카드 높이를 내용에 맞춰 늘린다. - 여러 카드: 같은 카드 컴포넌트를 사용하고 제목·일정·모집 상태만 다르게 전달한다. - 확인: 모집 중/마감 두 경우와 긴 제목을 넣고, 상세 보기와 신청 동작을 따로 눌러 본다.
문서를 저장한 다음에는 AI가 실제로 읽었는지 확인해요. Codex에서는 AGENTS.md에 읽을 자료와 작업 규칙을 적어둘 수 있어요. Claude Code를 쓴다면 CLAUDE.md로 안내해요.
현재 열어 둔 프로젝트 폴더 안에 필요한 하위 폴더와 문서를 실제로 생성하고 디자인 자료를 정리해줘. 아직 화면 구현은 시작하지 마. 기존 폴더·파일이 있으면 그대로 사용하고, 없을 때만 만들어줘. 원본 자료가 없으면 빈 폴더를 자료가 준비된 것으로 표시하지 말고 필요한 파일을 알려줘. 1. 기준 화면, 토큰 목록, 사진·아이콘 원본, 기획 문서의 실제 위치를 찾아줘. 2. Figma 링크가 있다면 실제로 읽을 수 있는지 확인해줘. 읽지 못한 자료는 추측하지 말고 “읽지 못함”으로 표시해줘. 3. 확정한 토큰과 디자인을 바꾸지 말고 docs/DESIGN.md에 사용 규칙을 정리해줘. 4. 반복되는 버튼 하나의 구성·종류·상태·동작을 docs/CONTRACT.md에 정리해줘. 아직 코드가 없으면 코드 경로와 Prop 이름은 확정하지 마. 5. AGENTS.md에 UI 작업 전 위 자료를 읽고 기존 토큰·부품을 재사용하도록 안내해줘. 6. 같은 역할의 문서가 이미 있다면 기존 파일을 사용하고 위치를 알려줘. 마지막에 자료 / 실제 위치 / 읽기 성공 여부 / 아직 필요한 정보 표를 보여줘.
| 확인할 것 | 충분한 보고 | 다시 확인할 보고 |
|---|---|---|
자료 읽기 | 화면명·토큰 예시·실제 위치를 제시 | “자료 확인 완료”라는 말만 있음 |
빠진 자료 | 아이콘 원본이 없다고 표시 | 캡처 속 아이콘을 원본으로 확보했다고 말함 |
미정 항목 | 실패 안내를 질문으로 남김 | 실패 안내를 임의로 확정함 |
파일 연결 | 존재하는 문서 경로를 기록 | 존재하지 않는 예시 경로를 기록 |
Google Labs는 AI에게 시각적 기준을 전달하는 공개 DESIGN.md 형식을 제공해요. 직접 쓰는 설명 문서와 특정 도구가 검사하는 정식 형식은 구분하세요. 먼저 내용을 확정하고, 해당 도구를 쓸 때 그 버전의 명세에 맞추면 돼요.
| 항목 이름 | 적을 내용 |
|---|---|
Overview | 누구를 위한 앱인지, 어떤 인상을 주려는지 |
Colors | 색의 역할과 사용 위치 |
Typography | 제목·본문·설명 글자의 기준 |
Layout | 배치·간격·작은 화면 대응 |
Elevation & Depth | 그림자와 면으로 구분하는 단계 |
Shapes | 모서리·테두리·형태 |
Components | 부품 사용법과 코드 위치 |
Do’s and Don’ts | 지킬 규칙과 피할 사용법 |
YAML은 이름과 값을 구조적으로 적는 표기이고, lint는 정해진 형식에 맞는지 검사하는 일이에요. 형식 검사를 통과해도 실제 화면이 잘 만들어졌다는 뜻은 아니에요.
7장에서 정리한 자료로 대표 화면 하나를 브라우저에서 실행되는 코드로 만들어요. 반복되는 버튼·카드를 재사용하도록 정리하고, 실제 동작 하나를 연결해요.
| 현재 자료 | 전달할 것 | 먼저 확인할 것 |
|---|---|---|
Figma 화면 | 특정 프레임 링크 + 토큰·부품 설명 위치 | 글자·배치·Variables·컴포넌트 중 실제로 읽은 정보를 보여 달라고 해요. |
화면 이미지 | 기준 너비 + 화면 이미지 + 토큰 목록 + 사진·아이콘 원본 | 이미지에서 확인한 값과 추정한 값을 나눠 달라고 해요. |
실행되는 코드 시안 | 그 프로젝트 폴더 + 기준 화면 + 확정한 규칙 | 기존 토큰·스타일·부품을 먼저 찾아 재사용할 위치를 알려 달라고 해요. |
이미지에는 원래 요소 이름이나 정확한 간격 값이 들어 있지 않을 수 있어요. 추정한 부분은 따로 확인하고 결정하세요. Figma 링크도 연결과 권한이 있어야 읽을 수 있어요.
Codex나 Claude Code에서 자료를 모아 둔 프로젝트 폴더를 열어요. 이미 코드가 있다면 같은 앱을 새로 만들지 말고 현재 프로젝트를 사용해요.
이 프로젝트의 기획·DESIGN.md·부품 설명과 기준 화면을 먼저 읽어줘. 이번에는 [화면 이름] 하나만 구현할 거야. 아직 코드를 수정하지 말고 아래를 정리해줘. - 실제로 읽은 디자인 자료와 읽지 못한 자료 - 기존 프로젝트를 실행하는 방법 - 토큰 코드와 공통 컴포넌트의 실제 위치 - 지금 재사용할 수 있는 것 / 아직 만들어야 하는 것 - 구현 전에 내가 결정해야 하는 항목 기존 코드가 없다면 화면 하나를 실행하는 데 필요한 최소 구성을 제안해줘. 설치가 필요하면 프로그램 이름·이유·설치 방법을 먼저 알려줘.
화면에서 뽑은 값은 조사 결과예요. 비슷한 초록 두 개를 합칠지, 서로 다른 역할로 유지할지는 직접 결정해야 해요.
| 진행 | 직접 결정할 것 | AI에게 맡길 일 |
|---|---|---|
조사 | 어느 화면이 기준인지 | 색·글자·간격·모서리·부품과 출처 정리 |
정리 | 합칠 값과 유지할 차이 | 중복 후보·예외·미정 항목 제시 |
제작 | 어느 화면·기능까지 만들지 | 확정한 기준으로 토큰·부품·화면 코드 제작 |
확인 | 실제로 사용하기 좋은지 | 기준 위반·누락·오류 후보 찾기 |
기준 화면에서 색·글자·간격·모서리·반복 부품을 조사해줘. 항목 / 확인한 값 / 어느 화면의 어느 요소인지 / 근거를 표로 보여줘. 이미지에서 추정한 값과 실제 자료에서 읽은 값을 구분해줘. 아직 값을 합치거나 디자인·코드를 바꾸지 마. 그다음 같은 역할인데 다른 값인 항목을 찾아 합칠 후보 / 유지할 차이 / 내가 결정할 항목으로 제안해줘. 내가 선택한 기준만 다음 작업에 반영해줘.
Figma Variable은 Figma 안의 값이에요. 웹에서는 코드가 읽을 수 있는 값이 필요해요. 같은 이름·역할을 맞춰 옮기고 화면이 그 값을 참조하도록 연결해요.
| 디자인에서 정한 것 | 웹 코드에 옮긴 예 | 연결할 곳 |
|---|---|---|
color/primary = #0F6E56 | --color-primary: #0F6E56; | 주요 버튼 배경에서 이 이름을 참조 |
주요 버튼 배경에 primary 사용 | background: var(--color-primary); | 재사용 Button의 주요 종류에 적용 |
카드 안쪽에 간격 토큰 사용 | 승인한 간격 토큰을 코드 이름에 대응 | 해당 카드의 padding에 연결 |
var(...)는 저장해 둔 공통 값을 가져다 쓰는 표기예요. 위 CSS 이름은 예시이며 기존 프로젝트의 토큰 이름이 있으면 그 이름을 유지하세요.Figma와 코드 사이의 자동 반영은 별도의 연결을 구성했을 때 가능해요. 지금은 어느 쪽을 변경하고 다른 쪽에 어떻게 반영할지 정해 관리하면 돼요.
확정한 DESIGN.md와 토큰 목록으로 [화면 이름] 하나를 구현해줘. 1. 현재 프로젝트의 실행 방식과 파일 구조를 유지해줘. 2. 토큰과 Button·Card 등 공통 컴포넌트가 있으면 먼저 재사용해줘. 3. 코드가 없다면 이 화면에 필요한 토큰과 반복 부품부터 만들어줘. 승인한 이름·값과 실제 코드의 대응표를 남겨줘. 새로운 디자인 값은 임의로 추가하지 마. 4. 기준 디자인의 글자·사진·아이콘을 배치해줘. 원본 파일이 없으면 대체하기 전에 알려줘. 5. 기준 너비는 390 CSS px로 보고 360 / 390 / 430에서도 가로로 잘리지 않게 해줘. 긴 제목은 줄바꿈하고 콘텐츠 높이는 내용에 맞춰 늘어나게 해줘. 6. 아직 없는 기능은 동작하는 척하지 말고 이번 구현 범위와 구분해줘. 완료하면 실행 주소, 바꾼 파일, 토큰·부품 코드 위치, 직접 확인한 결과와 내가 확인해야 할 항목을 알려줘.
localhost나 127.0.0.1은 보통 내 컴퓨터에서 시험하는 주소예요. 공유용 공개 주소와 구분해요.모양을 만든 다음에는 어떤 상태를 거쳐 어떤 결과가 나와야 하는지 하나만 연결해요. 먼저 기획에서 정한 동작과 현재 저장·요청 방식이 있는지 확인해요.
신청 화면의 버튼에 기획에서 정한 신청 동작을 연결해줘. 디자인과 기존 토큰·Button 컴포넌트는 유지해줘. - 필수 입력이 빠졌으면 누락된 항목과 수정 방법을 알려준다. - 요청하는 동안 “신청 처리 중…”을 표시한다. - 처리 중 다시 눌러도 요청이 중복으로 실행되지 않도록 한다. - 성공하면 기획에서 정한 완료 상태를 보여준다. - 실패하면 입력 내용을 유지하고 다시 시도할 수 있게 한다. 먼저 현재 저장·요청 방식이 실제로 있는지 확인해줘. 없다면 서버나 저장 방식을 임의로 정하지 말고 필요한 결정을 알려줘. 실습용 성공·실패 모형으로 확인한다면 실제 신청과 분명히 구분해줘. 완료 후 정상·누락·연속 클릭·실패를 직접 확인할 순서를 알려줘.
| 확인할 것 | AI에게 보여 달라고 할 근거 |
|---|---|
토큰 사용 | 정의한 파일과 화면·부품이 그 값을 참조하는 부분 |
부품 재사용 | Button 원본 코드 위치와 현재 화면에서 불러 쓰는 위치 |
설정값 대응 | 디자인에서 정한 종류·상태와 코드의 설정값 대응 |
실제 동작 | 직접 눌러 본 행동과 결과. 실행하지 못한 항목은 별도 표시 |
방금 만든 화면을 DESIGN.md와 부품 설명에 맞춰 확인해줘. 화면 요소 / 사용하는 토큰 / 재사용 부품 / 실제 코드 위치를 표로 보여줘. 같은 부품을 화면 안에 새로 만든 부분과 이름만 같고 값은 직접 입력한 부분이 있는지 찾아줘. 실행해서 확인한 것과 코드만 읽고 판단한 것을 구분해줘. 규칙이 없어 판단할 수 없는 항목은 “결정 필요”로 남겨줘.
| 도구 | 도움이 되는 일 | 직접 확인할 것 |
|---|---|---|
Figma MCP | AI가 Figma의 배치·변수·컴포넌트 정보를 읽거나 허용된 작업을 하도록 연결 | 연결·권한과 실제로 읽은 프레임 |
Code Connect | Figma 부품과 이미 있는 코드 부품의 사용법 대응 | 없는 코드 부품은 먼저 구현해야 해요. |
토큰 변환 도구 | 토큰 목록을 CSS 등 코드 형식으로 변환 | 역할·값·사용 위치가 의도와 같은지 |
이 도구를 모두 설치해야 실습할 수 있는 것은 아니에요. 작은 화면 하나를 만들고 같은 기준을 재사용하는지 확인하는 것부터 시작하세요.
AI가 “완료”라고 말한 화면을 원본과 비교하고 직접 눌러 보아요. 문제를 기록해 수정한 뒤 같은 조건으로 다시 확인해요.
| 항목 | 직접 볼 것 | AI에게 요청할 근거 |
|---|---|---|
색 | 같은 역할의 버튼이 같은 색인가요? | 실제 적용 색과 연결된 토큰 이름 |
글자 | 제목·본문·설명의 크기·굵기·줄 높이가 맞나요? | 실제 글꼴·크기·줄 높이와 기준값 |
간격 | 화면 좌우·카드 안쪽·요소 사이 여백이 맞나요? | 각 간격의 실제 값과 토큰 |
형태 | 같은 카드의 모서리·테두리·그림자가 같은가요? | 적용한 모서리·테두리·그림자 기준 |
부품 | 같은 버튼과 카드가 같은 규칙으로 보이나요? | 원본 부품과 재사용하는 코드 위치 |
상태·동작 | 처리 중·오류·비활성과 실제 결과가 맞나요? | 눌러 본 순서·관찰한 결과 |
같은 값을 복사한 것인지, 공통 값을 실제로 연결했는지 확인하는 실험이에요. 연습용 복사본이나 되돌릴 수 있는 작업 상태에서 해 보세요.
color/primary의 현재 값.공통 토큰 하나가 실제로 재사용되는지 확인해줘. 검사 대상은 [실제 토큰 이름]이야. 1. 현재 값과 사용하는 요소·코드 위치를 먼저 기록해줘. 2. 되돌릴 수 있는 상태에서 토큰 정의의 값 하나만 임시로 바꿔줘. 3. 연결된 요소가 함께 바뀌는지 실행해서 확인해줘. 4. 원래 값으로 복원하고 관련 없는 수정이 남지 않도록 해줘. 5. 원래 값 / 임시 값 / 영향받은 요소 / 복원 결과를 알려줘. 실행하지 못했다면 실행했다고 쓰지 말고 내가 확인할 순서를 알려줘.
신청 화면의 확인 예시예요. 본인 앱의 기능에 맞춰 바꾸되 정상일 때와 실패할 때를 모두 확인해요.
| 해 볼 행동 | 기대하는 결과 | 남길 기록 |
|---|---|---|
필수 항목을 채우고 신청 | 기획에서 정한 완료 상태 표시 | 누른 순서와 완료 화면 |
필수 항목을 비우고 신청 | 빠진 항목과 수정 방법 안내 | 오류 문구와 위치 |
처리 중 연속으로 누르기 | 중복 요청을 막고 진행 상태 표시 | 요청·저장 결과가 중복됐는지 |
실패 상황 시험하기 | 입력 유지, 오류 안내, 재시도 가능 | 실제 실패인지 시험용 모형인지 |
긴 제목·이름 넣기 | 줄바꿈 등 정한 방식으로 처리, 겹침 없음 | 사용한 문구와 결과 캡처 |
목록을 빈 상태로 보기 | 내용 없음 안내와 필요한 행동 제공 | 내용 없음 상태 |
360 / 390 / 430 너비로 보기 | 가로 잘림 없이 주요 내용과 버튼 사용 가능 | 너비별 결과 |
폰에서 입력창 누르기 | 키보드가 올라와도 입력·오류·완료 버튼에 접근 가능 | 실제 폰 또는 시험 환경 |
글자를 크게 하거나 확대하기 | 중요 내용과 조작이 겹치거나 사라지지 않음 | 시험한 글자 크기·확대 조건 |
접근성은 더 다양한 사람이 읽고 조작할 수 있게 만드는 일이에요. 자동 검사와 실제 조작을 함께 사용해요.
| 확인 항목 | 확인 방법 | 기준을 이해해요 |
|---|---|---|
글자 대비 | 실제로 겹쳐 보이는 글자색과 배경색을 측정해요. | WCAG AA 일반 글자는 4.5:1 이상. 큰 글자는 3:1 등 예외가 있어요. |
누르는 영역 | 아이콘 그림보다 실제 클릭·터치 영역을 확인해요. | WCAG 2.2 AA 최소 24×24 CSS px 또는 간격 등 예외 조건. |
조작하기 편한 크기 | 작은 아이콘 주변에도 누를 공간을 줘요. | 44×44 CSS px는 WCAG AAA 강화 기준. 이 실습의 모바일 목표로 삼아요. |
색 외의 안내 | 오류를 빨간색뿐 아니라 문구로도 알려주나요? | 색을 구분하지 못해도 상태와 수정 방법을 알 수 있어야 해요. |
키보드 조작 | Tab으로 이동하고 요소에 맞는 Enter·Space 등으로 실행해요. | 조작 위치가 보이고 필요한 요소에 접근할 수 있어야 해요. |
이름과 입력 설명 | 아이콘 버튼의 이름과 입력창 설명을 확인해요. | 화면 읽기 기능에서도 의미를 알 수 있도록 해요. |
이 화면에서 읽기와 조작을 방해하는 문제를 확인해줘. - 실제 글자색·배경색의 대비 - 버튼·아이콘의 실제 누르는 영역 - 키보드 이동과 포커스 표시 - 아이콘 버튼 이름과 입력창 설명 - 색만으로 전달하는 오류·상태 항목 / 확인 방법 / 실제 결과 / 수정할 부분으로 정리해줘. 자동으로 검사한 것, 직접 조작한 것, 아직 확인하지 못한 것을 구분해줘. 대비나 버튼 크기 몇 개가 통과했다는 이유로 접근성 전체를 통과했다고 쓰지 마.
W3C: 글자 대비 · 24×24 최소 기준과 예외 · 44×44 강화 기준
| 문제 상황 | 먼저 고칠 대상 | 예시 |
|---|---|---|
한 화면만 명확한 기준과 다름 | 그 화면의 연결·구현 | 카드 하나만 토큰 대신 직접 입력한 색 사용 |
여러 화면에서 같은 판단이 갈림 | 공통 규칙과 관련 화면 | 긴 버튼 문구 규칙이 없어 화면마다 다름 |
규칙을 지켰는데 사용하기 어려움 | 규칙·예외 자체 | 정한 높이로는 긴 한글이 잘려 기준을 다시 정해야 함 |
문제를 하나씩 확인하고 수정해줘. 화면: [문제가 있는 화면] 확인 조건: [너비 / 내용 / 상태 / 기기] 기대 결과: [기준 문서의 항목 또는 원본 모습] 실제 결과: [어디가 어떻게 다른지] 자료: [비교 이미지 또는 관련 파일 위치] 먼저 원인이 화면, 공통 부품, 토큰, 사용 규칙 중 어디에 있는지 확인해줘. 기준이 없다면 임의로 결정하지 말고 선택할 내용을 알려줘. 확정한 범위만 수정하고 관련 없는 디자인과 기능은 유지해줘. 같은 조건으로 다시 확인하고, 같은 부품을 쓴 다른 화면의 영향도 알려줘.
“고쳤다”라는 말보다 같은 조건에서 다시 확인한 결과를 남기세요.
| 화면·조건 | 기준 / 실제 | 수정할 곳 | 재확인 |
|---|---|---|---|
신청 · 360 너비 · 긴 문구 | 전체 표시 / 오른쪽 잘림 | 버튼 안의 글자 배치 | 같은 문구로 재확인, 다른 버튼도 확인 |
목표: 거대한 시스템을 완성하기보다, 같은 규칙이 실제 화면 3개에 적용되는 경험을 해요. 아래 시간은 진행 제안이며 Figma 기초 조작은 별도로 연습할 수 있어요.
| 순서·권장 시간 | 할 일 | 남길 결과 |
|---|---|---|
| 준비 · 수업 전 | 기획, 목록·상세·신청 등 대표 시안 준비 | 대표 화면 3개 |
| 1 · 15분 | 색·글자·간격·부품을 조사 | 값과 출처 표 |
| 2 · 15분 | 합칠 기준과 유지할 차이를 결정 | 승인한 역할·값·용도 목록 |
| 3 · 25분 | 변수·스타일과 버튼 1개를 연결 | 값 변경 시 함께 바뀌는 화면 |
| 4 · 20분 | 디자인 기준과 AI 읽기 안내 작성 | DESIGN.md와 연결 안내 |
| 5 · 25분 | 화면 하나에 적용하고 비교·수정 | 전후 캡처·6항목 확인표 |
| 그룹 | 정리할 항목 | 이해할 점 |
|---|---|---|
| Color 9 | neutral · surface · on-surface · secondary · border · primary · primary-pressed · disabled · error | 이 이름과 개수는 수업의 시작 묶음. 버튼 위 글자색 등 필요한 역할은 추가 검토. |
| Typography 5 | headline-lg · headline-md · body-md · label-md · body-sm | 각 이름에 글꼴·크기·줄 높이·굵기·용도 연결. |
| Spacing 6 | xs 4 · sm 8 · md 12 · lg 16 · xl 24 · 2xl 32 | 같은 이름의 구체 값과 사용 규칙에 합의. |
| Rounded 3 | sm 8 · md 12 · lg 16 | 어느 부품에 어떤 값을 쓰는지 정하기. |
| Shadow 2 | shadow-sm · shadow-md | 효과의 상세 값과 용도를 정하고 스타일로 관리 가능. |
우리 팀 디자인 시스템을 설명하겠습니다. 우리 앱은 [누구]가 [어떤 목적]을 이루도록 돕습니다. 여러 화면에서 [어떤 차이]가 생겨 [어떤 문제]가 있었습니다. 그래서 [공통 값]과 [재사용 부품], [사용 규칙]을 정했습니다. 대표 화면 [이름 3개]에 적용했고 [확인한 결과]가 달라졌습니다. 아직 [남은 문제]는 다음 검증에서 확인하겠습니다.
| 용어 | 한 줄 설명 |
|---|---|
| 토큰 Token | 이름 붙여 재사용하는 값 |
| 변수 Variable | 도구에서 재사용할 값을 저장하는 수단 |
| 스타일 Style | 여러 표현 속성을 묶은 설정 |
| 참조 Alias | 다른 이름의 값을 가리키는 연결 |
| Semantic | 생김새 대신 역할로 정한 이름 |
| Component | 여러 곳에서 재사용하는 UI 단위 |
| Variant | 부품의 종류나 선택 가능한 변형 |
| State | 현재 상황에 따른 상태 |
| Prop | 코드 컴포넌트에 전달하는 설정 |
| Contract | 부품을 쓰는 조건과 방법을 적은 약속 |
| Markdown / YAML | 사람이 읽는 문서 형식 / 구조화된 값 목록 표기 |
| Repository · 저장소 | 프로젝트 파일과 변경 기록을 함께 보관하는 곳 |
| MCP | AI가 외부 도구와 자료에 연결되는 통신 방식 |
| Lint | 정해진 형식·규칙을 자동 검사하는 일 |
| Version | 어느 시점의 기준·결과인지 구분하는 번호 |
실무 순서, 대표 화면 수, 실습 시간, 예시 값은 이 자료의 교육용 제안이에요. 아래 공식 문서의 요구사항과 구분해 읽으세요. 도구 정보 확인일: 2026-10-23.
외부 링크를 제외한 설명과 예시는 인터넷 없이도 볼 수 있어요. 체크 저장은 현재 브라우저에만 남으며 공유한 다른 사람에게 전달되지 않아요.
내용을 수정할 때 버전 번호를 올리고, 이전 버전과 변경 내용을 함께 보존해요. 파일 이름 끝의 v번호와 화면에 표시된 버전을 확인하세요.
| 버전 | 날짜 | 변경 내용 |
|---|---|---|
| v1.2 | 2026.10.26 | CONTRACT.md에 신청 처리 중인 버튼, 이름 입력 오류, 마감된 활동 카드의 세 상황과 작성 예시·확인 방법 추가. |
| v1.1 | 2026.10.26 | 1장의 비유를 레스토랑으로 정리. 불필요한 앱 이름 제거. 파일·화면에 버전 표시와 변경 기록 추가. 하위 폴더·문서를 AI가 생성하는 절차와 원본 자료 준비 역할 명시. 나머지 실습 내용 유지. |
| v1.0 · 기준본 | 2026.10.26 | 바로 전 전달본을 버전 관리의 시작점으로 지정. 7~9장 실습 보강, 기존 10·12장 삭제, 요청한 표현 정리. |
체크 상태는 현재 브라우저에 저장돼요. 파일 열기 방식이나 브라우저 설정에 따라 저장이 제한될 수 있어요.