디자인 시스템에 맞는 코드 자동화

디자인팀과의 협업, 이렇게 접근했습니다.

  • 디자인팀의 작업 방식에 대한 이해와 존중

    • 디자인팀의 도구(Figma 등), 워크플로우, 제약 사항에 대한 이해 필요

    • 일방적인 요구가 아닌, 상호 존중의 자세로 협업

  • 디자인 시스템에 대한 기본 이해

    • 개발자도 디자인 시스템의 개념 및 구성요소(컴포넌트, 토큰, 패턴 등)를 이해해야 함

    • 디자인 시스템을 이해하면 다음과 같은 효과 기대:

      • 디자이너의 의도를 정확히 파악

      • 커뮤니케이션 비용 절감

      • 중복 작업, 재작업 최소화

  • 디자인 토큰 및 Local Style 활용

    디자인 토큰 (Design Tokens)

    • 색상, 폰트, 여백, 크기 등 스타일 속성을 추상화하여 재사용 가능하게 만드는 방식

    • 토큰 기반으로 개발 시, 스타일 일관성과 유지보수성 대폭 향상

    Local Style (Figma 기준)

    • 디자인 토큰이 도입되지 않은 조직에서도 Figma의 Local Style을 활용 가능

    • 색상, 텍스트 스타일, 효과(예: 그림자)를 스타일로 등록 → 일관성 확보

    자동화 방법

    • Figma의 JSON Export 기능을 통해 스타일 정보 추출

    • 색상, 폰트, spacing, border radius 등 정보를 개발 코드에 자동 반영 가능


✅ 기대 효과

1. 컴포넌트 재사용성 향상

  • 정의된 컴포넌트 기반으로 개발 → 중복 구현 방지

  • 재사용 가능한 구조 → 생산성과 유지보수성 증가

2. 스타일 누락 방지

  • 텍스트 스타일 등에서 흔히 빠지는 box-shadow, text height, line height 등을 정확히 반영 가능

3. SSOT(Single Source of Truth) 기반 협업 최적화

  • 스타일 정보의 단일 소스 정의로 디자인-개발 간 불일치 최소화

  • 동일한 기준으로 컴포넌트 구성 → 디자인/개발 품질 일관성 유지

🎯 디자인 토큰 자동화 적용을 위한 전체 프로세스 구조

1. Figma 토큰 추출

  • 디자인 시스템 내에서 정의된 색상, 폰트, 여백 등의 스타일 속성을 디자인 토큰으로 정리

  • Figma의 토큰 관리 도구(예: Tokens Studio 등)를 통해 토큰 데이터를 추출


2. JSON 포맷으로 내보내기

  • 추출된 디자인 토큰을 JSON 파일로 내보냄

  • 이 JSON은 후속 자동화 프로세스의 입력값으로 활용됨


3. token-transformer 적용

  • JSON 내 변수 참조값(예: {color.primary})을 실제 값으로 변환

  • token-transformer를 사용하여 원시 값(raw value) 을 포함한 JSON 생성


4. 변환된 JSON 생성

  • 이 단계에서의 결과물은 참조값 없이 순수한 실제 값이 포함된 JSON

  • 이후 스타일 변환 도구에 직접 사용할 수 있는 구조로 정리됨


5. style-dictionary 변환 적용

  • style-dictionary를 통해 디자인 토큰을 다양한 플랫폼 포맷으로 변환

  • 지원 포맷 예시:

    • Flutter (Dart 코드)

    • Web (CSS, SCSS, JS)

    • Android (XML)

    • iOS (JSON, Swift)


6. 최종 CSS 또는 플랫폼별 스타일 파일 생성

  • 변환된 결과물로 실제 프로젝트에 적용 가능한 스타일 정의 파일(CSS, Dart 등) 생성

  • 디자인과 개발 간 동기화된 스타일 기준으로 유지 가능

✅ Flutter 코드 자동 생성을 위한 도구 비교 및 선택 과정

도구 테스트 목록

도구명
특징
Composition Token 지원

널리 사용되는 디자인 토큰 변환기

✅ (단, 유료 Pro 버전에서만 지원)

Flutter 특화 확장

❌ Composition Token 미지원

  • 두 도구 모두 Color, Spacing, Radius 등 기본 토큰(Primitive Token) 에 대한 Flutter 코드 생성은 가능

  • 하지만, TextStyle 같은 복합 토큰(Composition Token) 생성에는 제약이 있음


