← 실험실 오픈소스 해부 · 공부용

디자인 감각을 검사 가능한 수치로

KEZ-ProductPage-skill(detail-page-core)은 커머스 상세페이지를 Figma 캔버스에 직접 그리는 Claude Code 스킬입니다. 실행 코드는 한 줄도 없고 마크다운 13개, 1,867줄이 전부입니다. 그런데 그 안에 들어 있는 건 디자인 취향이 아니라 완료 전에 전수 대조하는 수치 게이트였습니다. 앞선 두 해부가 "코딩 에이전트를 어떻게 조이나"였다면, 이번엔 도메인 지식을 어떻게 규칙으로 굳히나입니다.

분석 대상: detail-page-core (33c6529) 저장소: HarinJin/KEZ-ProductPage-skill · MIT 작성일: 2026-07-29

1. 한 장 요약

LLM에게 디자인을 시키면 실패하는 지점이 정해져 있습니다. 모바일에서 안 보이는 작은 글씨, 텍스트만 빽빽한 세로 페이지, 지어낸 후기와 법정문구, 아무 데나 박히는 그림자. 이 스킬은 그 실패를 하나씩 측정 가능한 조건으로 바꿔 완료 직전에 전수 대조하게 만듭니다.

0. 브랜드 확정brands/<이름>.md

색·서체 "값"이 담긴 프로파일을 먼저 연다. 없으면 온보딩. 패턴만으로 HEX·폰트를 지어내지 않는다.

1. 인터뷰00-interview.md

규칙이 전부 상대 규칙이라 입력이 없으면 값이 안 정해진다. 그래서 착수 전에 인자를 수집한다.

2. 스켈레톤05 + build-recipes

세부 전에 placeholder로 전체 구성을 그려 승인받는다. 그 전에 아키타입 판정이 선행.

3. 섹션 제작한 번에 한 구간

결정(색·조형·타이포·카피·사진) → 제작 → get_metadata+스크린샷 자가검증 → 유저 확인 → 다음.

4. 전체 조립 검증스트립 스크린샷

섹션이 각각 괜찮아도 이어 붙였을 때의 리듬·톤 연속성을 마지막에 한 번 더 본다.

반려가 오면 피드백을 결정 슬롯(색 / 조형·배치 / 타이포 / 카피 / 사진)으로 분류해 해당 단계로만 되돌아갑니다. 입력 자체가 바뀌었으면 인터뷰까지 올라갑니다. "다시 만들어줘"를 통짜로 받지 않고 어디를 고칠지부터 정하는 구조입니다.

2. 라우터로 설계된 문서 13개

스킬을 열면 가장 먼저 눈에 띄는 문장이 이겁니다.

"이 SKILL.md는 라우터다. 지금 하려는 일에 맞는 문서만 그때그때 연다. 전부 미리 읽지 않는다."

detail-page-core/SKILL.md

1,867줄을 통째로 컨텍스트에 밀어 넣으면 정작 작업할 여력이 없습니다. 그래서 SKILL.md(113줄)는 상황 → 열 문서 매핑 표와 절대 규칙만 들고 있고, 나머지는 필요할 때 열립니다. 스킬을 여러 개 쓰는 사람이라면 이 구조 자체가 배울 점입니다.

지금 하려는 일열리는 문서줄수
착수 전 확인·질문00-interview.md115
색을 정하는 원리design-dna/01-color.md103
묶고 배치(오토레이아웃·계층)design-dna/02-grouping-layout.md208
글자 크기·굵기·서체 역할design-dna/03-typography.md137
카피의 길이·역할design-dna/04-copy.md100
어떤 섹션을 왜·순서design-dna/05-page-purpose.md316
사진 삽입·블렌드design-dna/06-image-treatment.md140
이미지 배치 의도(자르기 vs 채우기)design-dna/07-image-placement.md74
제작 순서·재사용 코드build-recipes.md187
use_figma API 규칙figma-mcp.md31
에러·이상 렌더troubleshooting.md86
병렬 제작 감독orchestration.md84
새 브랜드 온보딩brands/_template.md129

각 문서 서두에 "이 문서는 딱 하나의 관심사만 다룬다"는 선언이 붙어 있고, 다른 관심사는 링크로 넘깁니다. 소프트웨어의 단일 책임 원칙을 프롬프트 문서에 그대로 적용한 형태입니다.

3. 패턴과 값을 갈라놓은 2층 구조

이 스킬의 재사용성이 나오는 자리입니다.

