grep

Design

멀티 프레임워크 디자인 시스템, 결국 운영 가능한 구조를 선택한 이유

Henby여기어때

2026년 3월 10일

원문에서 보기 ↗

안녕하세요. 서비스웹개발팀의 헨비입니다.

이번 글에서는 React와 Vue를 함께 지원하는 디자인 시스템을 직접 만들고 배포/운영하면서, 왜 결국 “모든 것을 동일하게 지원”하는 전략에서 “운영 가능한 범위를 선택하는 전략”으로 전환했는지 정리해보려고 합니다.

처음에는 core + react + vue 구조로 컴포넌트까지 일관되게 제공하는 것을 목표로 했지만, 실제 운영에서는 기능 추가, QA, 배포, 회귀 검증 비용이 빠르게 커졌습니다.

현재는 React 컴포넌트를 운영 축으로 두고, Vue에서는 토큰/스타일/유틸리티 같은 디자인 파운데이션을 중심으로 소비하고 있습니다. 이 전환 과정에서 무엇을 얻고 무엇을 포기했는지, 그리고 비슷한 상황에서 어떤 기준으로 선택해야 하는지 공유하겠습니다.

  1. 왜 멀티 프레임워크 디자인 시스템을 시작했나?

  1. 초기 설계: core + adapter(react/vue) 구조

// core (headless)
export function createBoxButton(props) {
  return { state, bindings }
}

// React adapter (요약)
import { createBoxButton } from "@yeogiforge/core";
export function BoxButton(props) {
  const { state, bindings } = createBoxButton(props);
  return (
    <button {...bindings} data-state={state}>
      {props.children}
    </button>
  );
}

// Vue adapter (요약)
<script setup lang="ts">
import { createBoxButton } from "@yeogiforge/core";
const props = defineProps<{ disabled?: boolean }>();
const { state, bindings } = createBoxButton(props);
</script>
<template>
  <button v-bind="bindings" :data-state="state">
    <slot />
  </button>
</template>

구축보다 어려웠던 운영: 이중 구현과 동기화 비용

초기에는 core + adapter 구조로 중복을 줄일 수 있다고 판단했습니다. 하지만 실제 운영에서는 컴포넌트 레이어의 비용이 크게 남아 있었습니다. 새 컴포넌트를 추가하거나 기존 컴포넌트를 수정할 때마다 React/Vue 양쪽 구현, 스토리, 검증 포인트가 함께 늘어났습니다.

공통 로직이 core에 있어도, 프레임워크별 렌더링/상태 연결/엣지 케이스 대응은 각 adapter에서 별도로 처리해야 했습니다.

대응 해야 할 파운데이션과 컴포넌트의 목록

운영 모델 전환: React 컴포넌트 집중, Vue는 파운데이션 중심

결국 저희가 선택한 방향은 ‘모든 레이어를 동일하게 지원’하는 전략이 아니라, 레이어별로 지원 수준을 다르게 설계해 운영 가능성을 확보하는 전략이었습니다.

파운데이션 공통화 범위와 개발자 사용성

저희는 컴포넌트 공통화 범위를 줄이는 대신, 파운데이션 레이어의 재사용성과 사용성을 높이는 데 집중했습니다.

중요했던 기준은 “모든 것을 강제 공통화” 가 아니라 “필요한 파운데이션만 가져다 쓸 수 있는 유연성” 이었습니다.

덕분에 팀 내부 공통 자산으로도 활용하고, 프로젝트별 선택적 도입도 가능하게 설계했습니다.

멀티 프레임워크에서 ‘지원 범위’를 설계하는 법

이번 경험을 통해 멀티 프레임워크 디자인 시스템의 핵심은 기술 선택 자체보다, 지원 범위를 어떻게 설계하고 운영할지에 있다는 점을 확인했습니다. 처음에는 React/Vue를 동일 수준으로 지원하려고 했지만, 실제 운영에서는 구현·검증·배포 비용이 빠르게 증가했습니다.

그래서 현재는 React 컴포넌트를 운영축으로 두고, Vue는 파운데이션 공통화에 집중하는 방식으로 운영 모델을 재정의했습니다.

이 전환은 “더 많은 지원” 보다 “지속 가능한 품질과 속도”를 우선한 선택이었습니다. 비슷한 상황에 있는 팀이라면, 아키텍처의 이상형보다 팀이 장기적으로 감당할 수 있는 지원 범위를 먼저 정의해보시길 권장드립니다.

디자인 시스템은 한 번의 구축으로 완성되는 결과물이 아니라, 운영 가능한 범위를 계속 조정해 나가는 제품이라고 생각합니다.