본문으로 바로가기
리옵트 핸드북
리옵트 핸드북
AI 시대의 디자인 시스템

기반 설계

토큰 아키텍처컴포넌트 명세접근성 내장

AI 워크플로우

프롬프트 인터페이스DESIGN.md 인터페이스에이전틱 디자인 품질 제어워크플로우 전략AI 기반 DS 진화컨텍스트 주입

사용자 경험

일관성 패턴인터랙션 설계폼 & 데이터 입력

차세대 인터페이스

에이전트 UI 프로토콜생성형 UI공간·멀티모달 인터페이스

실전

실행 플레이북마이그레이션 전략거버넌스 & 협업사례 연구

운영

검증 체크리스트업데이트 로그
핸드북›AI 시대의 디자인 시스템›마이그레이션 전략
한국어English

마이그레이션 전략

토큰 정규화·타입 강화(Phase 1), CLAUDE.md·MCP·검증 파이프라인(Phase 2), 팀 온보딩(Phase 3)과 Strangler Fig 패턴으로 기존 DS를 AI-Ready로 점진 전환하는 로드맵.

핵심 요약

  • AI-Ready 전환은 빅뱅이 아닌 3단계(기반 구축 → AI 통합 → 팀 온보딩) 점진 프로세스입니다.
  • Phase 1은 codemod로 하드코딩 값을 토큰 참조로 변환하고, 느슨한 string 타입을 Literal Union으로 강화하며, 문서를 컴포넌트별 구조로 표준화합니다.
  • Phase 2는 컴포넌트 메타에서 CLAUDE.md를 자동 생성하고 MCP 서버와 type·a11y·visual·token 검증 CI 파이프라인을 구축합니다.
  • Strangler Fig 패턴과 Feature Flag로 신규 컴포넌트와 레거시를 함께 굴리면서 점진 교체하고, A/B로 효과를 측정합니다.
  • 성공 지표는 하드코딩 값 0, 타입 커버리지 95%+, 접근성 위반 0, AI 코드 생성 성공률 85%+를 목표로 잡습니다.

기존 디자인 시스템을 AI-First 시스템으로 바꾸는 일은 한 번에 끝나지 않는 점진적 개선 프로세스입니다. 빅뱅 마이그레이션은 리스크가 커서 단계별로 접근해야 합니다.

마이그레이션 로드맵

AI-Ready 디자인 시스템 마이그레이션 로드맵

Phase 1: 기반 구축

1.1 토큰 정규화

현황 분석 스크립트

// scripts/analyze-tokens.ts

interface TokenAuditResult {
  hardcodedColors: Array<{ file: string; line: number; value: string }>
  hardcodedSpacing: Array<{ file: string; line: number; value: string }>
  inconsistentNaming: Array<{ token: string; suggested: string }>
  missingTokens: string[]
}