어디무엇이 들어가나
브랜드 무관 패턴 design-dna/ 채도·명도·색조 관계, 크기·굵기 위계, 상황 분기. 절대 HEX/px 없음
브랜드 프로파일 brands/<이름>.md 그 패턴의 슬롯에 꽂히는 실제 HEX·서체·규격. 브랜드당 파일 하나

예를 들어 색은 3층 역할 구조로만 서술됩니다 — ① 중립축(저채도, 본문·바탕 글자), ② 액센트(고채도 + 브랜드 색조, 제목·강조·CTA), ③ 의미색(색조가 의미를 인코딩, 긍정·경고). 브랜드가 바뀌면 ①은 미세 조정, ②는 교체, ③은 색조 관용 유지.

대비 규칙도 값이 아니라 조건으로 적혀 있습니다. 밝은 배경에서는 명도차가 잘 안 생기니 채도 대비로 위계를 만들고, 사진·어두운 배경에서는 색 대비가 안 통하니 고명도(크림/화이트)로 명도 대비를 쓴다. 어느 브랜드에 갖다 놔도 성립하는 서술입니다.

"색·서체를 정할 땐 패턴 문서 + 브랜드 문서를 합쳐 결정한다. 브랜드 값이 미정이면 패턴만으로 지어내지 않고 유저에게 확인받는다."

SKILL.md · 브랜드 프로파일 절

값이 안 정해진 슬롯은 "미정"으로 표기하고 그 부분의 제작을 보류합니다. 전체를 멈추지 않고 그 슬롯만 멈추는 게 핵심입니다 — "부분 진행은 되지만, 부분 추측은 안 된다."

4. 하드 게이트 13개 — 이 스킬의 진짜 심장

문서 어딘가에 흩어져 있던 수치를 한 표로 모아놓고 정본(SSOT)이라 선언합니다. 불일치가 생기면 이 표가 이깁니다. 그리고 이건 참고값이 아니라 매 섹션 자가검증에서 get_metadata+스크린샷으로 전수 대조하는 통과 조건입니다.

"오토레이아웃은 잘 지켜지는데 그 외 수치 규칙이 생성 중 자주 무시된다. (…) 하나라도 위반이면 완료가 아니다."

SKILL.md · 하드 게이트
게이트기준막으려는 실패
모바일 최소 폰트본문 ≥ 캔버스폭 4.5%(860→39px), 캡션 ≥ 3%웹 화면만 보고 만든 안 읽히는 글씨
히어로 세로 상한3000px, 일반 섹션의 1.8~2.5배스크롤이 휑해지는 과대 히어로
히어로 텍스트 점유면적 12~20% (세로 아님)텅 빈 히어로(하한) / 이미지가 밀리는 수다(상한)
하단 클리어런스≥ 100px바닥에 붙어버린 텍스트
반복 요소 그룹화상위 그룹 + 그룹 간 ≥ 50px같은 소속인지 안 보이는 나열
텍스트 컨테이너 최대폭≤ 캔버스폭 84%(860→725px)가로로 늘어져 읽기 힘든 본문
인접 블록 템포크기·굵기가 모두 같으면 위반위계 없이 평평한 나열
임의색 0테마 팔레트 + 브랜드 프로파일 둘 다 대조어디서 왔는지 모를 색
그림자기본 0. 누끼·주인공 사진엔 무조건 금지촌스러운 drop-shadow 남발
이미지 배치 의도대상 강조=자르기(전경) / 배경 무드=채우기(후경)의도 없이 얹힌 사진
full-bleed 텍스트사진의 여백존에만피사체 위에 겹친 글자
오토레이아웃필수(절대좌표 흩뿌리기 금지) + 모든 노드 한글 역할명카피가 늘면 깨지는 레이아웃
추측 금지 3종법정 고지문·리뷰 콘텐츠·미확정 카피신뢰를 무너뜨리는 창작

눈여겨볼 건 기준을 절대 px이 아니라 비율·면적으로 잡았다는 점입니다. "본문 39px"이 아니라 "캔버스폭의 4.5%"라서 아트보드 폭이 바뀌어도 규칙이 그대로 성립합니다. 히어로 텍스트 점유를 세로가 아니라 면적으로 잡은 이유도 문서에 적혀 있습니다 — 폭 좁은 텍스트가 세로로만 길면 세로 기준으로는 20%를 채워도 화면은 휑하기 때문입니다.

5. 인터뷰는 취향조사가 아니다

"이 디자인 시스템의 모든 규칙은 상대 규칙이다. (…) 전부 입력 슬롯이 채워져야 비로소 값이 정해지는 함수다. 즉 인터뷰는 취향 조사가 아니라 규칙 적용에 필요한 인자를 수집하는 절차다. 그래서 선행이다."

references/00-interview.md §0

