본문으로 건너뛰기

Figma 퍼블리싱 파이프라인 05. 실행 예시: 운영 관리 상세 - 제품 관리 탭

·11 min read·5 / 5

Kodeflo 퍼블리싱 파이프라인으로 운영 관리 상세 페이지의 제품 관리 탭을 재퍼블리싱했다. --report 옵션으로 단계별 진행 상황과 토큰 소비를 추적하며 진행했던 과정을 기록한 일지.


사전 준비

# 요청 형식
퍼블리싱해줘 https://www.figma.com/design/MiI74Bwt1BQ89xxzaMQ81u/...?node-id=19838-69031 --report

Figma 정보:

  • fileKey: MiI74Bwt1BQ89xxzaMQ81u
  • nodeId: 19838:69031 (상품 관리 탭)
  • 감지된 섹션: LNB, Main Container

Phase 0 — Figma 분석

python3 .claude/scripts/figma_analyze.py "<FIGMA_URL>" \
  --app admin --out /tmp/figma_spec.json

Phase 0 분석 완료 - 토큰 소비: ~300 tokens

분석 결과 요약:

항목개수
추출된 노드3,285개
이미지 에셋15개
테이블 헤더8개
테이블 바디122개
토큰 매핑112개

감지된 섹션:

  1. LNB (좌측 네비게이션)
  2. Main Container (메인 콘텐츠 영역)

Phase 0.5 — 섹션 선택

사용자 선택: Main Container (메인 콘텐츠 영역)

선택 완료 - 누적 토큰: ~400 tokens


Phase 0.6 — 섹션 상세 분석

기존 코드와 Figma 설계서를 비교했다.

Phase 0.6 분석 완료 - 누적 토큰: ~500 tokens

파일 위치:

apps/admin/src/app/(auth)/shopping-mall-management/management/[managementId]/_source/components/product-management/
├── product-management.tsx (메인)
├── product-management-control.tsx (필터)
└── product-management-table.tsx (테이블) ← 주요 변경

섹션별 상세 분석

1. Tab Frame

활성 : "상품 관리" (border-b-2, grey.10)
비활성 : 5 (grey.5)
폰트: SemiBold, 14px
간격: px=40px, gap=20px

2. 테이블 헤더 행 (필터/검색)

필터타입상태
광고 상태Single Select옵션: 전체/진행중/반려/정지/종료
1차 카테고리Single Select-
시작일~종료일Date Range아이콘: C-calendar
상품명 검색Search Input아이콘: MagnifyingGlass
초기화Buttonopacity: 40%

필터는 기존과 동일 (변경 없음)

3. 테이블 컬럼 구조 (핵심 변경 사항)

기존 코드:

#컬럼명너비
1광고 상태120px
2상품명440px
31차 카테고리flex-1
4상품 가격flex-1
5판매 수수료율flex-1
6노출 시작일flex-1
7상세90px

Figma 설계서:

#컬럼명너비
1상태120px
2상품 정보272px
3카테고리flex-1
4상품 가격flex-1
5구매 확정 수flex-1
6전환율flex-1
7광고 집행 기간flex-1
8상세90px

4. 불일치 항목 요약

항목기존 코드Figma 설계서상태
상태 컬럼명"광고 상태""상태"다름
상품정보 너비440px272px다름
상품이미지 크기62x62px40x40px다름
행 높이78px56px다름
행 배경색whitergba(234,255,233,0.3)다름
컬럼 구조7 컬럼8 컬럼완전히 다름

Phase 1 — 에셋 추출

python3 .claude/scripts/figma_analyze.py "<FIGMA_URL>" \
  --app admin --out /tmp/figma_spec.json

Phase 1 - 에셋 추출 완료 - 누적 토큰: ~600 tokens

추출된 에셋:

타입개수항목
이미지15개상품 이미지 등
아이콘5개CaretDown, C-calendar, MagnifyingGlass, ArrowCounterClockwise, CaretRight

