AI Native Design System
요즘 너무 AI 거려서 솔직히 좀 재미가 없다 ㅋㅋㅋㅋㅋ 호들갑이 너무 많은게 반절은 되는 것 같다.
그럼에도 가치가 있다는 점은 분명하며 디자인 시스템에서는 AI를 어떻게 흡수되어야 하는가에 대하여 간단히 써보았다. 나도 누군가의 재미없음에 이렇게 기여를.
마치 모나드 같다. 모나드는 엔도펑터 범주에서의 모노이드야. 뭐가 문제지?
The NATIVE
맨날 지겹게 나오는 주제이니 만큼 Native의 뜻이 무엇인가?
'원주민', '태생의', '토착의'이란 뜻이며, 특정 지역에서 태어나고 자란 사람, 혹은 특정 환경에 고유하게 속한 것이라는 의미를 가진다.
여기서 "특정 환경에 고유하게 속한 것" 이 보통 중요하다고 여겨진다.
프로그래밍의 맥락에서도 Native 언어란 Machine Code로 직접 컴파일되어 바이너리를 만들 수 있는 언어를 나타내는 경우도 흔하다.
Native GUI
그런데 UI에서 Native는 Advice for the next dozen Rust GUIs에서도 설명하듯 조금 모호하다.
예를 들어 Windows에는 매우 다양한 공식 구현체가 MFC, WinForms, WPF, WinRT, UWP, WinUI, MAUI 로 존재한다. 또한 VCL/Firemongkey, QT, Avalonia, Uno등 주목할만한 서드파티 생태계도 존재한다.
하위 호환성을 가차없이 버리는 Mac 계열도 Carbon, Cocoa, Prokit(내부용), SwiftUI 처럼 다양한 프레임워크가 존재한다.
그렇다고 완전히 범위를 좁혀 FrameBuffer에 직접 Graphic을 그려야 Native 프레임워크인가? 하지만 SwiftUI나 JetpackCompose는 그러지 않으니 또 애매하다.. 그래서 앞선 블로그에서는 다음과 같은 기준을 제시한다.
간단한 애플리케이션의 바이너리 크기는 얼마인가?
간단한 애플리케이션의 시작 시간은 얼마나 걸리나?
텍스트가 플랫폼의 기본 텍스트처럼 보일까?
앱은 시스템 수준에서 설정된 기본 설정을 어느 정도까지 지원하나?
예상되는 텍스트 제어 기능 중 어떤 하위 집합이 제공하나?
BiDi를 포함한 복잡한 텍스트 렌더링
알파벳 문자를 위한 데드키를 포함한 키보드 레이아웃을 지원합니다.
플랫폼 사용자 인터페이스 가이드라인에 따른 키보드 단축키
입력 방식 편집기
색상 이모티콘 렌더링 및 플랫폼 이모티콘 선택기 사용
복사-붙여넣기(클립보드)
드래그 앤 드롭
맞춤법 및 문법 교정
접근성(텍스트를 소리 내어 읽어주는 기능 포함)
일종의 덕타이핑 같은 접근이다. 플랫폼 네이티브 기술을 사용했는가보다는 플랫폼에서 사용자가 기대하는 기능/관례/품질을 얼마나 충족하는가가 중요하다는 뜻이다.
Native란 구현 방식이 아니라 환경에 얼마나 깊이 통합되어 기대하는 행동을 자연스럽게 수행할 수 있는지가 관건이다.
AI Native Design System
이러한 관점에서 AI Native Design System이란
AI가 이해하고, 기여하고, 제품 안에서 함께 작동할 수 있는 디자인 시스템.
으로 접근해야 한다.
앞선 질문은 이렇게 치환될 수 있다.
시스템 수준의 설정을 지원하는가? -> AI가 토큰, 정책, 접근성 규칙을 얼마나 따르는가?
IME, 클립보드, 드래그엔드롭을 지원하는가? -> AI가 실제 작업 흐름속에서 생성, 수정, 되돌리기를 얼마나 잘 지원하는가
접근성을 지원하는가? -> AI가 시스템의 규칙에 접근가능(Machine Readable), 결과는 검증, 설명, 통제 가능한가?
나는 3가지 환경에서 1급으로 기능해야 성공적으로 만들었다고 판단한다.
AI as Consumer Native: 제품 메이커 관점으로, AI가 시스템처럼 정확히 사용할 수 있는가?
AI as Contributor Native: 시스템 메이커 관점으로, AI가 검토 가능한 기여를 만들 수 있는가?
AI as Collaborator Native: 최종 유저 관점으로, AI가 사용자 작업 흐름 안에서 자연스럽게 협업 가능한가?
예전에 적은 기호론 관련 글으로 사고하자면, 디자인 시스템은 메타언어로 기능하며, 유저로서는 함축적 기호계로서 기능한다.
AI as Consumer Native
비전: AI가 숙련된 디자이너나 개발자처럼 이해하고, 사용한다
AI-generated output이 기본적으로 디자인시스템을 이해하고 사용한다는 것이다.
현재 가장 많은 메이커들이 시도하는 방식이다. 보통 프러덕트를 만들기 위한 도구이다보니.
Expose your design system to LLMs
Turning Handoffs into Handshakes: Integrating Design Systems for AI Prototyping at Scale
Stitch’s DESIGN.md format is now open-source so you can use it across platforms.
그만큼 지루하고 현학적이며, 그동안 했어야 했는데 안한 기초작업들을 해결하고, 암묵지는 꺼내며, 연결하는 일들이 대부분이다. 마치 접근성처럼
미션: 디자인 시스템의 컴포넌트, 토큰, 패턴, 사용조건, 접근성 규칙등을 Machine Readable 한 규약으로 제공한다
구체적인 태스크들은 이런게 될 수 있겠다.
Token metadata: HEX가 아니라 의미 기반으로 제공
Component Schema: 컴포넌트을 어떻게 사용할 수 있는지에 대한 Prop과 타입을 제공
Usage Rules: 언제 쓰고, 언제 쓰면 안되는지
패턴 및 예제: 조합 가능한 예를 제공해준다
API 제공: llms.txt, mcp, skill 처럼 AI 가 인식할 수 있는 도구를 제공한다
이때 API 제공만 해놓고 우리 AI에 최적화된 시스템을 만들었어요~!! 하는 경우를 많이본다.
실제론 다른 것보다 우선순위가 낮은 작업이다. 호출 도구에 불과하니까.
사람에게 엉망인 라이브러리와 가이드만 덜렁 던져주고 알아서 만들라고 해놓고 다했다는 것과 별반 다를바가 없다. 학문적으로 접근하자면 마케팅 믹스에서 Place에 해당되는데, Product보다 우선순위가 낮다.
물론 구현을 어떻게 했는가는 또 별개의 일이겠지만?
AI as Contributor Native
비전: AI가 디자인 시스템의 품질, 일관성, 확장성을 높이는 검증 가능한 기여자가 되며, 스스로를 개선한다
디자인 시스템이 AI의 도움으로 스스로 관찰되고, 정리되고, 개선이 가능해야 한다는 것이다.
이는 과격하게 들리지만 전혀 이상하지 않다. pi-autoresearch, A-Evolve, HyperAgents 등 시스템 스스로 개선하는 루프를 만드는 컨셉이 존재하며, 컴파일러에서는 Bootstrapping 으로 알려져있다.
특히 AI 가 활용 및 트리거하는 시스템을 반복 개선하는데에는 AI가 더 잘할 수 있는 부분이 분명 존재한다고 본다.
미션: AI 가 컴포넌트와 토큰을 생성 및 확장할 수 있으며, 발견한 문제, 개선안, 문서, 마이그레이션, 패턴 등울 검토 가능한 기여로 전환하는 체계를 만든다.
Generator: 컴포넌트, 문서,마이그레이션 등을 만들거나 개선할 수 있다
Pattern Discovery: 프로덕트에서 시스템화 할 만한 것들을 발견하고 제안한다
전역 시스템 최적화: 문서, 각종 툴등 시스템 자체를 평가할 방법을 찾고, 반복적으로 개선한다
사람은 신경을 많이 쓴 부분은 정말 좋은 결과를 낼 수 있지만 아닌 부분은 실수나 빼먹는 부분들이 많이 생길 수도 있지만 기계는 그렇지 않으니까.
좋은 지표를 만든다는 가정하에 반복적으로 개선하여 달성하는 부분은 쉬지않고 병렬로 실험을 돌려보고 비교가 가능하다는 점에서 사람보다 기계가 유리한 부분이 있을 것이다. 또한 사람은 이 일을 당장 하는게 임팩트가 있는지도 계속 검열해야 하지만, 기계는 값싸게 즉시 실행해볼 수도 있다.
어떤게 될 수 있을까? 다음과 같은 벤치마크과 같은 걸 각 디자인 시스템에 특수화 시켜 직접 구축한다라고도 취급할 수 있다.
코드를 잘 만들 수 있는지에 대한 Design2Code, DesignBench, FrontendBench
UI/UX가 잘 구성되었는지에 대한 UICrit, MLLM as a UI Judge, WiserUI Bench
이제 본격적으로 observing이 가능하고, 지표화와 작고 빠른 실험으로 개선할 수 있는 시스템으로 나아가게 된다. 테크블로그에 메트릭과 AI의 활용을 함께 두었던 이유기도 하다.
이때 메트릭도 중요하지만 탐색가능성도 중요하다. 이상적으로는 모든 레포를 인덱싱 해두고, 즉시 즉시 체크하거나 툴링에 텔레메트리를 심어두고 버전, 자주 사용하는 컴포넌트, Broken하거나 Custom 해서 사용하는 컴포넌트 정보들의 현황을 바로 파악하고 개선점을 찾아내는 것이지만 분기당 Batch 프로세스로 경향을 추출할 수 있는 정도여도 괜찮다고 본다.
이외에 조직적 관점으로도 탐색가능성은 중요하다. 예전에 Reimagining Design Systems at Spotify때 이라는 글을 보았을때 이게 정말로 잘 동작할까? 라는 의문이 있었다.
Encore 내부에는 여러 디자인 시스템이 있으며, 각 시스템은 회사 내 서로 다른 팀에서 관리
마치 마한이나 가야 같은 연맹체 국가처럼 운영되는 것처럼 들렸기 때문이다. 미국이나 독일 같은 연방제가 아니라.
아니나다를까 약 5년이후, 다음과 같은 회고가 올라왔다.
Why Federated Design Systems Keep Failing
중앙 집중식 모델에는 무엇이 필요할까요? 전담팀, 명확한 책임 소재, 그리고 프로세스가 필요합니다. 복잡성이 낮아지고, 조정 부담이 줄어들며, 책임 소재가 명확해지고, 가치를 더 빠르게 보여줄 수 있습니다. 대부분의 경우 답은 명확합니다. 중앙 집중식 모델이 더 간단합니다. 탄탄한 기반이 마련되면 나중에 분산형 기여 패턴으로 발전시켜 나갈 수 있습니다. 연합형 설계를 시작한다는 것은 기본적인 설계 시스템 문제를 해결하기도 전에 가장 복잡한 조직적 과제를 해결하려고 한다는 것을 의미합니다.
이러한 의사결정 프레임워크로서 나는 LinkedIn과 Spoqa의 사례가 좋았던 같다. 각각 전술과 전략 같은 느낌으로.
The LinkedIn DPH Framework
스포카 마켓플레이스 (슬라이드)
AI as Collaborator Native
비젼: AI가 제품 경험의 자연스러운 협업자로 작동한다.
최종 프로덕트에서 유저가 앱과 상호작용할때 AI가 참여하여 함께 경험한다는 것이다.
이 또한 넓은 커버리지가 필요하다.
미션: 자동완성, 추천, 요약, 설명, 실시간 생성등 AI 개입 방식을 일관된 사용자 경험 패턴으로 표준화한다.
AI를 활용할때 자주 쓰는 패턴에 대하여 제공
자동완성과 같이 AI와 직접 상호작용하는 컴포넌트
AI가 직접 UI를 생성할 수 있도록 시스템 구축
간단하게는 prompt-kit 처럼 AI 용 어플리케이션용 패턴 라이브러리를 제공할 수도 있다. (기존 디자인시스템을 보완하는 수준)
조금 더 나아가면 통제된 방식으로 컴포넌트에서 대응하는 .NET Smart Components 와 같은 형태를 취할 수도 있다.
사이즈가 큰것은 마지막인데 많은 오픈소스 실험들이 일어나고 있고, 존버를 해보아도 좋다고 생각한다.
Generative UI Spectrum: How Agents Now Ship Their Own Interfaces
생성형 UI 패러다임은 결과물을 잘 통제하기 위해 디자인시스템을 활용하려는 방향을 취하고 있으며, SDUI(Server Driven UI)에서 얻는 러닝을 그대로 사용할 수 있다고 본다.
Server-driven UI로 토스의 마지막 어드민 만들기
Server Driven UI 호출 구조 개선
예컨데 MCP-UI는 Shopify의 RemoteDom을 활용하고 있다. 초반에는 지금보다 더 노골적으로 사용했었는데 흔적이 덜해졌다.
따라서
서버에서 순수한 컨텐츠만 내려주는 Headless CMS
서버에서 데이터와 UI 배치까지 내려주는 Server Driven UI
에 정해진 로직이나 컨텐츠에 더하여 생성된 컨텐츠와 UI 까지 추가로 다루게 되었다고 보아도 무방하다.
이외에도 A2UI + AGUI, json-render, OpenUI등 다양한 컨셉이 싸우고 있으니 마치 Angular vs React vs Vue 시대에 속단을 내려 한가지에 정착해버리는 위험한 선택을 하기보다는 잠시 간을 보는게 좋지 않을까?