✅ 최종 선택: figma2flutter 플러그인

  • figma2flutter는 Figma 스타일 데이터를 기반으로 TextStyle 포함 전체 디자인 토큰을 Flutter 코드로 자동 변환 가능

  • Composition Token까지 지원되는 유일한 무료 오픈소스 대안

  • 최종적으로 디자인 시스템 전체를 Flutter 코드로 일관되게 적용 가능

프로세스 진행하기

Figma의 Tokens Studio 플러그인을 사용하면 디자인 토큰을 쉽게 추출할 수 있습니다.

  • 컬러, 타이포그래피, 여백 등의 디자인 토큰을 설정합니다.

    • import Local Styles or Design Token

    • 현재 파일은 비어 있으며, 다음 단계에서 토큰을 추가할 것입니다.

  • Tokenization 된 Json 확인

💡 예제 JSON:

{
  "Semantic": {
    "Static": {
      "white": "#ffffff",
      "grey_background": "#e7e9ef",
      "grey_disabled": "#b6bcc8",
      "black": "#16171b"
    },
    "Accent": {
      "primary": "#122699",
      "primary_light": "#dfe0ff",
      "primary_disabled": "#dbdef0"
    },
    "Status": {
      "error": "#dc0c0c",
      "caution": "#f1a107",
      "success": "#11a277",
      "progress": "#287eff",
      "fail": "#636874",
    }
  },
  "Colors": {
    "grey": {
      "10": "#16171b",
      "20": "#1e2025",
      "30": "#444855"
    }
  }
}
  • Json 을 git repository 에 내보내기(export)

Git Branch Push

Git에 대한 Access 권한을 얻은 뒤 Repo 설정과 브랜치를 설정하고 위에서 정의한 디자인 토큰을 JSON으로 Export 할 파일 경로를 설정하면 Figma 설정은 끝이라고 볼 수 있습니다.

변경 사항을 저장소에 푸시하라는 메시지가 표시됩니다. 커밋 메시지를 추가한 후 "Push" 버튼을 클릭.

Push 후 GitHub 저장소를 새로고침하면 token-translation/tokens 폴더에 tokens.json 파일이 생성된 것을 확인할 수 있습니다. 이제 Figma, 원격 저장소, 로컬 폴더 간 연결이 완료되어 디자인 토큰 관리가 자동화됩니다.

  • token.json 목록

    • 거의 1500줄에 가까운 피그마 속성들이 있다. 색은 자그마치 133개나 있다.

    • 수동으로 코드를 넣을 생각하면 아찔하다.

  • 디자인 시스템의 각 속성에 맞는 코드 생성하기

결과물

  • 디자인 시스템 속성들을 abstract클래스, 구현체 클래스로 만들어준다.

  • 텍스트 스타일을 이렇게 편리하게 만들어준다.

  • BoxShadow 의 경우도 예전 같았으면 매번 수동으로 구현하거나 이미 어딘가에 있는 동일한 코드를 또 구현하면서 관리하기가 어려웠을텐데 아래와 같이 잘 만들어줍니다. 이제는 해당 파일 내에 명시되어 있는 BoxShadow 에서만 확인 후 코드에 반영해주면 됩니다.

[GS 리테일 디자인 시스템] https://gsretail.tistory.com/20 [올리브영 디플롯 디자인 시스템] https://oliveyoung.tech/2024-12-16/Design-System-Token-Automation/ [원스토어 Style Dictionary] https://onestorecorp.com/sv/techblog/2024-12-09/Style%20Dictionary%EB%A1%9C%20%EB%94%[…]4%20%EC%B2%AB%20%EA%B1%B8%EC%9D%8C%20%EB%96%BC%EA%B8%B0.html

아직 시도해보지 못한 것

Embed assets as Base64

https://github.com/amzn/style-dictionary/tree/main/examples/advanced/assets-base64-embed

Flutter Example for Style Dictionary

fileWatching - (chokidar) 을 사용해서 매번 token.json 이 변경될 떄마다 style dictionary 재실행하도록 chokidar "tokens.json" -c "node build-tokens.mjs" 실행 가능.

https://styledictionary.com/examples/basic/

Composition Token - H4

Variables의 기능

Last updated