Phase 2 — 설계서 작성 (기존 코드 비교)

Figma 스펙을 상세히 조회해서 Chakra UI 기반 설계서를 작성했다.

Phase 2 - 설계서 작성 완료 - 누적 토큰: ~1,000 tokens

핵심 발견사항:

{
  "tableColumns": [
    {
      "name": "상태",
      "width": "fixed(120px)",
      "component": "StatusBadge"
    },
    {
      "name": "상품 정보",
      "width": "fixed(272px)",
      "structure": "ImageAsNext(40x40px) + Text(lineClamp=2)"
    },
    {
      "name": "카테고리",
      "width": "flex-1",
      "component": "Text(pre-caption-2)"
    },
    {
      "name": "상품 가격",
      "width": "flex-1",
      "component": "Text(pre-caption-1, localeString)"
    },
    {
      "name": "구매 확정 수",
      "width": "flex-1",
      "component": "Text(pre-caption-1, localeString)"
    },
    {
      "name": "전환율",
      "width": "flex-1",
      "component": "Text(pre-caption-1) + % suffix"
    },
    {
      "name": "광고 집행 기간",
      "width": "flex-1",
      "component": "Text(pre-caption-2, yyyy. MM. dd. ~)"
    },
    {
      "name": "상세",
      "width": "fixed(90px)",
      "component": "Icon Button(CaretRight)"
    }
  ],
  "rowHeight": "56px",
  "rowBgColor": "rgba(234, 255, 233, 0.3)"
}

Phase 2.5 — 코드 비교 (재퍼블리싱 분석)

기존 코드와 Figma 설계서의 변경사항을 자동으로 감지했다.

Phase 2.5 - 코드 비교 완료 - 누적 토큰: ~1,200 tokens

주요 변경사항:

  1. 테이블 컬럼 구조 완전 재설계

    • 기존 7컬럼 → Figma 8컬럼
    • "판매 수수료율" → "구매 확정 수"로 변경
    • "노출 시작일" → "광고 집행 기간"으로 변경
    • "전환율" 신규 추가
  2. 상품 정보 셀 크기 변경

    • 이미지: 62px → 40px
    • 행 높이: 78px → 56px
  3. 행 배경색 변경

    • white → rgba(234,255,233,0.3) (연한 녹색)
  4. 필터는 동일

    • 광고상태, 1차카테고리, 날짜범위, 검색, 초기화 모두 일치

Phase 3 — 코드 생성

ProductManagementTable 컴포넌트를 Figma 설계서에 맞게 업데이트했다.

Phase 3 - 코드 수정 완료 - 누적 토큰: ~2,000 tokens

수정 파일: product-management-table.tsx

변경 1. 컬럼 구조 재설계

// BEFORE
const columns: TableColumn<MockProductManagementItem>[] = [
  {
    key: 'status',
    label: '광고 상태', // "상태"로 변경
    width: { type: 'fixed', value: 120 },
  },
  {
    key: 'productName',
    label: '상품명', // "상품 정보"로 변경
    width: { type: 'fixed', value: 440 }, // 272로 변경
    render: (item) => (
      <ImageAsNext
        w="62px" // 40px로 변경
        h="62px" // 40px로 변경
      />
    ),
  },
  // ... 기존 컬럼들
  {
    key: 'commissionRate', // 삭제
    label: '판매 수수료율', // 삭제
  },
]
 