인터뷰를 "고객 취향 물어보기"가 아니라 함수의 인자 채우기로 정의한 게 이 문서의 성취입니다. 그래서 질문 목록이 "무엇을 묻나 → 그 답이 무슨 규칙을 정하나" 두 칸으로 되어 있습니다. 제품 대표색을 모르면 제목·강조·번호·CTA에 무슨 색을 쓸지가 정의되지 않기 때문에 묻는 겁니다.

  • 추측한 값은 결함으로 취급. 확인 안 된 항목은 "미확인"으로 명시하고 진행 보류.
  • 기획서가 있으면 거기서 답이 나온 슬롯은 재질문 금지. 이미 답한 걸 또 묻지 않습니다.
  • 독립인 미확인 항목은 한 메시지에 몰아서. 한 항목씩 여러 턴으로 끄는 걸 금지합니다.
  • 리뷰 자산 수가 곧 댓글박스 개수. 자산이 0이면 리뷰 섹션 자체를 뺍니다.
  • 레퍼런스가 주어지면 눈대중 금지. get_metadata로 구조를, 스크린샷으로 대표 섹션 5~8장을 실측해 디자인 언어를 해독합니다. "레퍼런스는 구조·리듬을 빌리는 것이지 브랜드 색을 덮어쓰는 게 아니다."

그리고 절대 추측 금지 3종에는 이유가 달려 있습니다.

"이 3종은 '예쁘게 채워두면 되겠지'가 가장 위험한 영역이다. 시각 요소는 나중에 톤을 조정할 수 있어도, 지어낸 법정문구·가짜 후기·틀린 카피는 신뢰 자체를 무너뜨린다."

references/00-interview.md §0

LLM이 placeholder를 그럴듯한 문장으로 채우는 습성을 정확히 겨냥한 조항입니다. 펀딩 페이지 변주에는 한술 더 떠 "거짓 희소성 금지 — 'N명 한정'은 실제 수용량 확정 후에만", "미구현 기능은 약속 카피 금지, FAQ에서 정직하게 계획 단계임을 밝힌다(이게 오히려 신뢰 신호)"까지 적혀 있습니다.

6. 세로 길이를 정하는 최상위 판단

상세페이지에서 가장 흔한 실패 — 텍스트로만 가득 찬 세로 페이지 — 를 막는 장치입니다. 원인 진단이 정확합니다: 텍스트를 먼저 다 채우고 이미지를 남는 자리에 끼우기 때문이라는 것.

아키타입설득의 축시각 히어로
감각 설득형
(이미지 주인공)
질감·발색·형태·사용장면많음 (3~5구간)식품·뷰티·리빙 등 실물
정보 설득형
(텍스트 주도)
기능·스펙·비교적음 (1~2구간)앱·SaaS·구독·서비스

판정은 Q1(실물성) · Q2(감각 의존도) · Q3(비주얼 자산) 중 2개 이상 YES면 감각형. 여기서 Q2를 다루는 방식이 특히 좋습니다.

"'감각적 매력 있나?'는 주관 판단이라 LLM이 쉽게 건너뛴다. 관찰 가능한 속성 체크리스트로 판정한다" — 질감·결·윤기·물방울·김·단면·발색이 있는가, 색 자체가 셀링포인트인가, 사용 장면이 매력적인가, 경쟁사가 대개 큰 제품사진을 쓰는가…

design-dna/05-page-purpose.md §0.5

주관적 판단을 관찰 가능한 신호의 체크리스트로 환원하고, 그래도 애매하면 어느 쪽으로 기울지까지 정해둡니다 — "애매하면 감각형으로 기운다. 히어로 자리를 안 잡는 false negative가 훨씬 손해다." 불확실성을 없애는 대신 기울일 방향을 미리 결정해 두는 이 방식은 다른 도메인에도 그대로 옮길 만합니다.

판정이 끝나면 공간 예약 원칙이 발동합니다: 시각 히어로 구간의 세로를 먼저 예약하고, 그다음 텍스트 섹션을 그 사이 리듬에 채웁니다. 순서를 뒤집는 것 자체가 금지 사항으로 명시돼 있습니다.

7. 실패에서 뽑아낸 T1~T15

troubleshooting.md는 이 저장소에서 가장 값진 86줄입니다. Figma Plugin API를 에이전트로 두들기다 실제로 터진 증상을 증상 → 원인 → 해법 색인으로 축적했고, 항목마다 "실측 검증"이라고 표시돼 있습니다. 몇 개만 옮기면:

#증상원인 → 해법
T1텍스트가 줄바꿈 없이 잘림textAutoResize='HEIGHT' 뒤에 resize()를 부르면 높이가 그 값에 고정 → NONEresizeHEIGHT 순서로 재설정
T23~4단 중첩 안의 텍스트만 잘림같은 스크립트 실행 안에서는 부모 hug 높이가 재계산되지 않음 → 깊은 중첩은 자동 줄바꿈에 의존하지 말고 수동 개행 + FIXED 높이
T4query()Invalid selector한글 셀렉터 미지원. 한글 역할명이 이 스킬 표준이므로 쿼리는 항상 findAll
T5프레임 y가 소수점으로 밀림hug 결과 높이가 3167.47처럼 소수 → 재배치 전 Math.round로 정수화
T10자식이 거대하게 확대(관측 8.6배)append 뒤 부모 resize() 시 SCALE 제약 → 컨테이너 최종 크기는 append 전에 확정
T14업로드한 크롭에 원본 텍스트가 박힘y 범위 오판 → 업로드 전에 반드시 열어서 눈으로 확인
T15layoutAlign이 설정해도 무시됨에러 없이 즉시 INHERIT로 리셋(silent) → 의존하지 말고 전용 단일-자식 래퍼로 정렬

figma-mcp.md(31줄)의 API 규칙도 같은 성격입니다. 읽기는 get_metadata → 필요한 노드만 get_design_context 2단계로만, 파일 전체를 한 번에 덤프하지 않기. 쓰기는 폰트 로딩 완료 후에만, appendChild 먼저 그다음 layoutSizing, 색상은 0–1 범위, 한 호출당 논리 연산 10개 이하로 분할.

"use_figma원자적 — 실패한 스크립트는 아무것도 반영 안 됨(고아 노드 없음). 즉시 재시도 금지, 에러 메시지 읽고 수정 후 재시도."

references/troubleshooting.md

"즉시 재시도 금지"는 에이전트 운용 규칙으로서 정확합니다. 실패를 읽지 않고 같은 걸 다시 던지는 건 senpi 정책의 산탄총 디버깅 금지와 같은 실패를 겨냥합니다.

8. 감독과 빌더 — 병렬 제작의 규율

섹션이 13개쯤 되면 순차 제작이 버겁습니다. 그래서 orchestration.md감독-빌더 패턴을 정의합니다. 여기 규칙들이 멀티 에이전트 운용의 교과서에 가깝습니다.

  1. 섹션 = 독립 프레임 = 빌더 1명

    웨이브당 4~5명 병렬. 빌더는 자기 프레임 안에서만 작업하고 다른 프레임 수정·이동은 절대 금지.

  2. 충돌 해소는 빌더가 아니라 감독이

    프레임 겹침은 웨이브가 끝날 때마다 감독이 재배치 스니펫으로 일괄 정리합니다(소수점 높이 정수화 포함 — T5).

  3. 감독은 빌더의 자가검증 보고를 믿지 않는다

    "감독이 모든 섹션을 스크린샷으로 직접 검수한다(빌더 자가검증 보고만 믿지 않는다)."

  4. 착수 전 1회 준비로 반복 낭비를 없앤다

    폰트 전수 검증을 감독이 한 번 해서 결과를 모든 빌더 프롬프트에 명기합니다. 실측 사례가 적혀 있습니다 — 손글씨 폰트 미보유를 여러 섹션에서 각각 재발견한 것이 최대 토큰 낭비였다고.

  5. 카피 소스를 고정한다

    기획서 경로와 "원문 그대로, 창작·의역 금지"를 프롬프트에 박고, 미확정 값은 빈 슬롯으로 남기게 합니다.

  6. 보고 없이 종료 금지

    "'반드시 보고'를 강조하지 않으면 빌더가 무보고 idle로 빠진다(강조 후 전원 보고로 개선됨). 무보고 idle이 와도 당황하지 말 것 — 대개 작업은 완료돼 있으니 프레임을 직접 스크린샷으로 확인한다."

마지막 항목은 서브에이전트를 실제로 굴려본 사람만 쓸 수 있는 문장입니다. 워커가 조용히 멈추는 현상과 그때의 대응까지 문서에 남겨둔 건 드뭅니다.

9. 세 해부의 공통점 (+ 비판)

이걸로 가재코드, senpi에 이어 세 번째 해부입니다. 도메인은 코딩 에이전트 둘과 디자인 스킬 하나로 완전히 다른데, 같은 두 문장이 세 곳 모두에 있습니다.

