피드로 돌아가기
I Built an Accessible React Component Library from Scratch — Here's What I Learned
Dev.toDev.to
Frontend

Native HTML과 CLI 기반 배포로 구현한 고성능 Accessible UI 라이브러리

I Built an Accessible React Component Library from Scratch — Here's What I Learned

Anex_UI2026년 5월 28일3intermediate

Context

기존 UI 라이브러리의 과도한 Opinion 및 Runtime Dependency로 인한 번들 사이즈 증가 문제 발생. Headless UI 라이브러리의 경우 스타일 구현 비용이 지나치게 높아, 접근성과 스타일링 편의성을 동시에 충족하는 중간 지점의 설계 필요성 대두.

Technical Solution

  • HTML Native Element의 showModal() 활용을 통한 Focus Trap 및 Backdrop 기본 기능 구현으로 JS 의존성 제거
  • Native HTML Semantics 우선 원칙 적용을 통한 불필요한 ARIA 속성 배제로 마크업 최적화 및 스크린 리더 혼선 방지
  • Roving Tabindex 패턴 도입으로 Tabs 및 RadioGroup 내 단일 포커스 유지 및 방향키 기반 내비게이션 구현
  • React.cloneElement를 활용한 FormField 주입 구조 설계로 aria-describedby 등 접근성 속성의 자동 연결 자동화
  • Tailwind CSS v4의 Utility와 CSS Modules의 Scoped Style을 결합하여 스타일 유연성과 격리성 동시 확보
  • Registry 기반 CLI 도구 구현을 통해 사용자가 코드를 직접 소유하고 제어하는 Copy-and-Paste 배포 모델 채택

- Modal 구현 시 라이브러리 도입 전 HTML <dialog> 요소의 Native API 검토 - ARIA 속성 추가 전 Native HTML 태그만으로 의미 전달이 가능한지 우선 확인 - 컴포넌트 그룹 내 키보드 이동 구현 시 Roving Tabindex 패턴 적용 검토 - UI 라이브러리 설계 시 런타임 의존성을 낮추는 CLI 기반 코드 생성 방식 고려

원문 읽기