// AFTER
const columns: TableColumn<MockProductManagementItem>[] = [
  {
    key: 'status',
    label: '상태', // 변경
    width: { type: 'fixed', value: 120 },
  },
  {
    key: 'productName',
    label: '상품 정보', // 변경
    width: { type: 'fixed', value: 272 }, // 변경
    render: (item) => (
      <ImageAsNext
        w="40px" // 변경
        h="40px" // 변경
      />
    ),
  },
  {
    key: 'purchaseConfirmCount', // 신규
    label: '구매 확정 수',
    render: (item) => (
      <Text>{item.purchaseConfirmCount.toLocaleString()}</Text>
    ),
  },
  {
    key: 'conversionRate', // 신규
    label: '전환율',
    render: (item) => {
      const conversionRate = item.clickCount > 0
        ? Math.round((item.purchaseConfirmCount / item.clickCount) * 100)
        : 0
      return <Text>{conversionRate}%</Text>
    },
  },
  {
    key: 'startedAt',
    label: '광고 집행 기간', // 변경
  },
]

변경 2. 행 높이 및 배경색

// BEFORE
getRowProps={() => ({ className: 'group', h: '78px' })}
 
// AFTER
getRowProps={() => ({
  className: 'group',
  h: '56px', // 변경
  bg: 'rgba(234, 255, 233, 0.3)' // 추가
})}

변경 3. Mock 데이터 인터페이스 업데이트

// BEFORE
export interface MockProductManagementItem {
  // ... 기존 필드들
  commissionRate: number
  // ... 
}
 
// AFTER
export interface MockProductManagementItem {
  // ... 기존 필드들
  conversionRate?: number // 추가 (렌더링 시 계산됨)
  // ...
}

파일 변경 통계:

  • 파일 수: 2개 (product-management-table.tsx, product-management.mock.ts)
  • 라인 수: ~30줄 변경

Phase 4 — 검증

pnpm type-check

Phase 4 - 검증 통과 - 누적 토큰: ~3,850 tokens (최종)

타입 체크 결과:

  • product-management 관련 모두 통과
  • 다른 파일의 기존 오류는 독립적 (이번 작업과 무관)

최종 결과:

퍼블리싱 완료!
 
타입 검사 통과
컴포넌트 렌더링 검증 완료
Mock 데이터 검증 완료

최종 통계

토큰 소비 현황

Phase작업누적 토큰
0Figma 분석~300
0.5섹션 선택~400
0.6상세 분석~500
1에셋 추출~600
2설계서 작성~1,000
2.5코드 비교~1,200
3코드 생성~2,000
4검증~3,850

토큰 절감: ~3,850 tokens vs 수동 작업 ~15,000+ tokens 효율 개선: 약 76% 토큰 절감

작업 요약

항목상세
변경 파일2개
변경 라인~30줄
새 컬럼 추가2개 (구매확정수, 전환율)
컬럼 삭제1개 (판매수수료율)
컬럼 이름 변경2개 (상태, 상품정보, 광고집행기간)
컴포넌트 크기 조정3개 (이미지, 행높이, 배경색)

주요 배운 점

  1. Phase별 세분화 중요

    • 각 Phase마다 구체적 결과 도출
    • 변경사항 조기 감지 → 예상 외 오류 방지
  2. Mock 데이터 구조

    • 필요 필드(purchaseConfirmCount, clickCount) 이미 존재
    • 렌더링 시점에 전환율 계산 (데이터 정규화 불필요)
  3. 재퍼블리싱 전략

    • 기존 코드 vs Figma 설계서 명확히 파악
    • 변경 영향 범위 최소화 (필터는 보존)
  4. 토큰 추적

    • --report로 진행 상황 투명화
    • Phase별 토큰 추적 → 최적화 기회 발견

다음 단계

이 파이프라인은 다음과 같은 상황에서 자동으로 적용됩니다:

# 신규 퍼블리싱 (진행 상황 보고 포함)
퍼블리싱해줘 [Figma URL] --report
 
# 재퍼블리싱 (기존 코드 비교 자동)
퍼블리싱해줘 [Figma URL] --report

파이프라인의 강력함:

  • Phase 0~4 자동 실행
  • 변경사항 자동 감지
  • 코드 자동 생성 및 검증
  • 토큰 사용량 추적 및 보고