Communitygithub.com

접근성 (WCAG 2.2)

웹, iOS, Android에서 WCAG 2.2 Level AA를 충족하는 접근성 UI를 설계, 구현 및 감사합니다. 의미론적 ARIA 역할 및 레이블, 접근성 특성 및 힌트, 포커스 관리, 명암비, 대상 크기, 스크린 리더 지원을 다룹니다. 접근성 준수, 키보드 탐색 또는 스크린 리더 지원을 위해 UI를 구축하거나 감사할 때 사용하세요.

접근성 (WCAG 2.2)란 무엇인가요?

이 스킬은 WCAG 2.2 접근성 지침을 웹(iOS, Android 포함) 애플리케이션에 적용하는 개발자를 위한 포괄적인 가이드입니다. POUR(지각 가능, 작동 가능, 이해 가능, 견고) 원칙을 기반으로 하며, UI 컴포넌트의 설계 및 감사 시 구체적인 기술 구현 방법을 제공합니다. 주요 기능으로는 의미론적 HTML/ARIA 매핑, 플랫폼별 접근성 속성(iOS SwiftUI의 accessibilityLabel, Android Compose의 contentDescription) 매핑, 포커스 관리, 명암비(4.5:1) 및 대상 크기(24x24 CSS 픽셀) 검증, 라이브 리전 설정 등을 포함합니다. 또한 div-버튼, 색상에만 의존한 정보 전달, 모달 포커스 미처리 등 일반적인 안티패턴을 식별하고 수정 방법을 제시합니다. 이 스킬은 프론트엔드 패턴, 디자인 시스템 및 SwiftUI 패턴 스킬과 함께 사용할 때 특히 효과적입니다.

지원 대상✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/rhpxgr8pzm-max/claude-skills/tree/HEAD/plugins/tally-dev/skills/accessibility

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

접근성 (WCAG 2.2)은(는) 무엇을 하나요?

이 스킬은 디지털 인터페이스가 스크린 리더, 스위치 제어 또는 키보드 탐색을 사용하는 모든 사용자에게 지각 가능, 작동 가능, 이해 가능, 견고(POUR)하도록 보장합니다. WCAG 2.2 성공 기준의 기술적 구현에 중점을 둡니다.

사용 시기

  • 웹, iOS 또는 Android용 UI 컴포넌트 사양 정의.
  • 기존 코드에서 접근성 장벽 또는 준수 격차 감사.
  • 대상 크기(최소) 및 포커스 모양과 같은 새로운 WCAG 2.2 표준 구현.
  • 하이레벨 디자인 요구사항을 기술적 속성(ARIA 역할, 특성, 힌트)으로 매핑.

핵심 개념

  • POUR 원칙: WCAG의 기초(지각 가능, 작동 가능, 이해 가능, 견고).
  • 의미론적 매핑: 일반 컨테이너보다 네이티브 요소를 사용하여 내장된 접근성 제공.
  • 접근성 트리: 보조 기술이 실제로 "읽는" UI의 표현.
  • 포커스 관리: 키보드/스크린 리더 커서의 순서와 가시성 제어.
  • 레이블링 및 힌트: aria-label, accessibilityLabel, contentDescription을 통해 컨텍스트 제공.

작동 방식

1단계: 컴포넌트 역할 식별

기능적 목적을 결정합니다(예: 버튼인가, 링크인가, 탭인가?). 사용자 정의 역할을 사용하기 전에 가장 의미론적인 네이티브 요소를 사용합니다.

2단계: 지각 가능 속성 정의

  • 텍스트 명암비가 4.5:1(일반) 또는 3:1(큰/UI)을 충족하는지 확인.
  • 비텍스트 콘텐츠(이미지, 아이콘)에 텍스트 대안 추가.
  • 기능 손실 없이 최대 400% 확대까지 반응형 리플로우 구현.

3단계: 작동 가능한 컨트롤 구현

  • 최소 24x24 CSS 픽셀 대상 크기 보장(WCAG 2.2 SC 2.5.8).
  • 모든 대화형 요소가 키보드로 도달 가능하고 가시적 포커스 표시기가 있는지 확인(SC 2.4.11).
  • 드래그 동작에 대한 단일 포인터 대안 제공.

4단계: 이해 가능한 로직 보장

  • 일관된 탐색 패턴 사용.
  • 수정 제안과 함께 설명적인 오류 메시지 제공(SC 3.3.3).
  • 동일한 데이터를 두 번 요청하지 않도록 "중복 입력"(SC 3.3.7) 구현.

5단계: 견고한 호환성 확인

  • 올바른 이름, 역할, 값 패턴 사용.
  • 동적 상태 업데이트를 위한 aria-live 또는 라이브 리전 구현.

접근성 아키텍처 다이어그램

flowchart TD
  UI["UI 컴포넌트"] --> Platform{플랫폼?}
  Platform -->|웹| ARIA["WAI-ARIA + HTML5"]
  Platform -->|iOS| SwiftUI["접근성 특성 + 레이블"]
  Platform -->|Android| Compose["시맨틱스 + 콘텐츠 설명"]

  ARIA --> AT["보조 기술 (스크린 리더, 스위치)"]
  SwiftUI --> AT
  Compose --> AT

플랫폼 간 매핑

기능웹 (HTML/ARIA)iOS (SwiftUI)Android (Compose)
기본 레이블aria-label / <label>.accessibilityLabel()contentDescription
보조 힌트aria-describedby.accessibilityHint()Modifier.semantics { stateDescription = ... }
동작 역할role="button".accessibilityAddTraits(.isButton)Modifier.semantics { role = Role.Button }
실시간 업데이트aria-live="polite".accessibilityLiveRegion(.polite)Modifier.semantics { liveRegion = LiveRegionMode.Polite }

예제

웹: 접근 가능한 검색

<form role="search">
  <label for="search-input" class="sr-only">제품 검색</label>
  <input type="search" id="search-input" placeholder="검색..." />
  <button type="submit" aria-label="검색 제출">
    <svg aria-hidden="true">...</svg>
  </button>
</form>

iOS: 접근 가능한 동작 버튼

Button(action: deleteItem) {
    Image(systemName: "trash")
}
.accessibilityLabel(\

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

관련 스킬