본문 바로가기

카테고리 없음

Cursor + Figma MCP 가이드 - Cursor로 Figma 디자인을 코드로 변환하기

🎯 이번 편에서 배울 내용

  • Figma 디자인을 HTML/CSS로 변환하기
  • AI 프롬프트 작성 기법
  • 생성된 코드 확인 및 테스트
  • 코드 수정 및 개선하기

프로젝트 준비

시작하기 전에 확인사항

  • ✅ Figma MCP가 Cursor에 연결되어 있음
  • ✅ "Login Screen" 디자인이 완성됨
  • ✅ Figma 링크가 준비됨
  • ✅ 프로젝트 폴더가 있음

작업 폴더 준비

  1. 탐색기로 C:\Users\사용자이름\Documents\CursorProjects 이동
  2. 새 폴더 만들기: "login-screen-project"
  3. Cursor에서 이 폴더 열기:
    • File > Open Folder
    • "login-screen-project" 선택

Step 1: Composer 모드로 코드 생성

1-1. Composer 열기

  1. Cursor에서 Ctrl + I (대문자 아이)
  2. Composer 창이 화면 중앙에 나타남
  3. "Agent" 모드가 활성화되어 있는지 확인

1-2. 기본 프롬프트 작성

Composer 입력창에 다음과 같이 입력합니다:

다음 Figma 디자인을 HTML과 CSS로 구현해줘:

[여기에 Figma 링크 붙여넣기]

요구사항:
1. 시맨틱 HTML5 태그 사용
2. CSS는 별도 파일로 분리
3. 반응형 디자인 (모바일 우선)
4. 깔끔하고 읽기 쉬운 코드
5. 주석 포함

예시:

다음 Figma 디자인을 HTML과 CSS로 구현해줘:

https://www.figma.com/design/abc123xyz/Mobile-Login-Screen?node-id=1-2

요구사항:
1. 시맨틱 HTML5 태그 사용
2. CSS는 별도 파일로 분리
3. 반응형 디자인 (모바일 우선)
4. 깔끔하고 읽기 쉬운 코드
5. 주석 포함

1-3. AI 작업 과정 관찰

프롬프트를 보낸 후 AI는 다음 단계를 거칩니다:

1단계: Figma 정보 가져오기

🔧 Using tool: get_figma_node
Fetching design from Figma...

2단계: 디자인 분석

Analyzing layout structure...
- Frame: Login Screen (393×852)
- Elements: Logo, 2 input fields, 1 button, links
- Colors: #F8F9FA, #4A90E2, #FFFFFF
- Typography: Inter font family

3단계: 코드 생성

Creating files...
✓ index.html
✓ styles.css

4단계: 완료

✅ Implementation complete!
Created a responsive login screen matching your Figma design.

1-4. 생성된 파일 확인

왼쪽 Explorer에 다음 파일들이 생성됩니다:

login-screen-project/
├── index.html
├── styles.css
└── README.md (선택사항)

Step 2: 생성된 코드 검토

2-1. HTML 파일 열기

  1. Explorer에서 index.html 클릭
  2. 코드가 에디터에 표시됩니다

예상되는 HTML 구조:

html
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>로그인</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="container">
        <div class="login-screen">
            <!-- 로고 -->
            <div class="logo">
                <div class="logo-circle">
                    <span>LOGO</span>
                </div>
            </div>
            
            <!-- 입력 필드 -->
            <form class="login-form">
                <div class="input-group">
                    <input type="email" 
                           placeholder="이메일 주소" 
                           required>
                </div>
                
                <div class="input-group">
                    <input type="password" 
                           placeholder="비밀번호" 
                           required>
                </div>
                
                <!-- 로그인 버튼 -->
                <button type="submit" class="login-button">
                    로그인
                </button>
            </form>
            
            <!-- 링크 -->
            <a href="#" class="forgot-password">
                비밀번호를 잊으셨나요?
            </a>
            
            <div class="divider"></div>
            
            <div class="signup-section">
                <span class="signup-text">계정이 없으신가요?</span>
                <a href="#" class="signup-link">회원가입</a>
            </div>
        </div>
    </div>
</body>
</html>

2-2. CSS 파일 검토

  1. Explorer에서 styles.css 클릭
  2. 스타일 코드 확인

예상되는 CSS 주요 부분:

css
/* 전역 리셋 */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background-color: #F8F9FA;
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
}

.container {
    width: 100%;
    max-width: 393px;
}

.login-screen {
    padding: 20px;
}

/* 로고 스타일 */
.logo {
    text-align: center;
    margin-bottom: 60px;
    margin-top: 80px;
}

.logo-circle {
    width: 100px;
    height: 100px;
    background-color: #4A90E2;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: #FFFFFF;
    font-size: 32px;
    font-weight: bold;
}

/* 입력 필드 스타일 */
.input-group {
    margin-bottom: 16px;
}

