[7팀 신수빈] Chapter3-1. UI 컴포넌트 모듈화와 디자인 시스템 #18
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Chapter3-1. UI 컴포넌트 모듈화와 디자인 시스템
과제 목표
레거시 코드베이스를 현대적인 디자인 시스템으로 개편하는 실무 경험
Before 패키지 분석 후 After 패키지 개편
개편 목표
디자인 시스템
컴포넌트 아키텍처
사용할 도구
TailwindCSS 4.x
shadcn/ui
CVA (Class Variance Authority)
React Hook Form + Zod
필수 과제
1. 디자인 시스템 구축
2. Before 패키지 분석
3. 컴포넌트 개편
심화 과제
과제 회고
Before 패키지에서 발견한 문제점
1. 스타일링 측면
#1976d2,#e3f2fd,#d32f2f등 색상이 코드 전체에 흩어져 있어 일관성 유지가 어려움style={{}}객체가 중복되어 유지보수성이 극도로 낮음#1976d2,#2196f3등 여러 값으로 표현되어 일관성 없음2. 컴포넌트 설계 측면
helpText, FormSelect는help, FormTextarea는description사용../../../components/atoms/Button3. 접근성 및 코드 품질
any가 이곳저곳 있음개편 과정에서 집중한 부분
1. 디자인 토큰 시스템 구축
rgb(var(--primary) / 0.5))2. CVA 기반 컴포넌트 Variants 패턴
3. Before UI를 시각적으로 100% 유지하면서 내부만 현대화
4. 폴더 구조 단순화
사용한 기술 스택 경험
TailwindCSS 4.x
@import "tailwindcss"한 줄로 설정 완료 (PostCSS 설정 불필요)className="grid grid-cols-2 gap-4"같은 직관적인 레이아웃[&:has([role=checkbox])]같은 복잡한 selector 이해가 어려웠음rgb(var(--primary))문법에 적응 필요shadcn/ui의 Copy-Paste 철학
CVA (Class Variance Authority)
variant="primaryy"오타 시 컴파일 에러 발생Storybook 8.4.7
args로 모든 props 조합을 쉽게 확인어려웠던 점과 해결 방법
문제: inline style이 너무 많아서 리팩토링 중 UI가 깨짐
리뷰받고 싶거나 질문하고 싶은 내용
디자인 토큰 네이밍 컨벤션
--primary,--success-light,--info-border사용--button-primary-bgvs--primary중 어떤 방식이 확장성이 좋을까요?** Before UI 유지 vs 디자인 개선**
** 폴더 구조 관련**
components/ui로 단순화했는데, 프로젝트가 커지면 어떻게 확장하나요?components/ui/form/같은 sub-category?features/폴더로 도메인별 분리?@company/design-system패키지 분리?📚 디자인 시스템 정리
디자인 시스템이란?
디자인 시스템의 3가지 핵심 요소
디자인 토큰 (Design Tokens)
개념
#1976d2) → 변수(--primary)로 추상화토큰의 계층 구조
이번 과제에서 배운 점
CVA (Class Variance Authority)
왜 필요한가?
핵심 장점
variant="primaryy"오타 시 TypeScript 에러compoundVariants로 조합 스타일 정의shadcn/ui의 철학: "Not a Component Library"
기존 UI 라이브러리의 문제
shadcn/ui의 접근
언제 사용하면 좋은가?
Atomic Design Pattern
이론 vs 현실
이론적 계층 구조
실무에서의 문제점
시간 낭비 발생
shadcn/ui의 대안: 단순 구조
배운 교훈
디자인 시스템 구축 단계
1단계: 토큰화 (이번 과제)
2단계: 컴포넌트 재사용성
3단계: 문서화 (Storybook)
4단계: 자동화
실무 적용 순서
생각해본 디자인 시스템의 장점
Q1: "디자이너가 Figma에서 새 색상 추가했어요"
→ 모든 컴포넌트에서 즉시 사용 가능
Q2: "이 버튼만 특별하게 만들어야 해요"
Q3: "다크모드 지원해야 하는데요?"
→ 추가 코드 수정 최소화