async function auditTokenUsage(srcDir: string): Promise<TokenAuditResult> {
  const files = await glob(`${srcDir}/**/*.{tsx,ts,css}`)
  const result: TokenAuditResult = {
    hardcodedColors: [],
    hardcodedSpacing: [],
    inconsistentNaming: [],
    missingTokens: [],
  }

  for (const file of files) {
    const content = await readFile(file, 'utf-8')
    const lines = content.split('\n')

    lines.forEach((line, index) => {
      // 하드코딩된 색상 감지
      const colorMatches = line.match(/#[0-9a-fA-F]{3,8}|rgba?\([^)]+\)/g)
      if (colorMatches) {
        colorMatches.forEach((value) => {
          result.hardcodedColors.push({ file, line: index + 1, value })
        })
      }

      // 하드코딩된 간격 감지
      const spacingMatches = line.match(/\b\d+px\b/g)
      if (spacingMatches) {
        spacingMatches.forEach((value) => {
          result.hardcodedSpacing.push({ file, line: index + 1, value })
        })
      }
    })
  }

  return result
}

// 실행
const audit = await auditTokenUsage('./src')
console.log(`하드코딩된 색상: ${audit.hardcodedColors.length}개`)
console.log(`하드코딩된 간격: ${audit.hardcodedSpacing.length}개`)

토큰 변환 전략

// scripts/migrate-tokens.ts

// 1. 색상 매핑 생성
const colorMap = new Map([
  ['#3B82F6', 'colors.primary'],
  ['#EF4444', 'colors.destructive'],
  ['#F3F4F6', 'colors.muted'],
  // ...기존 색상 → 토큰 매핑
])

// 2. 간격 매핑 생성
const spacingMap = new Map([
  ['4px', 'spacing.1'],
  ['8px', 'spacing.2'],
  ['16px', 'spacing.4'],
  // ...
])

// 3. 자동 변환 (codemod)
function transformHardcodedValues(code: string): string {
  let result = code

  colorMap.forEach((token, value) => {
    const regex = new RegExp(escapeRegex(value), 'g')
    result = result.replace(regex, `var(--${token.replace('.', '-')})`)
  })

  return result
}

1.2 타입 시스템 강화

// 기존: 느슨한 타입
interface ButtonProps {
  variant?: string
  size?: string
}

// 목표: 엄격한 타입
type ButtonVariant = 'default' | 'destructive' | 'outline' | 'ghost' | 'link'
type ButtonSize = 'default' | 'sm' | 'lg' | 'icon'

interface ButtonProps {
  /** 시각적 스타일 @default "default" */
  variant?: ButtonVariant
  /** 버튼 크기 @default "default" */
  size?: ButtonSize
}

Props 타입 마이그레이션

// scripts/migrate-types.ts

// 1. 기존 Props 분석
interface PropsAnalysis {
  component: string
  props: Array<{
    name: string
    currentType: string
    suggestedType: string
    values: string[] // 실제 사용된 값들
  }>
}

// 2. 타입 생성
function generateStrictTypes(analysis: PropsAnalysis): string {
  return analysis.props
    .map((prop) => {
      if (prop.values.length <= 10) {
        const union = prop.values.map((v) => `'${v}'`).join(' | ')
        return `type ${capitalize(prop.name)} = ${union}`
      }
      return null
    })
    .filter(Boolean)
    .join('\n')
}

1.3 문서 구조화

## 기존 문서 구조

- README.md (산문형)
- 코드 주석 (비일관적)

## 목표 문서 구조

components/
└── button/
├── button.tsx # 컴포넌트
├── button.types.ts # 타입 정의
├── button.stories.tsx # Storybook
├── button.test.tsx # 테스트
└── button.docs.mdx # 구조화된 문서

Phase 2: AI 통합

2.1 CLAUDE.md 작성

# Design System CLAUDE.md

## 컴포넌트 사용 규칙

### 필수 규칙

1. 모든 스타일링은 디자인 시스템 컴포넌트/토큰 사용
2. 하드코딩된 색상/간격 금지
3. 모든 인터랙티브 요소에 접근성 속성 필수

### 컴포넌트 선택 가이드

{자동 생성된 가이드 테이블}

### 토큰 참조

{토큰 문서 링크 또는 인라인 참조}

CLAUDE.md 자동 생성

// scripts/generate-claude-md.ts

async function generateClaudeMd(componentsDir: string): Promise<string> {
  const components = await loadComponents(componentsDir)

  const sections = [
    generateHeader(),
    generateComponentGuide(components),
    generateTokenReference(),
    generatePatterns(),
    generateDosAndDonts(),
  ]

  return sections.join('\n\n')
}

function generateComponentGuide(components: Component[]): string {
  const table = components.map((c) => ({
    name: c.name,
    useFor: c.metadata.useFor,
    avoidFor: c.metadata.avoidFor,
    example: c.examples[0]?.code,
  }))

  return formatMarkdownTable(table)
}

2.2 MCP 서버 구축

2.3 검증 파이프라인

# .github/workflows/design-system-ci.yml

name: Design System CI

on:
  pull_request:
    paths:
      - 'packages/ui/**'
      - 'tokens/**'

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Type Check
        run: yarn tsc --noEmit

      - name: Lint (Design System Rules)
        run: yarn lint:ds

      - name: Accessibility Audit
        run: yarn test:a11y

      - name: Visual Regression
        run: yarn test:visual

      - name: Token Validation
        run: yarn validate:tokens

Phase 3: 팀 온보딩

3.1 온보딩 체크리스트

## 개발자 온보딩

### Day 1: 기본 이해

- [ ] 디자인 시스템 문서 읽기
- [ ] Storybook 둘러보기
- [ ] CLAUDE.md 규칙 숙지

### Day 2: 실습

- [ ] 간단한 컴포넌트 구현 (AI 활용)
- [ ] 코드 리뷰 받기
- [ ] 피드백 반영

### Day 3-5: 심화

- [ ] 복잡한 패턴 구현
- [ ] 커스텀 컴포넌트 작성
- [ ] 문서 기여

3.2 교육 자료

## AI + 디자인 시스템 워크숍

### Session 1: 컴포넌트 선택 (30분)

- AI에게 "버튼 만들어줘" vs "폼 제출 버튼 필요"
- 명확한 컨텍스트 제공의 중요성
- 실습: 다양한 UI 시나리오

### Session 2: 토큰 활용 (30분)

- 토큰 시스템 이해
- AI가 토큰을 올바르게 선택하도록 하기
- 실습: 커스텀 테마 적용

### Session 3: 복잡한 패턴 (45분)

- 폼, 테이블, 대시보드 패턴
- AI와 함께 점진적 구축
- 실습: 실제 기능 구현

3.3 피드백 수집

// 피드백 수집 시스템

interface DesignSystemFeedback {
  type: 'bug' | 'improvement' | 'question' | 'ai-issue'
  component?: string
  description: string
  aiContext?: {
    prompt: string
    generatedCode: string
    issue: string
  }
  priority: 'low' | 'medium' | 'high'
}

// AI 관련 이슈 자동 수집
function collectAIFeedback(event: { prompt: string; output: string; validationErrors: string[] }) {
  if (event.validationErrors.length > 0) {
    submitFeedback({
      type: 'ai-issue',
      description: '검증 실패',
      aiContext: {
        prompt: event.prompt,
        generatedCode: event.output,
        issue: event.validationErrors.join(', '),
      },
      priority: 'medium',
    })
  }
}

점진적 도입 전략

Strangler Fig 패턴

// 새 컴포넌트와 기존 컴포넌트 공존

// components/button/index.ts
import { LegacyButton } from './legacy-button'
import { Button as NewButton } from './button'
import { useFeatureFlag } from '@/lib/feature-flags'

export function Button(props: ButtonProps) {
  const useNewDesignSystem = useFeatureFlag('new-design-system')

  if (useNewDesignSystem) {
    return <NewButton {...props} />
  }

  // 기존 props를 새 props로 매핑
  return <LegacyButton {...mapLegacyProps(props)} />
}

성공 지표

정량적 지표

지표마이그레이션 전목표
하드코딩된 값500+0
타입 커버리지60%95%+
접근성 위반50+0
AI 코드 생성 성공률-85%+
검증 통과율-95%+

정성적 지표

  • 개발자 만족도 설문
  • AI 활용 빈도
  • 코드 리뷰 피드백
  • 디자인 일관성 평가

체크리스트

참고 자료

  • Strangler Fig Pattern
  • Design System Migration Guide
  • Feature Flags Best Practices

관련 문서

AI 기반 DS 진화

AI로 토큰·컴포넌트·패턴을 며칠 만에 생성하고 Stitch 동기화·자동 릴리스로 디자인 시스템 자체를 2-4주 만에 구축·진화시키는 전략.

팀 문서화 문화 만들기

에이전틱 시대의 문서화 혁신 · 에이전트 지침, Skill, Plugin, MCP를 운영하는 팀 거버넌스

토큰 아키텍처

Primitive·Semantic·Component 3계층 토큰 구조와 AI 친화 네이밍, W3C DTCG 1.0 포맷·Style Dictionary v5 변환 파이프라인, MCP 서버 연동으로 AI가 토큰을 추론·조합하게 만드는 설계

실행 플레이북

토큰(1주) → 컴포넌트 명세·접근성(2주) → AI 문서(3주) → 품질 게이트·변경 관리(4주)로 AI-First 디자인 시스템을 4주 만에 운영 가능 상태로 만드는 최소 경로.

거버넌스 & 협업

RACI·RFC 변경 관리, 6종 품질 게이트, Golden Prompt Suite 회귀 테스트, Figma-GitHub 연동까지 디자인 시스템 거버넌스와 디자이너-개발자 협업 설계.

On this page

마이그레이션 로드맵Phase 1: 기반 구축1.1 토큰 정규화현황 분석 스크립트토큰 변환 전략1.2 타입 시스템 강화Props 타입 마이그레이션1.3 문서 구조화Phase 2: AI 통합2.1 CLAUDE.md 작성CLAUDE.md 자동 생성2.2 MCP 서버 구축2.3 검증 파이프라인Phase 3: 팀 온보딩3.1 온보딩 체크리스트3.2 교육 자료3.3 피드백 수집점진적 도입 전략Strangler Fig 패턴성공 지표정량적 지표정성적 지표체크리스트Phase 1: 기반Phase 2: AI 통합Phase 3: 확장참고 자료