.input-group input {
    width: 100%;
    height: 52px;
    padding: 0 16px;
    background: #FFFFFF;
    border: none;
    border-radius: 12px;
    font-size: 16px;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}

.input-group input::placeholder {
    color: #9CA3AF;
}

/* 로그인 버튼 스타일 */
.login-button {
    width: 100%;
    height: 52px;
    background-color: #4A90E2;
    color: #FFFFFF;
    border: none;
    border-radius: 12px;
    font-size: 16px;
    font-weight: bold;
    cursor: pointer;
    margin-top: 24px;
}

.login-button:hover {
    background-color: #5BA3F5;
}

2-3. 코드 품질 확인

생성된 코드가 다음 요소를 포함하는지 확인:

  • ✅ 시맨틱 HTML 태그 (<form>, <button> 등)
  • ✅ 올바른 input type (email, password)
  • ✅ CSS 변수 또는 일관된 색상 사용
  • ✅ 주석이 포함되어 있음
  • ✅ 반응형 스타일 (max-width, width: 100%)

Step 3: 브라우저에서 테스트

3-1. Live Server 실행 (방법 1)

Cursor에는 Live Server 기능이 내장되어 있을 수 있습니다:

  1. index.html 파일에서 마우스 오른쪽 버튼
  2. "Open with Live Server" 선택
  3. 브라우저가 자동으로 열립니다

3-2. 파일 직접 열기 (방법 2)

  1. 탐색기에서 index.html 파일 찾기
  2. 파일을 더블클릭
  3. 기본 웹 브라우저에서 열립니다

3-3. 결과 확인

브라우저에서 다음을 확인합니다:

✅ 정상 작동:

  • 로고가 중앙에 표시됨
  • 입력 필드가 올바르게 배치됨
  • 버튼이 클릭 가능함
  • 링크가 작동함
  • 반응형이 작동함 (브라우저 크기 조절 시)

❌ 문제가 있는 경우:

  • 레이아웃이 깨짐
  • 색상이 다름
  • 간격이 맞지 않음
  • 폰트가 로드되지 않음

Step 4: 코드 개선 및 수정

4-1. 간단한 수정 요청

Composer 창에 다음과 같이 입력:

로그인 버튼에 호버 효과를 추가해줘.
마우스를 올리면 색상이 약간 밝아지고,
부드러운 전환 효과를 넣어줘.

AI가 CSS를 다음과 같이 수정합니다:

css
.login-button {
    /* 기존 스타일 */
    transition: background-color 0.3s ease;
}

.login-button:hover {
    background-color: #5BA3F5;
}

.login-button:active {
    background-color: #3A7BC8;
}

4-2. 폰트 추가 요청

Inter 폰트를 Google Fonts에서 로드하도록
HTML head에 추가해줘.

AI가 HTML을 수정합니다:

html
<head>
    <!-- 기존 태그들 -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
</head>

4-3. 반응형 개선

데스크톱에서 볼 때 로그인 화면이 너무 작아보여.
최대 너비를 조금 더 크게 하고,
화면 중앙에 카드 스타일로 배치해줘.

4-4. 접근성 개선

접근성을 개선하기 위해:
1. input 필드에 label 추가
2. 버튼에 aria-label 추가
3. focus 스타일 강화

Step 5: 고급 기능 추가

5-1. 입력 유효성 검사 (JavaScript)

입력 필드에 실시간 유효성 검사를 추가해줘:
1. 이메일 형식 확인
2. 비밀번호 최소 8자
3. 오류 메시지 표시

AI가 새 파일을 생성합니다:

javascript
// script.js
document.addEventListener('DOMContentLoaded', function() {
    const form = document.querySelector('.login-form');
    const emailInput = form.querySelector('input[type="email"]');
    const passwordInput = form.querySelector('input[type="password"]');
    
    // 이메일 유효성 검사
    emailInput.addEventListener('blur', function() {
        const email = this.value;
        const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        
        if (!emailRegex.test(email)) {
            showError(this, '유효한 이메일 주소를 입력하세요.');
        } else {
            clearError(this);
        }
    });
    
    // 폼 제출
    form.addEventListener('submit', function(e) {
        e.preventDefault();
        // 로그인 로직
    });
});

5-2. 애니메이션 추가

페이지 로드 시 요소들이 부드럽게 나타나는
fade-in 애니메이션을 추가해줘.
위에서 아래로 순차적으로 나타나게 해줘.

5-3. 로딩 상태 구현

로그인 버튼을 클릭하면:
1. 버튼이 로딩 상태로 변경
2. 스피너 아이콘 표시
3. 클릭 비활성화

Step 6: 다크 모드 구현

6-1. CSS 변수 사용

먼저 기존 CSS를 변수로 변환하도록 요청:

CSS를 CSS 변수로 리팩토링해줘.
색상, 간격, 폰트 크기를 변수로 만들어줘.

