Search

MCP 기반 μžλ™ν™” νŒŒμ΄ν”„λΌμΈ

07. MCP 기반 μžλ™ν™” νŒŒμ΄ν”„λΌμΈ μ „λž΅

μ „λž΅ κ°œμš”

Figma MCP + AI Agent + CI/CDλ₯Ό κ²°ν•©ν•˜μ—¬, λ””μžμΈ 변경이 λ°œμƒν•˜λ©΄ μ‚¬λžŒ κ°œμž… μ΅œμ†Œν™”λ‘œ μ½”λ“œ PR이 μžλ™ μƒμ„±λ˜λŠ” νŒŒμ΄ν”„λΌμΈμ„ κ΅¬μΆ•ν•˜λŠ” μ „λž΅μž…λ‹ˆλ‹€. "λ””μžμΈ β†’ μ½”λ“œ"의 일방톡행을 μžλ™ν™”ν•©λ‹ˆλ‹€.
[λ””μžμ΄λ„ˆκ°€ Figma λ³€κ²½] β”‚ β–Ό [Figma Webhook (FILE_UPDATE)] β”‚ β–Ό [GitHub Actions Workflow] β”‚ β–Ό [AI Agent + Framelink MCP] - λ³€κ²½λœ λ…Έλ“œ 식별 - μ½”λ“œ 생성/μˆ˜μ • β”‚ β–Ό [μžλ™ PR 생성] - λ³€κ²½ diff - Storybook μ‹œκ° νšŒκ·€ κ²°κ³Ό - Code Connect λ§€ν•‘ 검증 β”‚ β–Ό [μ‚¬λžŒ 리뷰 β†’ λ¨Έμ§€ β†’ 배포]
Plain Text
볡사

핡심 도ꡬ

β€’
Figma Webhooks (Plan별 κ°€μš©)
β€’
GitHub Actions
β€’
Framelink MCP (μ„œλ²„ ν™˜κ²½μ—μ„œ μ‹€ν–‰ κ°€λŠ₯)
β€’
Claude Code SDK / Copilot CLI / OpenAI Agents SDK λ“± ν—€λ“œλ¦¬μŠ€ AI
β€’
Chromatic / Playwright (μ‹œκ° νšŒκ·€ 검증)

적용 μ‹œλ‚˜λ¦¬μ˜€

β€’
λ””μžμΈ λ³€κ²½ λΉˆλ„κ°€ 맀우 λ†’μŒ
β€’
μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„κ°€ λͺ…ν™•ν•œ λ””μžμΈ μ‹œμŠ€ν…œ
β€’
κ°•λ ₯ν•œ μžλ™ ν…ŒμŠ€νŠΈ ν™˜κ²½ 보유
β€’
AI λΉ„μš©μ„ κ°μˆ˜ν•  수 μžˆλŠ” 규λͺ¨

단계별 ꡬ좕

1) Figma Webhook μ„€μ •

curl -X POST <https://api.figma.com/v2/webhooks> \\ -H "X-Figma-Token: $FIGMA_TOKEN" \\ -d '{ "event_type": "FILE_UPDATE", "file_key": "abcXYZ", "endpoint": "<https://api.your-org.com/figma-webhook>", "passcode": "secret" }'
Bash
볡사

2) Webhook μˆ˜μ‹  β†’ GitHub Actions Trigger

β€’
μˆ˜μ‹  μ„œλ²„(예: Cloudflare Workers)μ—μ„œ λ³€κ²½ 검증
β€’
GitHub repository_dispatch 이벀트 λ°œμƒ

3) GitHub Actions: AI Agent μ‹€ν–‰

on: repository_dispatch: types: [figma-update] jobs: sync: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run AI Agent with MCP run: | npx @anthropic/claude-code \\ --mcp-config .mcp/figma.json \\ --prompt "$(cat .ai/sync-prompt.md)" \\ --file-key ${{ github.event.client_payload.file_key }} env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} FIGMA_TOKEN: ${{ secrets.FIGMA_TOKEN }} - name: Create Pull Request uses: peter-evans/create-pull-request@v6 with: title: "🎨 Figma sync: ${{ github.event.client_payload.file_name }}" body: ${{ steps.ai.outputs.summary }} branch: figma-sync/${{ github.run_id }}
YAML
볡사

4) AI ν”„λ‘¬ν”„νŠΈ 섀계 (.ai/sync-prompt.md)

