# Figma → HTML 변환 프로세스 리뷰
> 2026-04-08~09 테스트 세션 결과. 기존 FIGMA-EXTRACTION.md / FIGMA-DESIGN-LANGUAGE.md는 그대로 유지.
---
## 1. 테스트 경과
### 1.1 테스트 대상
| 순서 | 프레임 | 노드수 | 성격 | 결과 |
|------|--------|-------|------|------|
| 1 | Frame 1171281214 (37:231) | ~15 | 단일 카드 (H/W 탭+라벨+본문) | 부분 성공 (둥근 모서리 누락) |
| 2 | Frame 1171281215 (39:239) | 149 | 시스템 구성 (H/W 7항목 + 중앙원 + S/W 6항목) | 부분 성공 (색상 차이 다수 누락) |
| 3 | Frame 1171280278 (17:3403) | 43 | 실제 디자인 (사진, 3D지형, 자유배치) | 미시도 (구조 분석 한계) |
### 1.2 발견된 누락 사항 (시간순)
| # | 누락 | 원인 | Figma 필드 |
|---|------|------|-----------|
| 1 | 평행사변형 우측 상단 Bezier curve | `vectorNetwork.vertices`만 봄, `fillGeometry.path`의 `C` 명령어 미확인 | `fillGeometry[].path` |
| 2 | 그라디언트 바 우측 pill-shape | `cornerRadius` 단일값만 체크 | `rectangleCornerRadii` (예: `[0,40,40,0]`) |
| 3 | S/W 그라디언트 바 색상 (크림→주황) | H/W 바 색상을 S/W에도 일괄 적용 | `fills[].gradientStops` — 인스턴스별 확인 필요 |
| 4 | S/W 아이콘 색상 (주황 vs H/W 올리브) | 같은 imageRef라고 동일 취급 | `fills[].filters` (tint, highlights, shadows) |
| 5 | 텍스트 위치 오류, 겹침 | 149노드를 플랫하게 absolute 배치 | 트리 계층 무시가 근본 원인 |
---
## 2. 근본 원인 분석
### 2.1 작업 방식의 문제
```
현재 방식:
curl API → 3.6MB JSON 덤프 → 임시 Python 스크립트로 파싱
→ 필요해 보이는 필드만 선택적으로 읽음
→ 좌표를 눈으로 읽고 HTML에 하드코딩
→ 사용자 지적 → 수정 → 또 지적 → 또 수정...
문제:
1. 임시 스크립트가 매번 다르고, 추출 범위가 일정하지 않음
2. "중요해 보이는" 필드만 골라 읽으니 형상/필터/개별반지름 등을 놓침
3. 같은 패턴 반복 요소의 속성 차이를 대조하지 않음
4. 트리 계층을 무시하고 플랫하게 절대좌표 배치
5. 전체를 한번에 만들어서 오류 발견이 늦음
```
### 2.2 "배치 우선" 편향
```
AI의 파싱 우선순위 (잘못됨):
1. 어디에 있나 (x, y, width, height) ← 먼저 봄
2. 무슨 색이나 (fills, color) ← 그다음
3. 무슨 글자나 (characters, fontSize) ← 그다음
4. 어떤 모양이나 (path, cornerRadius) ← 마지막... 놓침
5. 인스턴스 간 차이 (filters, gradient) ← 아예 안 봄
디자인에서는 4, 5가 핵심임
```
---
## 3. FIGMA-EXTRACTION.md 보강 필요 사항
> 기존 MD는 유지. 아래 항목들은 방향 확정 후 반영.
### 3.1 섹션 2.4 "추출해야 하는 핵심 데이터" 추가 필드
| 추가 필드 | 용도 |
|----------|------|
| `rectangleCornerRadii` | 꼭짓점별 다른 반지름 (예: `[0,40,40,0]` = 우측만 둥글게) |
| `fillGeometry[].path` | SVG path에 `C`/`Q` 곡선 명령어가 있으면 직선이 아닌 형상 |
| `arcData` | 호/부채꼴 형상 |
| `fills[].filters` | 같은 이미지라도 노드별 필터(tint, highlights, shadows)로 색상 변경 |
### 3.2 워크플로우 개선 방향 (미확정)
**소분 → 단계적 조립**:
```
한번에 전체를 만들지 않는다.
트리 leaf부터 올라감:
→ leaf 변환 (개별 확인)
→ 부모 그룹으로 조립
→ 다음 레벨로 조립
→ 최종 프레임
각 단계에서 반드시:
- 같은 패턴의 인스턴스끼리 속성 대조
- 이미지 노드의 filters 확인
- 텍스트 겹침 없는지 좌표 간격 확인
```
**단, Figma 트리가 깔끔한 건 사용자가 수작업으로 정리했기 때문.**
원본 Figma는 자동 이름 + 의미 없는 중첩이 겹겹이 있는 상태.
→ AI가 뒤죽박죽인 구조를 정확히 읽으려면 **Figma MCP 활용이 필수**.
---
## 4. 다음 세션에서 이어갈 것
### 4.1 Figma MCP 테스트
- **작업 디렉토리를 `D:\ad-hoc\kei\design_agent\`로 열어야** `.mcp.json`의 Figma MCP가 인식됨
- 현재 세션은 `D:\`에서 열려서 MCP 미인식
- API 키는 업데이트 완료: `figd_-eLtFZz5itRec7N60iJFB1njw1nKH8T_X_PM205T`
### 4.2 테스트 대상
```
Figma URL: https://www.figma.com/design/9S6LsQyO6zlRxtiqZccOUM/Untitled?node-id=18-8204
대상: Frame 1171281172
목표: MCP로 구조를 읽고 → HTML로 변환 → 정확도 확인
```
### 4.3 검증 포인트
- MCP가 트리 구조를 계층적으로 탐색할 수 있는지
- 노드별 시각 속성 (fills, filters, gradientStops, cornerRadii 등)을 빠짐없이 읽는지
- 읽은 결과를 기반으로 소분→조립 방식으로 HTML 변환이 가능한지
### 4.4 성공 기준
MCP 기반으로 변환했을 때, 사용자가 지적하기 전에 다음을 스스로 잡아낼 수 있어야 함:
- 둥근 모서리 / 곡선 형상
- 인스턴스별 색상 차이 (그라디언트, 필터)
- 텍스트 겹침 / 위치 오류
---
## 5. 사용자가 공유한 참고 자료
| 자료 | URL | 비고 |
|------|-----|------|
| Figma→HTML 플러그인 | https://www.figma.com/community/plugin/1421932899298722297 | Convert Figma Design to HTML CSS |
| Hubannero 플러그인 | https://www.figma.com/community/plugin/1527963216001787676 | Figma to HTML/MP4/GIFs |
| GitHub Copilot MCP | https://github.com/webmaxru/figma-to-webpage-github-copilot-mcp | Figma→Webpage via MCP |
| SKT UX MCP | https://github.com/banil-la/figma-mcp-skt-ux | Figma MCP for UX |
| MCP Market | https://mcpmarket.com/ko/server/figma-to-ai-html-converter | Figma→AI HTML Converter |
| LobeHub Skills | https://lobehub.com/skills/skill.md | Skill definitions |
---
## 6. 기존 MD와의 관계
| 문서 | 역할 | 상태 |
|------|------|------|
| `FIGMA-DESIGN-LANGUAGE.md` | 디자인 토큰, 색상, 타이포, 레이아웃 패턴 | 유지 (변경 없음) |
| `FIGMA-EXTRACTION.md` | 추출 워크플로우, 수학적 계산, 체크리스트 | 유지 (보강 예정, 미반영) |
| `FIGMA-CONVERSION-REVIEW.md` | **이 문서**. 테스트 결과, 인사이트, 다음 세션 이어갈 지점 | 신규 |