가재코드senpiKEZ 상세페이지 스킬
모르면?인터뷰로 모호도를 수치화해 사람에게 묻는다이름 붙여 말하고 맥락에서 스스로 푼다미확인으로 표기하고 그 슬롯만 멈춘다
지어내기관측하지 않은 출력·테스트 금지읽지 않은 코드·런타임 추측 금지법정문구·후기·미확정 카피 창작 금지
완료 조건품질 게이트 JSON을 CLI가 검사V1·V2·V3 티어 검증하드 게이트 13개 전수 대조
증거ledger.jsonl 리시트압축 요약의 축어 보존get_metadata+스크린샷 실측
강제 수단런타임·CLI가 거부프롬프트 블록마크다운 13개(코드 0줄)

결론은 하나입니다. LLM에게 일을 시킬 때 위험한 건 능력이 아니라 "빈칸을 그럴듯하게 메우는 성향"이고, 잘 만들어진 도구는 전부 그 성향을 추측 금지 + 완료 전 실측 대조 두 축으로 묶습니다. 도메인이 코드든 디자인이든 처방이 같다는 게 이 시리즈에서 얻은 결론입니다.

비판

  • 강제력이 가장 약합니다. 코드가 0줄이라 규칙 위반을 막는 런타임이 없습니다. 하드 게이트를 "전수 대조"할지는 결국 모델 성실성에 달려 있고, 스킬은 그걸 절차로 반복해 상기시키는 방식으로만 방어합니다.
  • 외부 베타에 얹혀 있습니다. Figma 공식 MCP의 use_figma가 베타라 결과를 항상 스크린샷으로 재검증해야 합니다. 스킬이 그 절차를 강제하지만, 근본 리스크는 남습니다.
  • 한국 커머스 관습에 맞춰져 있습니다. 860px 세로 스크롤 캔버스, 폭 대비 4.5% 본문 — 국내 상위 상세페이지 실측에서 나온 값이라 강력하지만, 데스크톱 랜딩이나 서구권 이커머스에 그대로 옮기면 안 맞습니다.
  • 진입 문턱. Claude Code + Figma 계정 + MCP 등록 + OAuth까지 통과해야 첫 프레임이 나옵니다.
  • 스타 21개의 1인 프로젝트. 문서 밀도는 규모에 비해 이례적으로 높지만, 커뮤니티 검증은 아직입니다.

그럼에도 이건 "스킬을 이렇게 쓰는 거구나"의 좋은 예입니다. 프롬프트 몇 줄로 톤을 바꾸는 수준이 아니라, 한 도메인의 실측 지식을 라우터·SSOT·체크리스트·트러블슈팅 색인으로 구조화했습니다. 자기 분야가 있는 사람이라면 이 형식을 그대로 빌려 자기 도메인 스킬을 만들 수 있습니다.

10. 직접 확인해보기

설치 (Claude Code 스킬 디렉터리로 복사)
git clone https://github.com/HarinJin/KEZ-ProductPage-skill.git
cp -r KEZ-ProductPage-skill/detail-page-core ~/.claude/skills/

# Figma 공식 원격 MCP 등록 (최초 1회, 첫 사용 시 브라우저 OAuth)
claude mcp add --scope user --transport http figma https://mcp.figma.com/mcp
문서 읽는 순서
cd ~/.claude/skills/detail-page-core

cat SKILL.md                          # 라우터 + 하드 게이트 13개 (여기부터)
cat references/00-interview.md        # 인터뷰를 "인자 수집"으로 정의한 문서
cat references/troubleshooting.md     # T1~T15 실측 함정 색인
cat references/orchestration.md       # 감독-빌더 병렬 제작
cat references/design-dna/05-page-purpose.md   # 아키타입 판정 + 섹션 카탈로그

공부 순서 추천. 디자인에 관심이 없어도 ① SKILL.md의 하드 게이트 표와 ② 00-interview.md §0은 읽어볼 값이 있습니다. "규칙이 상대적이라 입력 없이 시작하면 임의값이 끼어들고, 나중에 전면 재작업이 된다"는 어느 도메인에서든 성립하는 문장입니다. 그다음 troubleshooting.md로 넘어가면 "에이전트에게 외부 API를 맡길 때 무엇을 문서로 남겨야 하는가"의 답이 보입니다.

이 글은 2026-07-29에 저장소를 클론해 ~/.claude/skills/에 실제로 설치하고, 문서 13개 1,867줄을 직접 읽어 정리한 독립 분석입니다. 다만 이 환경에는 Figma 공식 MCP가 등록돼 있지 않아, 실제 캔버스 제작까지는 검증하지 못했습니다 — 구조·규칙·문서에 대한 분석이며 생성 품질에 대한 보증이 아닙니다. KEZ-ProductPage-skill은 cmore.dev와 무관한 외부 오픈소스이고, 이 페이지는 공식 문서가 아닙니다.