당신은 Figma β†’ React μžλ™ 동기화 μ—μ΄μ „νŠΈμž…λ‹ˆλ‹€. μ§€μΉ¨: 1. Figma file의 λ³€κ²½λœ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‹λ³„ν•˜μ„Έμš” (mcp.get_figma_data) 2. μ½”λ“œ μΈ‘ src/components/ 의 λŒ€μ‘ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ°ΎμœΌμ„Έμš” 3. λ³€κ²½ 사항을 μ μš©ν•˜λ˜, λ‹€μŒ κ·œμΉ™ μ€€μˆ˜: - λ””μžμΈ ν† ν°λ§Œ μ‚¬μš© (hex 직접 μž…λ ₯ κΈˆμ§€) - κΈ°μ‘΄ props μ‹œκ·Έλ‹ˆμ²˜ μœ μ§€ - Storybook μŠ€ν† λ¦¬λ„ ν•¨κ»˜ μ—…λ°μ΄νŠΈ 4. λ³€κ²½ μš”μ•½μ„ PR description에 μž‘μ„± 5. λΆˆν™•μ‹€ν•œ 변경은 μ½”λ©˜νŠΈλ‘œ ν‘œκΈ° (`// AI: κ²€ν†  ν•„μš”`)
Plain Text
볡사

5) PR 검증 게이트

β€’
Storybook λΉŒλ“œ
β€’
Chromatic μ‹œκ° νšŒκ·€ (λ³€κ²½ μ˜λ„ 확인)
β€’
TypeScript 컴파일
β€’
ESLint
β€’
Code Connect λ§€ν•‘ 검증 (figma connect parse)
β€’
μ‚¬λžŒ 리뷰 ν•„μˆ˜

6) λ¨Έμ§€ β†’ 배포

β€’
Vercel/Netlify μžλ™ 배포
β€’
Slack/Discord μ•Œλ¦Ό

μž₯점

β€’
λ””μžμΈ λ³€κ²½μ˜ 즉각 반영
β€’
μ‚¬λžŒμ˜ λ‹¨μˆœ μž‘μ—… 제거
β€’
좔적 κ°€λŠ₯μ„±: λͺ¨λ“  변경이 PR둜 기둝됨
β€’
ν™•μž₯μ„±: μ»΄ν¬λ„ŒνŠΈ μˆ˜κ°€ λ§Žμ„μˆ˜λ‘ κ°€μΉ˜ ↑

ν•œκ³„

β€’
AI μ‹ λ’°μ„±: μ˜λ„μ™€ λ‹€λ₯Έ λ³€κ²½ λ°œμƒ κ°€λŠ₯ β†’ 게이트 ν•„μˆ˜
β€’
λΉ„μš©: AI API + Figma Plan + CI λΉ„μš©
β€’
λ³΅μž‘ν•œ 인프라: μš΄μ˜νŒ€ ν•„μš”
β€’
Webhook κ°€μš©μ„±: Figma Plan 의쑴
β€’
μƒˆ μ»΄ν¬λ„ŒνŠΈ μ‹ κ·œ μƒμ„±λ³΄λ‹€λŠ” κΈ°μ‘΄ μ»΄ν¬λ„ŒνŠΈ μ—…λ°μ΄νŠΈμ— 강함

μ•ˆμ „μž₯치

β€’
Auto-merge μ ˆλŒ€ κΈˆμ§€ β€” 항상 μ‚¬λžŒ 리뷰
β€’
λ³€κ²½ 영ν–₯ 뢄석: μ–΄λ–€ νŽ˜μ΄μ§€/μ‚¬μš©μ²˜μ— 영ν–₯ κ°€λŠ”μ§€ μžλ™ μ½”λ©˜νŠΈ
β€’
Rollback 절차 사전 μ •μ˜
β€’
μΉ΄λ‚˜λ¦¬ 배포: PR λ¨Έμ§€ ν›„ 일뢀 νŠΈλž˜ν”½μ—λ§Œ μš°μ„  배포

λ‹€λ₯Έ μ „λž΅κ³Όμ˜ κ²°ν•©

β€’
04 (Design Tokens): 토큰 변경은 별도 νŒŒμ΄ν”„λΌμΈμœΌλ‘œ 뢄리
β€’
05 (Storybook SoT): μ‹œκ° νšŒκ·€λ‘œ λ³€κ²½ 검증
β€’
06 (Library Registry): μžλ™ PR이 νŒ¨ν‚€μ§€ 버전도 ν•¨κ»˜ bump