shadcn/ui, Radix, React Area, ... 등등 예전에는 bootstrap 하나로 다 해결되었던 것 같은 디자인 시스템 어쩌구가 뭔가 많이 생겼다.
- 이번에 React로 프론트엔드 구현하는 김에 한번 정리해봤다.
왜 생겼는가?
- 부트스트랩 (2011)은 CSS 프레임워크. 디자인을 조금만 벗어나려고 해도 스타일을 덮어써야 함.
- 컴포넌트에 클래스만 붙이면 스타일과 동작이 한번에 딸려 옴
- Tailwind (2019)는 부트스트랩처럼 미리 만들어진 컴포넌트 클래스 대신, 유틸리티 클래스를 조합하는 방식을 대중화시킴.
- Radix, Headless UI 등 라이브러리는 스타일과 로직을 분리해서 해결. React 생태계가 성숙하며 동작 로직과 스타일을 분리하게 됨
- 각 라이브러리 사이에서도 장단점이 있음
구조
- Headless primitive: 동작 및 접근성 로직만 담당
- Radix UI
- Base UI
- React Aria
- 스타일 입히는 레이어
- Radix Themes (Radix 공식)
- shadcn/ui (Radix, Base UI, React Aria 모두 사용 가능)
shadcn/ui 특징
- 전통적인 npm 패키지는
npm install을 통해 설치하면 그 라이브러리 내부의 내용을 바꾸기는 어려웠음.
npm install @mul/material
import { Button } from '@mul/material'
- 하지만
shadcn/ui는 npx를 통해 실행하면 라이브러리를 설치하는 것이 아닌 cli 가 button.tsx같은 소스 코드 파일을 가져와서 프로젝트에 직접 복사하여 저장.
- 프로젝트에 의존성 남지 않음.
- 내가 만든 코드처럼 취급되기 때문에, 원한다면 수정도 가능.