결과:

css
:root {
    /* Colors */
    --color-background: #F8F9FA;
    --color-primary: #4A90E2;
    --color-white: #FFFFFF;
    --color-text: #1F2937;
    --color-text-secondary: #6B7280;
    --color-placeholder: #9CA3AF;
    
    /* Spacing */
    --spacing-xs: 8px;
    --spacing-sm: 16px;
    --spacing-md: 24px;
    --spacing-lg: 32px;
    
    /* Border radius */
    --radius-sm: 8px;
    --radius-md: 12px;
}

6-2. 다크 모드 추가

다크 모드를 추가해줘:
1. CSS 변수를 사용해서 다크 테마 정의
2. 토글 버튼 추가
3. localStorage에 설정 저장

Step 7: 최종 테스트

7-1. 기능 테스트 체크리스트

브라우저에서 다음을 테스트합니다:

입력 테스트:

  • 이메일 입력 가능
  • 비밀번호 입력 가능
  • 플레이스홀더 표시
  • 포커스 스타일 작동

버튼 테스트:

  • 로그인 버튼 클릭 가능
  • 호버 효과 작동
  • 클릭 효과 작동

링크 테스트:

  • "비밀번호 잊으셨나요?" 클릭 가능
  • "회원가입" 클릭 가능

반응형 테스트:

  • 모바일 크기 (393px)
  • 태블릿 크기 (768px)
  • 데스크톱 크기 (1920px)

7-2. 크로스 브라우저 테스트

다른 브라우저에서도 테스트:

  • Chrome
  • Edge
  • Firefox
  • Safari (Mac이 있다면)

7-3. 개발자 도구로 검사

브라우저 개발자 도구 열기 (F12):

  1. Elements 탭: HTML 구조 확인
  2. Console 탭: JavaScript 오류 확인
  3. Network 탭: 리소스 로딩 확인
  4. Lighthouse 탭: 성능, 접근성 점수 확인

Step 8: 코드 정리 및 최적화

8-1. 파일 구조 개선

프로젝트 구조를 정리하도록 요청:

프로젝트 구조를 다음과 같이 정리해줘:
- css/ 폴더에 모든 CSS 파일
- js/ 폴더에 모든 JavaScript 파일
- images/ 폴더 생성 (추후 이미지용)

최종 구조:

login-screen-project/
├── index.html
├── css/
│   ├── styles.css
│   └── animations.css
├── js/
│   └── script.js
└── images/
    └── (나중에 추가)

8-2. 주석 추가

각 CSS 섹션과 JavaScript 함수에
설명 주석을 추가해줘.
다른 개발자가 이해하기 쉽게.

8-3. README 작성

프로젝트 README.md 파일을 작성해줘:
- 프로젝트 설명
- 파일 구조
- 사용 방법
- 기능 목록

프롬프트 작성 팁

좋은 프롬프트 예시 ✅

이 Figma 디자인을 React 컴포넌트로 구현해줘:
[링크]

요구사항:
- TypeScript 사용
- Tailwind CSS로 스타일링
- 재사용 가능한 컴포넌트 구조
- PropTypes 정의
- 접근성 고려 (aria-labels)

컴포넌트 파일 구조:
- Button.tsx
- Input.tsx
- LoginForm.tsx

나쁜 프롬프트 예시 ❌

이거 코드로 만들어줘
[링크]

→ 너무 막연함

HTML CSS JavaScript로 완벽하게 만들어줘

→ 구체적인 요구사항 없음

문제 해결

문제 1: 디자인과 코드가 다름

해결방법:

생성된 코드를 Figma 디자인과 비교해줘.
차이점을 찾고 정확히 맞춰줘.

특히 다음 부분을 확인:
- 색상 값
- 간격 (margin, padding)
- 글꼴 크기
- 모서리 반경

문제 2: MCP가 Figma를 읽지 못함

원인 확인:

  1. MCP 서버 상태 확인 (Settings > MCP)
  2. Figma 링크가 올바른지 확인
  3. 파일 공유 설정 확인

해결방법:

  • Cursor 재시작
  • mcp.json 설정 재확인
  • Figma API 토큰 재생성

문제 3: 코드가 작동하지 않음

단계별 디버깅:

  1. 브라우저 Console에서 오류 메시지 확인
  2. AI에게 오류 메시지 보여주기:
 
   다음 오류가 발생해:
   [오류 메시지 붙여넣기]
   
   고쳐줘.

체크리스트: 8편 완료 확인

  • Figma 링크로 코드 생성 성공
  • HTML 파일이 생성됨
  • CSS 파일이 생성됨
  • 브라우저에서 정상 표시됨
  • Figma 디자인과 일치함
  • 반응형이 작동함
  • 기본 인터랙션이 작동함
  • 코드가 깔끔하고 주석이 있음
반응형