프로젝트를 위한 디자인시스템 구축 과정과 활용 방안
디자인 시스템 왜 할까?
스타트업 정말 바쁘다. 달리는 기차의 바퀴를 바꾸는 일. 항상 아슬아슬하고 긴장을 놓칠 수 없다.
- 디자인 시스템은 UI 라이브러리가 아니다. 프로젝트 정체성을 나타내는 개념 UI 뿐만 아니라 인터랙티브 디자인, 프로덕트 디자인, UX 디자인 등 모두 아우르는 것
서비스 관점의 디자인 시스템
- 서비스 도메인
- 서비스의 도메인 지식
- 사용자 행동 분석
- 이해관계자 매핑
- 요구 분석
- 서비스 브랜딩
- 브랜드 정체성
- 컬러 시스템
- 폰트 시스템
- UX
- 구현
- 개발자 / 디자이너 협업
- 표현
- 아키텍처
- 도메인 모델
서비스의 다지인은 계속해서 변한다. 디자인 시스템은 변화에 빠르게 반응하기 위한 방법. 즉, 디자인에 대한 업무 프로세스 및 방법론
디자이너와 개발자 이야기
디자이너
- 브랜딩, UI/UX, 컬러, 디자이너 사고방식 개발자
- 아키텍처, 객체, 비즈니스 로직, 개발자 사고방식
서로가 서로를 깊게 이해해야 한다? X 조금씩 단계별로 알아가자! O
서로 알아야 할 것들
개발 도메인
- 재사용성, 아키텍처, 데이터 공통 가치
- 사용자 스토리, 제품 도메인, 제품 목적 디자인 도메인
- UI/UX, 디자인 목적, 브랜딩
확장성
- Co-Design(디자인 시스템) -> 디자이너가 일하는 법
- Core -> 전산화한 코어 시스템
- Admin UI, Light UI, Dark UI -> 표현이 포함된 시스템
규칙
앞으로 변하지 않을 가능성이 높은 기본 요소들을 규칙화한다.
업무 프로세스 구축
소통 비용을 최대한 줄이는 것이 주요 전략이다.
디자인 -> 유비쿼터스 랭기지(공통 언어) <- 개발 도메인
기본 요소들
Color, Spacing, Typography, Motion, Grid
분석 - 설계 - 구현의 3단계
components/_designsystem
이라는 폴더 구성
개발자와 디자이너의 소통을 위한 툴 -> Storybook
- 공통적인 컴포넌트, 컬러, typography를 정리해서 보여줌.
- 설계는 간단하더라도 개념과 목적은 명확해야 한다.
단계별 설계
컨셉 아키텍처
- primitive -> 자주 바뀌지 않는 기반 컴포넌트, Button, Input, Select, Grid
- archetype -> 공통 비즈니스 로직, Usecase, State, Side-Effect
- service core -> 사용자에게 보여지는 디자인, Color, Typography, Styled Primitive
- service Extension, Atom, Molecule, Organism, Template, Page 아토믹 디자인
확장 가능한 컴포넌트 설계
Tokens(Spacing, Color, FontSize, Heading) -> Theme(Theme1, 2, 3) -> Generator(createStyles) -> Component(Function Component)
모듈화
lerna + yarn workspace
질문
- 아토믹 디자인
- css 라이브러리
- emotion이 제일 안정적(오래된 라이브러리, 버그가 별로 없음. 자료가 많음) -> 스티치스도 고려했었음(무한 재귀를 돈다.), 더 빠르다.
- 기술 스택은 트레이드오프 -> scss(상대적으로 최적화에 좋다.) but Emotion은 다 js이기 때문에 개발자가 왔다갔다 스위치를 해야 하는 비용이 적다. 빌드할 때, 동적으로 생성
마이크로 프론트엔드
Webpack Module Federation
아토믹 디자인
atom -> 시각적으로 봤을 때, 하나의 역할
molecule과 organism -> 규칙을 확실하게 정함
- molecule: 사용자에게 의미 보다는 범용적으로 사용, 하나의 역할만 가지면
- organism: 사용자에게 의미를 가지는 기능적 요구사항
ex) 사이트의 개인정보 운영정책
- 사용자에게 의미가 있는 역할을 하면 organism -> 즉, 동적
- 그냥 string molecule -> 정적
template
- Layout 용도로 많이 사용
- Template에 템플릿 추가 가능? -> template은 페이지 내에서만 사용
- 유사한 페이지 -> refashion의 경우 shop 탭