React Spectrum 기반의 접근성 있는 컴포넌트 라이브러리
Serok UI는 현대적인 디자인 시스템입니다. Adobe의 React Spectrum을 기반으로 하여 동아리 프로젝트에서도 빠르고 효과적으로 구축할 수 있도록 설계했으며, shadcn/ui 스타일의 복사-붙여넣기 방식으로 자유롭게 커스터마이징할 수 있습니다.
"새록(Serok)"은 새로운 싹이 돋아나는 모습을 뜻하는 우리말입니다. 파릇파릇한 색감으로 신선하고 현대적인 UI를 제공합니다.
누군가는 이미 색상, 접근성, 컴포넌트 구조를 고민해서 만들어놨습니다. Adobe의 React Spectrum이 바로 그것입니다. 우리는 이걸 존중하고, 이를 바탕으로 우리의 색깔을 더하기로 했어요.
WCAG 2.1 AA 준수? 이건 우리가 "꼭 해야겠다"고 목표했던 게 아니라, 이미 잘 만들어진 기초 위에 앉으면 자연스럽게 따라오는 결과입니다.
동아리 프로젝트입니다. 모두가 바쁘고, 모두가 자기 일이 많아요. 그래서 우리는 선택해야 했습니다.
"최신 기술을 배우면서 스타일링을 구축할 건가?" vs "이미 검증된 기초를 쓰고 우리가 할 수 있는 일에 집중할 건가?"
우리는 후자를 택했습니다. 그래야 실제로 좋은 컴포넌트를 만들 수 있으니까요.
컴포넌트를 가져다가 번들 크기 때문에 걱정할 필요 없게 하고 싶었어요. 그래서 shadcn/ui처럼 복사-붙여넣기 방식을 선택했습니다.
당신의 코드베이스에 완전히 속하는 컴포넌트들. 색상도, 크기도, 동작도 마음대로 바꿀 수 있어요. CSS 변수를 쓰니까 당신의 디자인 시스템과 쉽게 맞춰갈 수 있습니다.
components.json에 registries를 추가하면 간단하게 설치할 수 있습니다:
{
"registries": {
"@serok": "https://serok.ethansup.net/r/{name}.json"
}
}npx shadcn@latest add @serok/provider
npx shadcn@latest add @serok/buttonnpx shadcn@latest add https://serok.ethansup.net/r/provider.json
npx shadcn@latest add https://serok.ethansup.net/r/button.json자세한 설치 방법은 공식 문서를 참고하세요.
import { Button } from '@/lib/ui/Button';
export default function MyComponent() {
return (
<Button variant="accent" size="L">
클릭하세요
</Button>
);
}- React 19+ - 최신 기능과 성능 최적화 (기본적으로 쓰는 라이브러리)
- React Spectrum - 검증된 접근성과 디자인 시스템 (위에서 설명한 선택)
- TypeScript - 타입 안정성으로 버그 감소와 개발자 경험 향상
- React Router - 모던 라우팅으로 SPA 구축
- Tailwind CSS - 유틸리티 기반 스타일링으로 빠른 커스터마이징
- pnpm - 빠르고 효율적인 패키지 관리
- Fumadocs - 마크다운 기반 문서 생성으로 간편한 유지관리
- shadcn registry - 컴포넌트를 쉽게 설치하고 커스터마이징 가능
- Node.js 18+
- React 19+
- TypeScript 5.0+ (권장)
pnpm installpnpm dev개발 서버가 http://localhost:5173에서 실행됩니다.
pnpm build:docspnpm typecheckpnpm lint공식 문서 및 컴포넌트 가이드는 다음 링크에서 확인할 수 있습니다:
초기 계획 단계에서 우리는 여러 선택지를 검토했습니다.
Adobe도 최신 기술로 나아가고 있습니다. React Spectrum S2와 Spectrum Web Components가 그것입니다. 하지만 우리의 상황에선 맞지 않았어요.
S2를 쓰려면 Parcel의 style macro를 배워야 하는데, 이게 생각보다 복잡합니다. 팀원들을 온보딩할 때마다 이걸 설명하고 배워야 하는데, 시간이 많이 들어갑니다. Spectrum Web Components는 더 모듈화되어 있지만, 서버사이드 렌더링(SSR) 지원을 아직 우선순위로 두지 않고 있어요. 나중에 필요할 수도 있는데 지금 이걸 쓰면 문제가 될 수 있겠다는 생각이 들었습니다.
결국 우리는 "최신 기술 vs 현실적인 운영"을 비교했고, 동아리 프로젝트라는 제약 속에서 최신 기술의 학습 곡선을 감당할 여유가 없었습니다.
이것들은 정말 유연합니다. 하지만 유연하다는 건 "너가 다 만들어야 한다"는 뜻이기도 합니다. 디자인 시스템의 색상, 레이아웃, 컴포넌트 구조를 처음부터 모두 정의해야 해요. 이건 엄청난 작업입니다.
우리는 생각했어요. "정말 우리가 이 모든 디자인 의사결정을 직접 해야 할까? 이미 어딘가에서 잘 검증된 디자인이 있지 않을까?" 이미 대규모 조직(구글, 마이크로소프트)에서 검증된 디자인 시스템을 처음부터 다시 만들 필요가 있을까요? 동아리 프로젝트의 시간과 인력으로는 불가능할 것 같았습니다.
결국 우리는 React Spectrum S1을 선택했습니다.
이미 완성된 디자인과 접근성 구현을 차용하면, 우리는 디자인 의사결정에 시간을 낭비하지 않고 "실제로 좋은 컴포넌트를 만드는 데" 집중할 수 있습니다.
- 색상? 이미 입증된 React Spectrum의 팔레트를 씁니다.
- 접근성? ARIA, 키보드 네비게이션, 스크린리더 지원이 이미 구현되어 있습니다.
- 유지관리? Adobe가 계속 업데이트하고 커뮤니티가 지원합니다.
이게 "바퀴를 다시 만들지 않는다"는 우리 철학입니다. 남의 좋은 일을 존경하고, 똑똑하게 차용하는 것. 그게 동아리 프로젝트에서 품질 높은 결과물을 만드는 방법이라고 생각했습니다.
Serok UI는 Adobe의 React Spectrum을 활용하여 다음을 제공합니다:
- 상태 관리: 내장된 상태 관리 시스템
- 이벤트 처리: 통합된 이벤트 핸들러
- 접근성 기능: ARIA 레이블과 역할 자동 처리
- 다국어 지원: 국제화 지원 (i18n)
MIT License © 2025. 자유롭게 사용, 수정, 배포할 수 있습니다.
문제가 발생하거나 질문이 있으시면:
이 프로젝트는 오픈소스 커뮤니티의 좋은 아이디어와 기술을 바탕으로 합니다:
- Adobe React Spectrum - 검증된 접근성과 디자인 시스템의 기초
- shadcn/ui - 복사-붙여넣기 방식의 컴포넌트 배포 아이디어
- Tailwind CSS - 유틸리티 기반 스타일링 방식
Made with 💚 by the Serok UI team